Duration: 6-8 hours
Difficulty: ⭐⭐
Focus: Building CI/CD pipelines from scratch, standardizing build and deploy processes, debugging broken deployments, and generating incident runbooks -- all with Copilot
- DevOps and platform engineers who set up CI/CD for development teams
- Developers responsible for their own build and deploy processes
- Teams that currently deploy manually and want to automate
- Engineers who want to practice using Copilot for infrastructure and pipeline code
- Familiarity with CI/CD concepts (build, test, deploy stages)
- Basic understanding of GitHub Actions (YAML workflow syntax)
- Comfort with shell scripting and Node.js (the application uses both)
- No cloud provider account needed -- pipelines run in GitHub Actions
- Application: Node.js/Express API + static HTML frontend
- CI/CD: GitHub Actions
- Debugging: A deliberately broken staging deployment with 5 bugs to find
- Copilot features: Agent mode,
/fixcommand, custom prompts
TaskBoard is a simple kanban-style task management application with two components:
api-service/: A Node.js/Express REST API with an in-memory SQLite databaseweb-app/: A static HTML/CSS/JS frontend
The application works but has no CI/CD pipeline, no automated tests, and no standardized deployment process. The only deployment mechanism is a shell script (scripts/deploy.sh) with commented-out commands. There is also a stage-broken/ directory containing a copy of the API with 5 deliberate bugs that simulate configuration drift in a staging environment.
Follow the common setup steps first (clean start, custom instructions, custom agents, custom skills), then continue below.
Navigate to challenges/challenge-14-pipeline-factory/. Read the system context first, then explore the api-service/ and stage-broken/ directories before writing any instructions.
A dedicated devcontainer is provided at .devcontainer/challenge-14-pipeline-factory/ with Node.js LTS and GitHub CLI.
Your .github/copilot-instructions.md should include:
- That you are building CI/CD pipelines for a Node.js application (API + static frontend)
- Your deployment conventions (environment naming, secret management, approval gates)
- That Copilot should generate GitHub Actions workflows following best practices (pinned action versions, minimal permissions, proper secret handling)
- Your preferred testing approach (what level of tests, coverage requirements)
- Non-negotiable: no workflow gets broader permissions than the job actually requires
- Pipeline Architect Agent -- Designs GitHub Actions workflows following best practices: reusable workflows, matrix builds, caching, and environment protection rules. Give it a build/deploy requirement; it proposes the workflow structure. Use it when designing or restructuring a pipeline.
- Deploy Debugger Agent -- Analyzes broken deployment configurations, mismatched environment variables, and missing dependencies by comparing a working setup against a broken one. Give it both configurations; it identifies discrepancies. Use it during the staging debugging phase.
- Runbook Writer Agent -- Takes an error log or incident description and produces a step-by-step runbook with diagnostic and resolution procedures. Give it a log excerpt; it drafts the runbook. Use it once an incident is understood, not while still diagnosing it.
- Config Drift Diff Skill -- A fixed sequence: compare the working
api-service/againststage-broken/file by file, list every discrepancy, and classify each as configuration, dependency, or code drift. - Pipeline Stage Addition Skill -- A repeatable workflow for adding a new CI/CD stage: define the job, parameterize what differs from prior stages, wire required secrets, and verify with a dry run before merging.
Search the shared examples guidance for terms like "CI/CD pipeline agent", "deployment drift skill", and "GitHub Actions instructions" before you draft your own.
- Use Agent mode to generate complete workflow files. Describe what you want ("a GitHub Actions workflow that builds and tests a Node.js app, runs on PRs and pushes to main, caches node_modules") and let Copilot produce the YAML.
- For the staging debugging phase, paste the broken
server.jsand the workingserver.jsinto chat and ask Copilot to diff them and identify issues. - When creating reusable workflows, ask Copilot to parameterize things that differ between projects (Node version, test command, deploy target).
- Use
/fixon the broken staging code -- it catches several of the issues directly. - For runbook generation, give Copilot an error log and ask it to produce a step-by-step troubleshooting guide written for someone with limited technical background.
- GitHub Actions Documentation
- Reusable Workflows
- Copilot Guide
- Prompt Engineering Guide
- Troubleshooting Guide
Next: Stages