Practice
1. What is the main purpose of a CI/CD pipeline for an Express app?
easy
Solution
Step 1: Understand CI/CD pipeline role
A CI/CD pipeline automates repetitive tasks like testing and deployment to save time and reduce errors.Step 2: Identify pipeline purpose for Express app
For an Express app, the pipeline runs tests and deploys the app automatically when code changes.Final Answer:
To automate testing and deployment when code changes -> Option AQuick Check:
CI/CD automates testing and deployment [OK]
Hint: CI/CD means automatic test and deploy on code change [OK]
Common Mistakes:
- Thinking CI/CD writes code
- Confusing deployment with UI design
- Assuming CI/CD manages databases
2. Which of the following is the correct syntax to run tests in a GitHub Actions workflow for an Express app?
easy
Solution
Step 1: Review GitHub Actions syntax for commands
In GitHub Actions, commands run under a step use the key 'run:' followed by the command string.Step 2: Identify correct command format for tests
To run tests with npm, the correct syntax is 'run: npm test'. Other options miss the colon or use wrong keys.Final Answer:
run: npm test -> Option CQuick Check:
GitHub Actions uses 'run:' before commands [OK]
Hint: GitHub Actions commands start with 'run:' [OK]
Common Mistakes:
- Omitting colon after 'run'
- Using 'execute' or 'command' instead of 'run'
- Writing commands without quotes or colon
3. Given this GitHub Actions step in a CI/CD pipeline for an Express app:
What happens if the tests fail?
- name: Install dependencies
run: npm install
- name: Run tests
run: npm testWhat happens if the tests fail?
medium
Solution
Step 1: Understand default GitHub Actions behavior on failure
If a step like 'npm test' fails (returns error), the pipeline stops by default and does not proceed to next steps.Step 2: Apply this to deployment step
Since deployment usually comes after tests, if tests fail, deployment will not run to avoid deploying broken code.Final Answer:
The pipeline stops and deployment does not happen -> Option AQuick Check:
Failed test stops pipeline by default [OK]
Hint: Failed test stops pipeline unless configured otherwise [OK]
Common Mistakes:
- Assuming pipeline continues after test failure
- Thinking tests auto-retry without setup
- Confusing install step with test step
4. You wrote this GitHub Actions workflow snippet for your Express app:
What is the error in this snippet?
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Install dependencies
run: npm install
- name: Run tests
run npm test
- name: Deploy
run: npm run deployWhat is the error in this snippet?
medium
Solution
Step 1: Check syntax of each step
In GitHub Actions, each step's command must use 'run:' with a colon. The 'Run tests' step misses the colon after 'run'.Step 2: Verify other steps
'npm run deploy' is a valid command if defined in package.json scripts. 'npm install' is acceptable.Final Answer:
Missing colon after 'run' in the Run tests step -> Option BQuick Check:
GitHub Actions commands need 'run:' with colon [OK]
Hint: Check colons after 'run' in each step [OK]
Common Mistakes:
- Forgetting colon after 'run'
- Assuming 'npm run deploy' is invalid
- Confusing job structure with step syntax
5. You want to add a deployment step to your Express app's GitHub Actions pipeline that only runs when tests pass and on the main branch. Which is the best way to configure this?
hard
Solution
Step 1: Understand conditional deployment needs
Deployment should run only on main branch and only if tests succeed to avoid deploying broken code or on wrong branches.Step 2: Use GitHub Actions condition syntax
The 'if:' condition can check branch with 'github.ref == "refs/heads/main"' and check success with 'success()' function.Final Answer:
Use 'if: github.ref == "refs/heads/main" && success()' before the deploy step -> Option DQuick Check:
Conditional deploy uses 'if:' with branch and success check [OK]
Hint: Use 'if:' with branch and success() to control deploy [OK]
Common Mistakes:
- Deploying without branch or success check
- Deploying before tests run
- Using failure() to deploy on test failure
