├── .eslintrc.json
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── feature_request.md
│ └── need_assistance.md
├── pull_request_template.md
└── workflows
│ ├── approval.yml
│ ├── katacoda.yml
│ ├── linters.yml
│ ├── md-link-check.json
│ ├── md-links.yml
│ ├── upload_lambda.yml
│ └── upload_lambda_from_comment.yml
├── .gitignore
├── .markdownlint.json
├── .spelling
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── assets
└── online-devops-dojo
│ ├── continuous-integration
│ ├── ci-blue-ocean.png
│ ├── dan.png
│ ├── paulo.png
│ ├── tina.png
│ └── user-story.png
│ ├── devops-kaizen
│ ├── adam.png
│ ├── awesome.png
│ ├── brenda.png
│ ├── charlie.png
│ ├── chun.png
│ ├── current-state.png
│ ├── dan.png
│ ├── improvementtheme.jpg
│ ├── paulo.png
│ ├── santhosh.png
│ ├── selma.png
│ ├── steps.png
│ ├── target.png
│ ├── team-chat.jpg
│ ├── tina.png
│ └── valuestreammap.png
│ ├── leading-change
│ ├── adam.png
│ ├── brenda.png
│ ├── charlie.png
│ ├── chun.png
│ ├── dan.png
│ ├── first-way.png
│ ├── paulo.png
│ ├── santhosh.png
│ ├── second-way.png
│ ├── selma.png
│ ├── team-chat.jpg
│ ├── third-way.png
│ └── tina.png
│ ├── post-incident-practices
│ ├── adam.png
│ ├── brenda.png
│ ├── charlie.png
│ ├── chun.png
│ ├── dan.png
│ ├── paulo.png
│ ├── santhosh.png
│ ├── selma.png
│ ├── team-chat.jpg
│ └── tina.png
│ ├── shift-security-left
│ ├── adam.png
│ ├── brenda.png
│ ├── chun.png
│ ├── dan.png
│ ├── hal.png
│ ├── jenkins-back-to-classic-icon.png
│ ├── mvn-tree.png
│ ├── newspaper.jpg
│ ├── owasp-report.png
│ ├── owasp-report2.png
│ ├── paulo.png
│ ├── santhosh.png
│ ├── selma.png
│ └── tina.png
│ ├── value-stream-mapping
│ ├── adam.png
│ ├── brenda.png
│ ├── charlie.png
│ ├── chun.png
│ ├── dan.png
│ ├── paulo.png
│ ├── santhosh.png
│ ├── selma.png
│ ├── team-chat.jpg
│ ├── tina.png
│ ├── valuestreammap-symbols.png
│ └── valuestreammap.png
│ ├── version-control
│ ├── adam.png
│ ├── dan.png
│ ├── paulo.png
│ ├── santhosh.png
│ └── tina.png
│ └── welcome
│ ├── adam.png
│ ├── brenda.png
│ ├── charlie.png
│ ├── chun.png
│ ├── dan.png
│ ├── hal.png
│ ├── octocat.png
│ ├── onceuponatime.jpg
│ ├── paulo.png
│ ├── petclinic.jpg
│ ├── probot.jpg
│ ├── santhosh.png
│ ├── selma.png
│ └── tina.png
├── docs
├── README.md
├── bot-setup.md
├── lambda-dojo-upload.json
└── online-devops-dojo-bot.svg
├── handler.js
├── index.js
├── online-devops-dojo-pathway.json
├── online-devops-dojo
├── continuous-integration
│ ├── assets
│ │ ├── index.html
│ │ └── prepare.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1-verify.sh
│ ├── step1.md
│ ├── step2.md
│ ├── step3-nospell.md
│ ├── step4.md
│ ├── step5.md
│ ├── step6.md
│ ├── step7.md
│ └── step8.md
├── devops-kaizen
│ ├── assets
│ │ ├── add.improvement.to.backlog.sh
│ │ ├── dialog.py
│ │ ├── dialog1.sh
│ │ ├── dialog1.yaml
│ │ ├── dialog2.sh
│ │ ├── dialog2.yaml
│ │ ├── github-issues.py
│ │ ├── github-issues.yaml
│ │ └── prereq.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step10-verify.sh
│ ├── step10.md
│ ├── step11.md
│ ├── step12-answer.md
│ ├── step12.md
│ ├── step13-answer.md
│ ├── step13.md
│ ├── step2.md
│ ├── step3-verify.sh
│ ├── step3.md
│ ├── step4-verify.sh
│ ├── step4.md
│ ├── step5-answer.md
│ ├── step5.md
│ ├── step6-answer.md
│ ├── step6.md
│ ├── step7.md
│ ├── step8-answer.md
│ ├── step8.md
│ ├── step9-verify.sh
│ └── step9.md
├── leading-change
│ ├── assets
│ │ ├── dialog.py
│ │ ├── dialog1.sh
│ │ ├── dialog1.yaml
│ │ ├── dialog2.sh
│ │ ├── dialog2.yaml
│ │ └── prereq.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step10-answer.md
│ ├── step10.md
│ ├── step11.md
│ ├── step12-answer.md
│ ├── step12.md
│ ├── step2.md
│ ├── step3.md
│ ├── step4-verify.sh
│ ├── step4.md
│ ├── step5.md
│ ├── step6-verify.sh
│ ├── step6.md
│ ├── step7-answer.md
│ ├── step7.md
│ ├── step8.md
│ ├── step9-verify.sh
│ └── step9.md
├── post-incident-practices
│ ├── assets
│ │ ├── dialog.py
│ │ ├── dialog1.sh
│ │ ├── dialog1.yaml
│ │ ├── dialog2.sh
│ │ ├── dialog2.yaml
│ │ └── prereq.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step10.md
│ ├── step11-answer.md
│ ├── step11.md
│ ├── step2.md
│ ├── step3.md
│ ├── step4-verify.sh
│ ├── step4.md
│ ├── step5-verify.sh
│ ├── step5.md
│ ├── step6-answer.md
│ ├── step6.md
│ ├── step7-verify.sh
│ ├── step7.md
│ ├── step8.md
│ ├── step9-answer.md
│ └── step9.md
├── shift-security-left
│ ├── assets
│ │ ├── index.html
│ │ ├── prepare.sh
│ │ └── reset.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step2-verify.sh
│ ├── step2.md
│ ├── step3.md
│ ├── step4.md
│ ├── step5-nospell.md
│ ├── step6-nospell.md
│ ├── step7.md
│ └── step8-nospell.md
├── value-stream-mapping
│ ├── assets
│ │ ├── dialog.py
│ │ ├── dialog1.sh
│ │ ├── dialog1.yaml
│ │ ├── dialog2.sh
│ │ ├── dialog2.yaml
│ │ └── prereq.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step10-answer.md
│ ├── step10.md
│ ├── step11-verify.sh
│ ├── step11.md
│ ├── step12-answer.md
│ ├── step12.md
│ ├── step2.md
│ ├── step3-verify.sh
│ ├── step3.md
│ ├── step4-verify.sh
│ ├── step4.md
│ ├── step5-answer.md
│ ├── step5.md
│ ├── step6-answer.md
│ ├── step6.md
│ ├── step7.md
│ ├── step8.md
│ ├── step9-answer.md
│ └── step9.md
├── version-control
│ ├── assets
│ │ └── prepare.sh
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step2-verify.sh
│ ├── step2.md
│ ├── step3-nospell.md
│ ├── step3.sh
│ ├── step4.md
│ ├── step5.md
│ ├── step5.sh
│ ├── step6.md
│ ├── step6.sh
│ ├── step7.md
│ └── step7.sh
└── welcome
│ ├── assets
│ ├── copy-pet-clinic.sh
│ ├── github-issues.py
│ ├── github-issues.yaml
│ ├── github-labels.py
│ └── github-labels.yaml
│ ├── finish.md
│ ├── index.json
│ ├── intro.md
│ ├── step1.md
│ ├── step2.md
│ ├── step3-verify.sh
│ ├── step3.md
│ └── step4.md
├── package-lock.json
├── package.json
└── serverless.yml
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true,
4 | "node": true
5 | },
6 | "extends": "eslint:recommended",
7 | "globals": {
8 | "Atomics": "readonly",
9 | "SharedArrayBuffer": "readonly"
10 | },
11 | "parserOptions": {
12 | "ecmaVersion": 2018
13 | },
14 | "rules": {
15 | "no-unused-vars": ["error", { "varsIgnorePattern": "[iI]gnored" }]
16 | }
17 | }
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Codeowners file
2 | # syntax: https://help.github.com/en/articles/about-code-owners
3 | * @dxc-technology/online-devops-dojo
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: 'bug'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Additional context**
27 | Add any other context about the problem here.
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: 'enhancement'
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/need_assistance.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Assistance request from student
3 | about: I have an issue with a module and I need assistance
4 | title: ''
5 | labels: ":couple: student issue"
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the issue**
11 | A clear and concise description of what the issue or question is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Additional context**
27 | Add any other context about the problem here.
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Proposed changes
2 |
3 | Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.
4 |
5 | ## Types of changes
6 |
7 | What types of changes does your code introduce to Online DevOps Dojo?
8 | _Put an `x` in the boxes that apply_
9 |
10 | - [ ] Bug fix (non-breaking change which fixes an issue)
11 | - [ ] New feature (non-breaking change which adds functionality)
12 | - [ ] Code style update (formatting, renaming)
13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
14 | - [ ] Workflow change
15 | - [ ] Documentation update (if none of the other choices apply)
16 |
17 | ## Checklist
18 |
19 | _Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code._
20 |
21 | - [ ] I have read the [CONTRIBUTING](https://github.com/dxc-technology/online-devops-dojo/blob/master/CONTRIBUTING.md) doc.
22 | - [ ] Lint passes locally with my changes.
23 | - [ ] I have added necessary documentation (if appropriate).
24 | - [ ] Any dependent changes have been merged and published in downstream modules
25 |
26 | ## Further comments
27 |
28 | If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...
29 |
--------------------------------------------------------------------------------
/.github/workflows/approval.yml:
--------------------------------------------------------------------------------
1 | name: Team approval workflow
2 | on: pull_request_review
3 | jobs:
4 | labelWhenApproved:
5 | runs-on: ubuntu-20.04
6 | steps:
7 | - name: Label when approved
8 | uses: pullreminders/label-when-approved-action@master
9 | env:
10 | APPROVALS: "1"
11 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
12 | ADD_LABEL: "approved"
13 |
--------------------------------------------------------------------------------
/.github/workflows/katacoda.yml:
--------------------------------------------------------------------------------
1 | name: Validate Katacoda scenarios
2 |
3 | on:
4 | push:
5 | paths: 'online-devops-dojo/**'
6 | workflow_dispatch:
7 |
8 | jobs:
9 | build:
10 | name: Validate
11 | runs-on: ubuntu-20.04
12 | steps:
13 | - id: checkout-code
14 | name: Checkout code
15 | uses: actions/checkout@v2
16 |
17 | - id: validate
18 | name: Validate Katacoda scenarios
19 | run: |
20 | npx katacoda-cli validate:all --ignore=welcome --repo ${{ github.workspace }}
21 | # Ignore welcome scenario which has no title
22 |
--------------------------------------------------------------------------------
/.github/workflows/linters.yml:
--------------------------------------------------------------------------------
1 | # GitHub workflow file
2 | name: Javascript linter
3 |
4 | on:
5 | push:
6 | # change(s) on those files trigger this pipeline
7 | paths: ['*.js']
8 |
9 | jobs:
10 | linters: # run linters in separate job to not delay critical stuff
11 | timeout-minutes: 10
12 | runs-on: ubuntu-20.04
13 |
14 | steps:
15 | - name: Copy the repository
16 | uses: actions/checkout@v2
17 |
18 | # Node 12 included in LTS ubuntu-20.04 matches the version used for AWS Lambda
19 | # (https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu2004-README.md)
20 | # hence comment the upgrade code for now
21 | # - name: Check Node 12
22 | # uses: actions/setup-node@v1.4.2
23 | # with:
24 | # node-version: 12
25 |
26 | - name: Cache node modules
27 | uses: actions/cache@v2
28 | env:
29 | cache-name: cache-node-modules
30 | with:
31 | path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
32 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
33 | restore-keys: |
34 | ${{ runner.os }}-build-${{ env.cache-name }}-
35 | ${{ runner.os }}-build-
36 | ${{ runner.os }}-
37 |
38 | # Install nodejs packages listed in package-lock.json.
39 | # - if: github.base_ref == 'master'
40 | - name: Install node modules
41 | run: npm ci --no-fund
42 |
43 | - name: Run linters
44 | uses: samuelmeuli/lint-action@v1
45 | with:
46 | github_token: ${{ secrets.github_token }}
47 | # Enable linters
48 | eslint: true
49 | prettier: false
50 |
--------------------------------------------------------------------------------
/.github/workflows/md-link-check.json:
--------------------------------------------------------------------------------
1 | {
2 | "ignorePatterns": [
3 | {"pattern": "HOST_SUBDOMAIN" },
4 | {"pattern": "jdoe1000"},
5 | {"pattern": "editor.katacoda.com"},
6 | {"pattern": "YOUR_SHORTNAME"},
7 | {"pattern": "your_katacoda_user"},
8 | {"pattern": ".spelling"},
9 | {"pattern": "/workflows/"},
10 | {"pattern": "/actions?"}
11 | ],
12 | "aliveStatusCodes": [200,206,429]
13 | }
14 |
--------------------------------------------------------------------------------
/.github/workflows/md-links.yml:
--------------------------------------------------------------------------------
1 | # GitHub workflow file
2 | name: Check links in markdown
3 |
4 | on:
5 | schedule:
6 | - cron: "1 6 */3 * *"
7 | push:
8 | paths: ['**.md', 'md-link-check.json', '.github/workflows/md-links.yml']
9 |
10 | pull_request:
11 | paths: ['**.md', 'md-link-check.json', '.github/workflows/md-links.yml']
12 |
13 | jobs:
14 | check-links:
15 | timeout-minutes: 10
16 | runs-on: ubuntu-20.04
17 |
18 | steps:
19 | - uses: actions/checkout@v2
20 | - uses: gaurav-nelson/github-action-markdown-link-check@v1
21 | with:
22 | config-file: '.github/workflows/md-link-check.json'
23 | use-quiet-mode: 'yes'
24 |
--------------------------------------------------------------------------------
/.github/workflows/upload_lambda.yml:
--------------------------------------------------------------------------------
1 | name: Deployment of Online DevOps Dojo coach lambda
2 |
3 | on:
4 | push:
5 | # change(s) on those files trigger this pipeline
6 | paths: ['*.js', 'package*.json', 'serverless.yml', '.github/workflows/upload_lambda.yml']
7 | branches: ['master']
8 |
9 | jobs:
10 | build:
11 | timeout-minutes: 10
12 | runs-on: ubuntu-20.04
13 |
14 | steps:
15 | - name: Copy the repository
16 | uses: actions/checkout@v2
17 |
18 | # Node 12 included in LTS ubuntu-20.04 matches the version used for AWS Lambda
19 | # (https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu2004-README.md)
20 | # hence comment the upgrade code for now
21 | # - name: Check Node 12
22 | # uses: actions/setup-node@v1.4.2
23 | # with:
24 | # node-version: 12
25 |
26 | # not supported yet for issue_comment event
27 | # - name: Cache node modules
28 | # uses: actions/cache@v2
29 | # env:
30 | # cache-name: cache-node-modules
31 | # with:
32 | # path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
33 | # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
34 | # restore-keys: |
35 | # ${{ runner.os }}-build-${{ env.cache-name }}-
36 | # ${{ runner.os }}-build-
37 | # ${{ runner.os }}-
38 |
39 | # Install nodejs packages listed in package-lock.json.
40 | # - if: github.base_ref == 'master'
41 | - name: Install node modules
42 | run: npm ci --only=prod --no-fund
43 |
44 | # - if: github.base_ref == 'master'
45 | # run "serverless deploy --verbose" in a docker container and run the config file serverless.yml
46 | - name: Deploy lambda
47 | uses: serverless/github-action@v2.1.0
48 | env: # all mandatory
49 | # AWS
50 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
51 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
52 | AWS_REGION: ${{ secrets.AWS_REGION }}
53 | AWS_STAGE: ${{ secrets.AWS_STAGE }}
54 | # GITHUB APP
55 | APP_ID: ${{ secrets.APP_ID }}
56 | WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }}
57 | PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
58 | with:
59 | args: deploy --verbose
60 |
--------------------------------------------------------------------------------
/.github/workflows/upload_lambda_from_comment.yml:
--------------------------------------------------------------------------------
1 | # GitHub workflow file
2 | name: Deploy on demand Online DevOps Dojo coach lambda
3 |
4 | on:
5 | issue_comment:
6 | types: [created, edited]
7 |
8 | jobs:
9 | reaction_on_comment:
10 | runs-on: ubuntu-20.04
11 | if: startsWith(github.event.comment.body, '/deploy')
12 |
13 | steps:
14 | - name: Add reaction
15 | uses: peter-evans/create-or-update-comment@v1
16 | with:
17 | token: ${{ secrets.GITHUB_TOKEN }}
18 | comment-id: ${{ github.event.comment.id }}
19 | body: '**Go!**'
20 | reaction-type: rocket
21 |
22 | deploy_on_comment:
23 | runs-on: ubuntu-20.04 # includes Node.js 12, same version as for AWS Lambda
24 | needs: reaction_on_comment
25 | timeout-minutes: 10
26 |
27 | steps:
28 | - name: "Triggered by ${{ github.actor }}"
29 | run: echo Workflow triggered by $GITHUB_ACTOR
30 |
31 | - name: Copy the repository
32 | uses: actions/checkout@v2
33 |
34 | # Node 12 included in LTS ubuntu-20.04 matches the version used for AWS Lambda
35 | # (https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu2004-README.md)
36 | # hence comment the upgrade code for now
37 | # - name: Check Node 12
38 | # uses: actions/setup-node@v1.4.2
39 | # with:
40 | # node-version: 12
41 |
42 | # not supported yet for issue_comment event
43 | # - name: Cache node modules
44 | # uses: actions/cache@v2
45 | # env:
46 | # cache-name: cache-node-modules
47 | # with:
48 | # path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
49 | # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
50 | # restore-keys: |
51 | # ${{ runner.os }}-build-${{ env.cache-name }}-
52 | # ${{ runner.os }}-build-
53 | # ${{ runner.os }}-
54 |
55 | # Install nodejs packages listed in package-lock.json.
56 | - name: Install node modules
57 | run: npm ci --only=prod --no-fund
58 |
59 | # run "serverless deploy --verbose" in a docker container and run the config file serverless.yml
60 | - name: Deploy lambda
61 | uses: serverless/github-action@v2.1.0
62 | env: # all mandatory
63 | # AWS
64 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
65 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
66 | AWS_REGION: ${{ secrets.AWS_REGION }}
67 | AWS_STAGE: ${{ secrets.AWS_STAGE }}
68 | # GITHUB APP
69 | APP_ID: ${{ secrets.APP_ID }}
70 | WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }}
71 | PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
72 | with:
73 | args: deploy --verbose
74 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 | db.sqlite3
58 |
59 | # Flask stuff:
60 | instance/
61 | .webassets-cache
62 |
63 | # Scrapy stuff:
64 | .scrapy
65 |
66 | # Sphinx documentation
67 | docs/_build/
68 |
69 | # PyBuilder
70 | target/
71 |
72 | # Jupyter Notebook
73 | .ipynb_checkpoints
74 |
75 | # pyenv
76 | .python-version
77 |
78 | # celery beat schedule file
79 | celerybeat-schedule
80 |
81 | # SageMath parsed files
82 | *.sage.py
83 |
84 | # Environments
85 | .env
86 | .venv
87 | env/
88 | venv/
89 | ENV/
90 | env.bak/
91 | venv.bak/
92 |
93 | # Spyder project settings
94 | .spyderproject
95 | .spyproject
96 |
97 | # Rope project settings
98 | .ropeproject
99 |
100 | # mkdocs documentation
101 | /site
102 |
103 | # mypy
104 | .mypy_cache/
105 |
106 | # node packages
107 | node_modules
108 |
--------------------------------------------------------------------------------
/.markdownlint.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": true,
3 | "line-length": false,
4 | "no-inline-html": {
5 | "allowed_elements": [ "svg", "path", "ins", "kbd", "pre", "a", "details", "summary", "div", "br" ]
6 | },
7 | "first-line-h1": false,
8 | "no-duplicate-header": false
9 | }
--------------------------------------------------------------------------------
/.spelling:
--------------------------------------------------------------------------------
1 | # Custom spelling dictionary for use with Node.js Markdown Spellcheck (mdspell)
2 |
3 | DevOps
4 | dojo
5 | # "de facto" not well recognized
6 | facto
7 | Kaizen
8 | LessOps
9 | NoOps
10 | Octocat
11 | repo
12 | serverless
13 | webhook
14 |
15 | e.g.
16 | i.e.
17 | # as in Mos Eisley
18 | Eisley
19 |
20 | # Proper Names from the course
21 | Chun
22 | Paulo
23 | Santhosh
24 |
25 | # Product & Vendor Names
26 | # Place them here with their proper case to help enforce consistently aligned with that product or vendor's preference.
27 | Fortnite
28 | Royale
29 | GitHub
30 | JFrog
31 | Katacoda
32 | Kubernetes
33 | Node.js
34 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 |
8 | ## [1.6.1] - 2021-08-20
9 |
10 | ### Fixed
11 |
12 | - Error running prepare.sh in version control module
13 |
14 | ## [1.6.0] - 2020-12-15
15 |
16 | ### Added
17 |
18 | - Post Incident Practices Module
19 |
20 | ## [1.5.1] - 2020-12-13
21 |
22 | ### Changed
23 |
24 | - Introduced Dojo Octocat in Welcome module
25 |
26 | ## [1.5.0] - 2020-10-21
27 |
28 | ### Changed
29 |
30 | - Bump serverless to v2.1.
31 | - Run the link checker every 3 days only.
32 |
33 | ## [1.4.1] - 2020-10-11
34 |
35 | ### Fixed
36 |
37 | - Updated estimated times for VSM and Kaizen modules
38 |
39 | ## [1.4.0] - 2020-10-09
40 |
41 | ### Changed
42 |
43 | - Add Javascript linter.
44 | - Upgrade GitHub Actions virtual environment to Ubuntu LTS 20.04.
45 | - Bump markdown link checker.
46 | - Markdown link checker ignore HTTP 429 Too Many Requests.
47 | - Trigger the markdown link checker on commit on markdown files and linter only.
48 | - Bump NPM dependencies.
49 | - Add workflow badges.
50 |
51 | ## [1.3.0] - 2020-10-05
52 |
53 | ### Added
54 |
55 | - Value Stream Mapping and DevOps Kaizen modules.
56 | - Upgrade GitHub Actions virtual environment to Ubuntu LTS 20.04.
57 |
58 | ## [1.2.1] - 2020-06-26
59 |
60 | ### Fixed
61 |
62 | - Bump Node.js dependencies.
63 | - GitHub app prefilled URL form using local team-chat.jpg.
64 |
65 | ## [1.2.0] - 2020-05-06
66 |
67 | ### Changed
68 |
69 | - Improve coach logging.
70 | - Use repository images for bot comments and notifications.
71 |
72 | ### Fixed
73 |
74 | - Dojo coach wasn't able to merge PR.
75 |
76 | ## [1.1.0] - 2020-04-08
77 |
78 | ### Added
79 |
80 | - Trigger the lambda upload from a comment.
81 | - Approval workflow.
82 |
83 | ### Changed
84 |
85 | - Use / instead of @ to invoke the coach.
86 | - Add Node.js caching step in lambda upload workflow.
87 | - Add APP_ID secret and rename AWS secrets.
88 |
89 | ### Fixed
90 |
91 | - Cleanup of previous webhooks.
92 | - Update OWASP links.
93 |
94 | ## [1.0.2] - 2020-03-27
95 |
96 | - Version control: update a few line numbers, fine tune instructions.
97 | - Add stale action.
98 |
99 | ## [1.0.1] - 2020-03-20
100 |
101 | ### Changed
102 |
103 | - Update Shift Left on Security module with updated dependencies of Pet Clinic.
104 | - Bump NPM dependencies
105 | - Replace Katacoda internal tab for Jenkins with a browser tab (workaround for Chrome sameSite cookie issue).
106 |
107 | ## [1.0.0] - 2019-07-16
108 |
109 | ### Added
110 |
111 | - Initial version
112 |
--------------------------------------------------------------------------------
/assets/online-devops-dojo/continuous-integration/ci-blue-ocean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/continuous-integration/ci-blue-ocean.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/continuous-integration/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/continuous-integration/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/continuous-integration/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/continuous-integration/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/continuous-integration/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/continuous-integration/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/continuous-integration/user-story.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/continuous-integration/user-story.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/awesome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/awesome.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/charlie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/charlie.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/current-state.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/current-state.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/improvementtheme.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/improvementtheme.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/steps.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/target.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/target.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/team-chat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/team-chat.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/devops-kaizen/valuestreammap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/devops-kaizen/valuestreammap.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/charlie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/charlie.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/first-way.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/first-way.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/second-way.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/second-way.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/team-chat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/team-chat.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/third-way.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/third-way.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/leading-change/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/leading-change/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/charlie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/charlie.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/team-chat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/team-chat.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/post-incident-practices/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/post-incident-practices/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/hal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/hal.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/jenkins-back-to-classic-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/jenkins-back-to-classic-icon.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/mvn-tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/mvn-tree.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/newspaper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/newspaper.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/owasp-report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/owasp-report.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/owasp-report2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/owasp-report2.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/shift-security-left/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/shift-security-left/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/charlie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/charlie.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/team-chat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/team-chat.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/valuestreammap-symbols.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/valuestreammap-symbols.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/value-stream-mapping/valuestreammap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/value-stream-mapping/valuestreammap.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/version-control/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/version-control/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/version-control/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/version-control/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/version-control/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/version-control/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/version-control/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/version-control/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/version-control/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/version-control/tina.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/adam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/adam.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/brenda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/brenda.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/charlie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/charlie.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/chun.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/dan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/dan.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/hal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/hal.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/octocat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/octocat.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/onceuponatime.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/onceuponatime.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/paulo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/paulo.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/petclinic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/petclinic.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/probot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/probot.jpg
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/santhosh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/santhosh.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/selma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/selma.png
--------------------------------------------------------------------------------
/assets/online-devops-dojo/welcome/tina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dxc-technology/online-devops-dojo/0038f54b46b9a39e1ed9b4d7022d5150c1ba01fa/assets/online-devops-dojo/welcome/tina.png
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Online DevOps Dojo coach 
2 |
3 | The Online DevOps Dojo coach is here to make the DevOps learning experience
4 | even more enjoyable.
5 |
6 | Actually the coach is a robot which allows you to interact with the "Charlie
7 | Veterinary Clinic" virtual team in the context of GitHub issues and pull
8 | requests.
9 |
10 | One can imagine a lot of funny exchanges which at some point will require a
11 | genuine test pipeline!
12 |
13 | 
14 |
15 | ## Setup
16 |
17 | How to [Setup](./bot-setup.md) your custom instance of the robot.
18 |
19 | ## High level architecture
20 |
21 | Our implementation uses a GitHub application with [Probot](https://probot.github.io/)
22 | and upload an AWS Lambda function using [GitHub Actions](https://github.com/features/actions)
23 | and [Serverless](https://serverless.com/).
24 |
25 | 
26 |
27 | Other architectures are of course possible without changing anything to the
28 | Probot application.
29 | For example, we have another instance running in a container
30 | in Kubernetes. The GitHub workflow is replaced by a Jenkins pipeline and
31 | Serverless by a Helm chart.
32 |
33 | ## Developing
34 |
35 | DevOps Dojo Coach is a
36 | [GitHub App](https://developer.github.com/apps/about-apps/) built with
37 | [Probot](https://probot.github.io/) framework on Node.js. Its embedded
38 | [logging](https://probot.github.io/docs/logging/) API is
39 | [bunyan](https://github.com/trentm/node-bunyan).
40 |
41 | The custom bot code is fully contained in the file index.js.
42 |
43 | The bot can be run locally with:
44 |
45 | ```sh
46 | # Install dependencies
47 | npm install
48 |
49 | # Run the bot
50 | npm start
51 | ```
52 |
53 | More knowledge on building GitHub apps
54 | [here](https://developer.github.com/apps/building-your-first-github-app/).
55 |
56 | ## Contributing
57 |
58 | If you have suggestions for how the Dojo coach could be improved, or want to
59 | report a bug, open an
60 | [issue](https://github.com/dxc-technology/online-devops-dojo/issues/new/choose)
61 | or a PR! We'd love all and any contributions.
62 |
63 | ## Roadmap
64 |
65 | We are interested in adding the following features in the future:
66 |
67 | - Replace the GitHub app / Lambda function by a GitHub action. This would remove
68 | dependencies, but will it be responsive enough?
69 | - Add a test pipeline.
70 |
--------------------------------------------------------------------------------
/handler.js:
--------------------------------------------------------------------------------
1 | // AWS lambda function handler.js
2 | // This Source Code Form is subject to the terms of the Mozilla Public
3 | // License, v. 2.0. If a copy of the MPL was not distributed with this
4 | // file, you can obtain one at http://mozilla.org/MPL/2.0/.
5 |
6 | const { serverless } = require('@probot/serverless-lambda')
7 | const appFn = require('./')
8 | module.exports.probot = serverless(appFn)
9 |
--------------------------------------------------------------------------------
/online-devops-dojo-pathway.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Online DevOps Dojo",
3 | "description": "Learning DevOps, for real. DXC Technology has long embraced the importance of DevOps. We have used multiple Katacoda scenarii to help transform our workforce at scale. We now want via the Online DevOps Dojo to contribute something to the community from whom we have learnt so much.",
4 | "courses": [
5 | {
6 | "title": "Welcome",
7 | "description": "Getting started with the Online DevOps Dojo: understanding the back story, setting up your environment.",
8 | "course_id": "welcome"
9 | },
10 | {
11 | "title": "Leading Change",
12 | "description": "Learn about the importance of Leading Change in DevOps Transformations. A large factor in the success of DevOps transformations is driven by the organization's ability to empower people to lead change at the different levels in the organization.",
13 | "course_id": "leading-change"
14 | },
15 | {
16 | "title": "Version Control",
17 | "description": "Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later.",
18 | "course_id": "version-control"
19 | },
20 | {
21 | "title": "Continuous Integration",
22 | "description": "The process of merging work from all the developers in a team into the master branch as and when required.",
23 | "course_id": "continuous-integration"
24 | },
25 | {
26 | "title": "Shift Left on Security",
27 | "description": "Security must be considered from the beginning and continuously assessed.",
28 | "course_id": "shift-security-left"
29 | },
30 | {
31 | "title": "Value Stream Mapping",
32 | "description": "Learn how Value Stream Mapping can be used to help you and your team optimize your processes for value delivery and speed.",
33 | "course_id": "value-stream-mapping"
34 | },
35 | {
36 | "title": "DevOps Kaizen",
37 | "description": "DevOps Kaizen events can be used to help you and your team continuously improve your development processes.",
38 | "course_id": "devops-kaizen"
39 | },
40 | {
41 | "title": "Post Incident Practices",
42 | "description": "Learn how to establish a Safety Culture, conduct blameless post-mortems and create a “code of conduct” to help your team manage incidents in all phases of their life cycle",
43 | "course_id": "post-incident-practices"
44 | }
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/online-devops-dojo/continuous-integration/assets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
32 | 33 | INSERT INTO pets VALUES (14, 'Jolly Jumper', '2012-09-20', 7, 5; 34 | INSERT INTO pets VALUES (15, 'Flycka', '2012-07-14', 7, 9); 35 |36 | * Do not save or commit your changes yet! 37 | 38 | **NOTE**: Yes, there is an error on the "Jolly Jumper" line - well done if you 39 | catch it! This is on purpose, so that you can see the checks which are 40 | automatically performed during continuous integration. 41 | -------------------------------------------------------------------------------- /online-devops-dojo/continuous-integration/step4.md: -------------------------------------------------------------------------------- 1 | ## Tasks 2 | 3 | * Under "**Commit changes**", enter a short description for the change. A good 4 | practices is to have the ID of the user story associated with this task in the 5 | short description like so: `Fix #1: add horse names in database`{{copy}} - for 6 | user story #1. 7 | * Choose "Create a **new branch** for this commit [...]" option and give the 8 | branch a meaningful short name such as `us-1-horse-db`{{copy}}. Note that the 9 | user story ID is used again in the branch name: this is to foster traceability 10 | and help maintain a clean history of commits to the repository. 11 | * Click "**Propose File Change**": this will trigger the creation of a pull 12 | request. 13 | * Scroll down and review the changes. You see a before and after comparison. 14 | * When you are happy with your changes click "**Create Pull Request**". 15 | -------------------------------------------------------------------------------- /online-devops-dojo/continuous-integration/step5.md: -------------------------------------------------------------------------------- 1 | ## Continuous Integration runs 2 | 3 | Go to Jenkins to see Continuous Integration happening: https://[[HOST_SUBDOMAIN]]-8080-[[KATACODA_HOST]].environments.katacoda.com/blue/organizations/jenkins/pet-clinic/activity/ 4 | 5 |  6 | 7 | This will take some time to: 8 | 9 | * Download the dependencies of the Pet Clinic application. 10 | * Build the application to generate a package. 11 | * Run unit tests. 12 | * Deploy the result to an ephemeral Docker container. 13 | 14 | ## The mechanics 15 | 16 | As the pull request is created, a series of automated actions happen in the 17 | background: 18 | 19 | * GitHub notifies Jenkins of the code change thanks to the 20 | [web hook](https://help.github.com/articles/about-webhooks/), which you can 21 | see in your repository settings at 22 | [https://github.com/[your_username]/pet-clinic/settings/hooks](https://[[HOST_SUBDOMAIN]]-9876-[[KATACODA_HOST]].environments.katacoda.com/#hooks). 23 | A web hook is used to notify other applications about events in the GitHub 24 | repository, such as a Pull Request being submitted. 25 | * Jenkins reads the content of the 26 | [`Jenkinsfile`](https://jenkins.io/doc/book/pipeline/jenkinsfile/) at the root 27 | of your repository. The Jenkinsfile is the file which has the implementation 28 | of your applications' continuous integration pipeline. 29 | * The stages and steps in the Jenkinsfile are executed on the Jenkins server. 30 | 31 | ## Tasks 32 | 33 | * Review the result of the pipeline: note the "build" step has caught the error 34 | we introduced in a previous step. 35 | * Click on the step which is in error and review the logs of the error. 36 | -------------------------------------------------------------------------------- /online-devops-dojo/continuous-integration/step6.md: -------------------------------------------------------------------------------- 1 | ## Tasks 2 | 3 | The pipeline found an error which we need to fix. We are going to add new changes (commits) in the existing pull request to fix the error. 4 | 5 | * Open GitHub pull requests in your repository: [https://github.com/[your_username]/pet-clinic/pulls](https://[[HOST_SUBDOMAIN]]-9876-[[KATACODA_HOST]].environments.katacoda.com/#pr) 6 | * Open the pull request you have in progress. 7 | * In "Files changed" tab, click on ... right to `data.sql` file, then Edit file. 8 | * Around line 51, replace the "Jolly Jumper" line with the following line: `INSERT INTO pets VALUES (14, 'Jolly Jumper', '2012-09-20', 7, 5);`{{copy}} 9 | * In the "Commit changes" summary, enter a comment such as `Fix parenthesis`{{copy}} 10 | * Commit the code, into the same branch (for example `us-1-horse-db`). 11 | 12 | At this point, the Jenkins pipeline will be triggered again. It will again 13 | compile the code, run the automated tests and give the pass/fail verdict within 14 | the pull request. 15 | 16 | * Go to Jenkins to see the continuous integration pipeline execution. 17 | -------------------------------------------------------------------------------- /online-devops-dojo/continuous-integration/step7.md: -------------------------------------------------------------------------------- 1 | At this point, because you have fixed the only open issue all the automated checks will have passed. 2 | 3 | It is now time to involve someone else for a peer review. 4 | 5 | ## Tasks 6 | 7 |  8 | 9 | * In the pull request, add a comment to ask Tina the tester to review the pull request: `/tina - can you have a look at this?`{{copy}} 10 | * After checking the changes in the "Files changed" tab, Tina will have comments, and wants you to replace "Jolly Jumper" by "Silver Blaze", around line 51. 11 | * Go ahead and implement the change by clicking the pen icon in the "Files changed" tab next to `data.sql` file, in the context of the existing - still opened - pull request. 12 | * Jenkins will again build and test the entire application with this latest change, making sure everything builds and tests are passing. Check it at: https://[[HOST_SUBDOMAIN]]-8080-[[KATACODA_HOST]].environments.katacoda.com/blue/organizations/jenkins/pet-clinic/pr 13 | * If everything is OK, the tests will pass. The pull request displays the checks done by Jenkins: everything is green! 14 | -------------------------------------------------------------------------------- /online-devops-dojo/continuous-integration/step8.md: -------------------------------------------------------------------------------- 1 | It is time to involve Tina again, as build and automated tests are passing: 2 | 3 | * Ask Tina to have another look by adding a comment in the pull request: 4 | `/tina - done.`{{copy}} 5 | * Tina will review and comment positively on the changes. 6 | * Merge the pull request by clicking the "Merge pull request" button. 7 | * Delete the branch `us-1-horse-db`. 8 | 9 | Now that you have merged the pull request, the new code is merged to the 10 | `master` branch, making it usable by the rest of the team. 11 | 12 | You can see the history of the changes at [https://github.com/[your_username]/pet-clinic/commits/master](https://[[HOST_SUBDOMAIN]]-9876-[[KATACODA_HOST]].environments.katacoda.com/#commits) 13 | 14 | * Check the pet clinic app, which has been automatically deployed by Jenkins: 15 | [pet-clinic app](https://[[HOST_SUBDOMAIN]]-9966-[[KATACODA_HOST]].environments.katacoda.com/) 16 | * Click the "Find Owners" tab, leave "last name" field blank and click "Find 17 | owner" button. 18 | * Check that you can find owners with the horses you added in the database. 19 | * Select an owner, and click "Add New Pet". 20 | * Check that you can add find "horse" and "pony" in the "Type" drop down list. 21 | * Feel free to explore more and modify the code at will, to see Continuous 22 | Integration being kicked off automatically, for every code commit. 23 | 24 | ## Conclusion 25 | 26 | You have integrated ("continuous integration") your own code with the rest of 27 | the code base. 28 | 29 | While you were fixing issues you introduced and had a discussion with Tina, none 30 | of your changes impacted the rest of the team, although they were visible for 31 | anyone in the team to review. 32 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/add.improvement.to.backlog.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This Source Code Form is subject to the terms of the Mozilla Public 3 | # License, v. 2.0. If a copy of the MPL was not distributed with this 4 | # file, You can obtain one at https://mozilla.org/MPL/2.0/. 5 | # 6 | # Globals 7 | # 8 | DEBUG=false 9 | GITHUB='github.com' 10 | GITHUBAPIURL='https://api.github.com' 11 | # Explicit header for GitHub API V3 request cf. https://developer.github.com/v3/#current-version 12 | GITHUBAPIHEADER='Accept: application/vnd.github.v3+json' 13 | 14 | COLQUESTION="\u001b[36m" 15 | COLINFO="\u001b[37m" 16 | COLLOGS="\u001b[35m" 17 | COLRESET="\u001b[m" 18 | REPO=pet-clinic 19 | ORGREPO=dxc-technology 20 | 21 | if [ "$DEBUG" = false ] ; then 22 | CURL_NODEBUG="-sS" 23 | fi 24 | 25 | # Install Python pre-req 26 | echo -e "${COLINFO}Installing dependencies...${COLRESET}" 27 | 2>/dev/null 1>/dev/null python3 -m pip install pyyaml requests 28 | 29 | # adding -s to the command line, allows to hide the PAT entered especially during demos 30 | if [ "$1" == "-s" ] ; then 31 | HIDE_PAT="-s" 32 | fi 33 | 34 | # 35 | # Ask for GitHub PAT 36 | # 37 | echo -e "${COLQUESTION}Please enter your ${GITHUB} Personal Access Token:${COLRESET}" 38 | read $HIDE_PAT TOKEN 39 | export TOKEN 40 | 41 | check_credentials() 42 | { 43 | curl $CURL_NODEBUG -H "Authorization: token $TOKEN" -H "$GITHUBAPIHEADER" -X GET ${GITHUBAPIURL} | grep "current_user_url" 44 | CREDS_NOT_OK=$? 45 | if [ $CREDS_NOT_OK -ne 0 ]; then 46 | echo -e "${COLQUESTION}Error: it seems that your credentials are invalid. Please use your GitHub user account and a Personal Access Token with 'repo' and 'admin:repo_hook' scopes at https://github.com/settings/tokens/new ${COLRESET}" 47 | exit -1 48 | fi 49 | } 50 | check_credentials 51 | 52 | echo -e "${COLLOGS}Fetching your details from GitHub...${COLRESET}" 53 | USER_JSON=$(curl ${CURL_NODEBUG} -H "Authorization: token ${TOKEN}" -H "$GITHUBAPIHEADER" -X GET ${GITHUBAPIURL}/user) 54 | 55 | SHORTNAME=$(echo $USER_JSON | jq -r '.login') 56 | export SHORTNAME 57 | 58 | # Provision user stories in GitHub 59 | python3 ./github-issues.py github-issues.yaml 60 | 61 | echo -e "${COLINFO}Improvement theme added to the backlog: https://${GITHUB}/${SHORTNAME}/pet-clinic/issues${COLRESET}" 62 | 63 | touch /tmp/userstoriesadded.txt 64 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/dialog1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # clear the screen 4 | clear 5 | 6 | # 7 | # Globals 8 | # 9 | COLINFO="\u001b[37m" 10 | COLRESET="\u001b[m" 11 | 12 | echo -e "${COLINFO}Installing dependencies...${COLRESET}" 13 | 14 | # Install python pre-reqs 15 | 2>/dev/null 1>/dev/null python3 -m pip install pyyaml 16 | 17 | #play the dialog 18 | TERM=xterm-256color python3 dialog.py dialog1.yaml 19 | 20 | clear 21 | echo "Click on 'CONTINUE'." 22 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/dialog1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | speaking: Brenda 3 | text: > 4 | When I worked in the Robotic Pets Assembly Plant we ran improvement events, you may recall I mentioned the similarities of those events to the VSM exercise we conducted. 5 | --- 6 | speaking: Santhosh 7 | text: > 8 | We do, indeed some of your contributions based on that experience greatly helped with the VSM. 9 | --- 10 | speaking: Brenda 11 | text: > 12 | Cheers, so I presume to host the DevOps Kaizen events we need to organize something similar to those meetings, set aside a few days for the Kaizen planning, document the outcomes, assemble a team with a view to identifying and scheduling the improvements we want to make to our process? 13 | --- 14 | speaking: Paulo 15 | text: > 16 | In principle yes, but I want to embed Kaizen into the fabric of our processes or day to day operations if you will. 17 | --- 18 | speaking: Selma 19 | text: > 20 | Sounds like you have a plan, care to share? 21 | --- 22 | speaking: Paulo 23 | text: > 24 | Of course, the VSM confirmed what most of us already knew. Our process is flawed and it needs to be improved, agree? 25 | --- 26 | speaking: Selma 27 | text: > 28 | Yes. 29 | --- 30 | speaking: Paulo 31 | text: > 32 | We have already started that change with the introduction of Agile. Kudos to Santhosh and team for those efforts. Dan has been suggesting we move towards DevOps, and that too is underway with Chun supporting as the DevOps coach. 33 | --- 34 | speaking: Paulo 35 | text: > 36 | I want to incorporate Kaizen Events into those initiatives. 37 | --- 38 | speaking: Adam 39 | text: > 40 | I like where this is going. What do you see as the main advantage to this approach? 41 | --- 42 | speaking: Paulo 43 | text: > 44 | I will let Chun answer that question. 45 | --- 46 | speaking: Chun 47 | text: > 48 | In a sentence it would be that continuous improvement would become part of our daily work, that it becomes second nature to us in all stages of our development cycle including architecture, planning, development, testing, security, deployment and operability. 49 | --- 50 | speaking: Tina 51 | text: > 52 | Count me in. 53 | --- 54 | speaking: Dan 55 | text: > 56 | Me too. 57 | --- 58 | speaking: Brenda 59 | text: > 60 | Putting my business hat on, I have to ask my two favorite questions of the team. When can we start? And when will we start to see the improvements? 61 | --- 62 | speaking: Paulo 63 | text: > 64 | No time like the present. 65 | --- 66 | speaking: Santhosh 67 | text: > 68 | Great but before we proceed, let's ask some questions to [student]. 69 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/dialog2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # clear the screen 4 | clear 5 | 6 | #play the dialog 7 | TERM=xterm-256color python3 dialog.py dialog2.yaml 8 | 9 | clear 10 | echo "Click on 'CONTINUE'." 11 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/dialog2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | speaking: Santhosh 3 | text: > 4 | Welcome to our first DevOps Kaizen event. 5 | --- 6 | speaking: Dan 7 | text: > 8 | Thanks Santhosh, how are we to approach this session? 9 | --- 10 | speaking: Santhosh 11 | text: > 12 | We know Improvements are needed, and that we can't change everything at the same time so we need to identify some focus areas based on the VSM. 13 | --- 14 | speaking: Selma 15 | text: > 16 | I have been proposing a Shift Left on Security for some time, can that be one? 17 | --- 18 | speaking: Tina 19 | text: > 20 | Dan and I have been discussing increasing the use of test automation, can we look at that? 21 | --- 22 | speaking: Adam 23 | text: > 24 | Tina and Selma, I think both of those are needed and what's more I think they would fit nicely with some ideas I have around Source Code Management, Continuous Integration and Continuous Deployment. 25 | --- 26 | speaking: Chun 27 | text: > 28 | Guys, guys, great ideas but we can't boil the ocean. Can we look at these suggestions, prioritize them based on expected value and time to implement with a view to incorporating them in to an Improvement Theme? 29 | --- 30 | speaking: Dan 31 | text: > 32 | I think so, especially as they are all inter-related, as Adam pointed out. They all will help facilitate flow and eliminate waste in our development process. 33 | --- 34 | speaking: Chun 35 | text: > 36 | Exactly! Automated testing, automated security scans, version control, and CI/CD will allow problems to be identified earlier and feedback amplified as per the three ways of DevOps. 37 | --- 38 | speaking: Paulo 39 | text: > 40 | Agree, but think we also need to be mindful of the metrics we collected during the VSM exercise which were lead time, processing time, and %C/A when prioritizing the next steps for the Improvement Theme. 41 | --- 42 | speaking: Santhosh 43 | text: > 44 | I agree, being able to track progress against key metrics will help us quantify the progress we make and prioritize items for inclusion in the themes. 45 | --- 46 | speaking: Tina 47 | text: > 48 | We may need more than one Improvement Theme given the breadth and scale of the issues we are trying to address. 49 | --- 50 | speaking: Paulo 51 | text: > 52 | That is fine, after all the resulting work will eventually be tracked in our Agile tool under the DevOps Kaizen epic we created. That will give us the holistic view of the improvements underway. 53 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/github-issues.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # Python helper to create GitHub issues, except if they already exist 3 | 4 | # This Source Code Form is subject to the terms of the Mozilla Public 5 | # License, v. 2.0. If a copy of the MPL was not distributed with this 6 | # file, You can obtain one at https://mozilla.org/MPL/2.0/. 7 | 8 | import os, sys, json, requests, yaml 9 | 10 | # Color constants 11 | # Reference: https://gist.github.com/chrisopedia/8754917 12 | COLINFO="\033[0;35m" 13 | COLRESET="\033[m" 14 | 15 | baseurl = 'https://api.github.com' 16 | headers = {"Content-Type": "application/json", "Accept": "application/vnd.github.v3+json"} 17 | user = os.environ['SHORTNAME'] 18 | token = os.environ['TOKEN'] 19 | repo = user + '/pet-clinic' 20 | 21 | if len(sys.argv) != 2: 22 | print(" Usage: " + sys.argv[0] + " github-issues.yaml") 23 | sys.exit(0) 24 | 25 | def main(): 26 | print(COLINFO + "Create user stories as GitHub issues..." + COLRESET) 27 | 28 | # Command line argument: issues as yaml file 29 | issues_file = sys.argv[1] 30 | 31 | # read the issues 32 | try: 33 | issues = yaml.load_all(open(issues_file, 'r'), Loader=yaml.FullLoader) 34 | except yaml.YAMLError as exc: 35 | print(COLINFO + exc + COLRESET) 36 | 37 | # Create the issues 38 | for issue in issues: 39 | # Avoid creating an issue which is already there (same title) 40 | issue_already_exists = False 41 | # List all open issues 42 | payload = json.dumps({ 43 | "state" : "open" 44 | }) 45 | sys.stdout.write(COLINFO + "." + COLRESET) 46 | sys.stdout.flush() 47 | response = requests.get(baseurl + "/repos/" + repo + "/issues", 48 | data=payload, 49 | headers=headers, 50 | auth=(user, token)) 51 | if response.status_code == 200: 52 | issues_opened = json.loads(response.text) 53 | for issue_found in issues_opened: 54 | if (issue_found['title'] == issue['title']): 55 | # This issue has the same title has the one we want to create. Skipping. 56 | issue_already_exists = True 57 | 58 | if (not issue_already_exists): 59 | payload = json.dumps({ 60 | "title" : issue['title'], 61 | "body": issue['body'], 62 | "labels" : issue['labels'] 63 | }) 64 | response = requests.post(baseurl + "/repos/" + repo + "/issues", 65 | data=payload, 66 | headers=headers, 67 | auth=(user, token)) 68 | if response.status_code != 201: 69 | # An error occured 70 | print(COLINFO + "Error adding issue " + issue['title'] + ": " + str(response.status_code) + " " + response.text + COLRESET) 71 | else: 72 | sys.stdout.write(COLINFO + "." + COLRESET) 73 | sys.stdout.flush() 74 | print(COLRESET) 75 | 76 | main() 77 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/github-issues.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | title: Implement Continuous Testing 3 | body: > 4 | From **Tina**: 5 |  6 | 7 | # DevOps Kaizen Improvement Theme 8 | 9 | ### **:green_book: Now / Current State** 10 | 11 | Testing is mostly manual, mainly performed after the development is completed, feedback on issues is too late in the process which in turn is leading to rework and delays 12 | 13 | ### **:star: Definition of awesome** 14 | 15 | Any code committed to our source code management system would be continuously integrated via a Jenkins pipeline. 16 | 17 | The pipeline would execute of a comprehensive set of automated tests (continuous testing) against the code, these tests would include unit tests that cover 70 to 80% of the code and automated acceptance tests of key functional areas. 18 | 19 | ### **:dart: Next target condition** 20 | 21 | Introduce Unit Testing and execute the unit tests from a CI pipeline. 22 | 23 | ### **:feet: First steps** 24 | 25 | Create the Pipeline, have it invoked when code is committed and execute some unit tests from the pipeline 26 | labels: [":sparkles: epic", "P3", "13"] 27 | --- 28 | title: Add functional testing stage in CI/CD pipeline 29 | body: "As part of improvement theme #[previous_issue]:\r\r **As a** tester,\r**I want** automated functional tests to be executed as part of the CI/CD pipeline for each and every code commit,\r**so that** we can get feedback on issues early in the process and avoid rework and delays." 30 | labels: [":bulb: user_story", "P1", "3"] 31 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/assets/prereq.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This Source Code Form is subject to the terms of the Mozilla Public 3 | # License, v. 2.0. If a copy of the MPL was not distributed with this 4 | # file, You can obtain one at https://mozilla.org/MPL/2.0/. 5 | 6 | COLQUESTION="\u001b[36m" 7 | COLRESET="\u001b[m" 8 | COLINFO="\u001b[37m" 9 | 10 | echo -e "${COLINFO}Installing dependencies...${COLRESET}" 11 | 2>/dev/null 1>/dev/null python3 -m pip install pyyaml 12 | 13 | # if learner doesn't enter name, default will be set in dialog.py 14 | echo "Please enter your first name:" 15 | read FIRSTNAME 16 | 17 | echo $FIRSTNAME > /tmp/firstname.txt 18 | 19 | echo -e "${COLINFO}You are all set! Click on 'CONTINUE'.${COLRESET}" 20 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/finish.md: -------------------------------------------------------------------------------- 1 | # Conclusion 2 | 3 | Congratulations, you have completed the DevOps Kaizen module of the **Online DevOps Dojo**! 4 | 5 | Before moving on to the next module in this course or going back to work please take a few minutes to consider how you and your team could apply DevOps Kaizen. 6 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/intro.md: -------------------------------------------------------------------------------- 1 | ## Welcome! 2 | 3 | Welcome to the **Online DevOps Dojo** lab on DevOps Kaizen. 4 | If you have not completed the Welcome module you must do so before continuing 5 | with this module. 6 | 7 | ## Purpose 8 | 9 | The primary objective of the "DevOps Kaizen" module is to help you to understand the principles and benefits of DevOps Kaizen. This is to enable you and your team to use DevOps Kaizen (Continuous Improvement) as both a framework and as a repeatable process to help empower your team. You will learn how DevOps Kaizen can be used to identify and fix issues with, and to continuously improve your Value Streams. 10 | 11 | The secondary objective is to give you an opportunity to participate in a DevOps Kaizen real world scenario using Katacoda in **your** Sandbox environment. 12 | 13 | Remember the Sandbox is your personal clone of the Pet Clinic Repository. The Sandbox is the one which you created in the Welcome module. You are free to experiment in your Sandbox without fear of impacting the lab or other learners. 14 | 15 | By the end of the lesson and lab, you will be able to 16 | 17 | Explain what a DevOps Kaizen is. 18 | 19 | * Describe the need for and business benefits of DevOps Kaizen 20 | * Understand the process of conducting a DevOps Kaizen event 21 | * who should participate 22 | * how to identify focus areas to improve from the Value Stream Map (VSM) 23 | * set measurable objectives 24 | * define the Kaizen increment (short period 2 to 3 weeks) 25 | * specify what success looks like so progress can be tracked against objectives 26 | * reassess improvements and objectives at the end of each increment 27 | * update target conditions based upon progress and learnings from the Kaizen event 28 | * Leverage DevOps/Lean toolbox of tools, technologies, practices and methodologies in a Kaizen increment. 29 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/step1.md: -------------------------------------------------------------------------------- 1 | While the DevOps Kaizen module can be taken independently, it follows directly 2 | on from the Value Stream Mapping module. 3 | 4 | Hopefully you have followed our advice and taken the Value Stream Mapping (VSM) 5 | module of the **Online DevOps Dojo** and are thus helping us in the serious 6 | business of protecting the space time continuum. 7 | 8 | This is the VSM which the Pet Clinic team created to represent the E2E flow of 9 | their development process: 10 | 11 |  12 | 13 | The team have gotten sponsorship from management to improve, and are now 14 | wondering how to leverage the VSM as the starting point. 15 | 16 | | | | 17 | |---|---| 18 | ||**Chun** DevOps coach for the DevOps Kaizen events | 19 | ||**Paulo** Product Owner who is sponsoring the DevOps Kaizen events | 20 | ||**Santhosh** Scrum Master who is facilitating the DevOps Kaizen events | 21 | ||**Brenda** Business representative in the DevOps Kaizen events | 22 | ||**Selma** Security representative in the DevOps Kaizen events | 23 | ||**Adam** IT Admin representative in the DevOps Kaizen events | 24 | ||**Dan** Developer representative in the DevOps Kaizen events | 25 | ||**Tina** Test representative in the DevOps Kaizen events | 26 | -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/step10-verify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ -f /tmp/userstoriesadded.txt ] && echo "done" -------------------------------------------------------------------------------- /online-devops-dojo/devops-kaizen/step10.md: -------------------------------------------------------------------------------- 1 | 2 | The output of the DevOps Kaizen events are the Improvement Themes. 3 | 4 |  5 | 6 | Tina and the team came up with the following testing improvement theme: 7 | 8 | ## **Title**: Continuous Testing 9 | 10 | |  **Now/Problem** |  **Next Target Condition** | 11 | |---|---| 12 | | Testing is mostly manual, mainly performed after the development is completed, feedback on issues is too late in the process which in turn is leading to rework and delays | Introduce functional tests with Selenium and execute the tests from our CI pipeline | 13 | |  **Definition of Awesome** |  **First Steps** | 14 | | Any code committed to our source code management system would be continuously integrated via a Jenkins pipeline.
12 | <plugin> 13 | <groupId>org.owasp</groupId> 14 | <artifactId>dependency-check-maven</artifactId> 15 | <version>6.2.2</version> 16 | <configuration> 17 | <format>ALL</format> 18 | <failBuildOnCVSS>7</failBuildOnCVSS> 19 | <cveValidForHours>168</cveValidForHours> 20 | </configuration> 21 | <executions> 22 | <execution> 23 | <goals> 24 | <goal>check</goal> 25 | </goals> 26 | </execution> 27 | </executions> 28 | </plugin> 29 |30 | 31 | * 💡 Note that we fail the build if CVSS is >= 7. It all depends of the context 32 | of your project and where you want to put the bar. More information on CVSS at 33 | [https://www.first.org/cvss/v3.1/user-guide](https://www.first.org/cvss/v3.1/user-guide). 34 | * Create a pull request by committing the changes in a new branch which you will 35 | name: `deps-check`{{copy}} 36 | * The build will trigger automatically. 37 | * Navigate to Jenkins to see the results of the build. 38 | * Be patient. The build will succeed: at this time, we are missing the step in the pipeline 39 | (Jenkinsfile) to actually check for dependencies. The plugin is in the 40 | `pom.xml` file but is not used yet. 41 | -------------------------------------------------------------------------------- /online-devops-dojo/shift-security-left/step6-nospell.md: -------------------------------------------------------------------------------- 1 |  2 | 3 | > Now, we need to update the `Jenkinsfile` which describes our Continuous Integration pipeline to add the dependency vulnerability scanner. Initially, I don't want to fail the build because of vulnerabilities in our dependencies. We want to stop the leak and be informed instead. I will mark the build as "unstable" if we have a vulnerability. 4 | > Also, I am gathering a report for the vulnerabilities so that we can analyze it. 5 | 6 | ## Steps 7 | 8 | * Navigate to your copy of the Pet Clinic application to find 9 | [`Jenkinsfile`](https://[[HOST_SUBDOMAIN]]-9876-[[KATACODA_HOST]].environments.katacoda.com/#jenkinsfile), 10 | in the same `deps-check` branch from the pull request. 11 | * Click on the pencil icon in the top right corner to edit the file. 12 | * Add the following stage just above Build stage: 13 |
14 | 15 | stage('Dependency check') { 16 | steps { 17 | sh "mvn --batch-mode dependency-check:check" 18 | } 19 | post { 20 | always { 21 | publishHTML(target:[ 22 | allowMissing: true, 23 | alwaysLinkToLastBuild: true, 24 | keepAll: true, 25 | reportDir: 'target', 26 | reportFiles: 'dependency-check-report.html', 27 | reportName: "OWASP Dependency Check Report" 28 | ]) 29 | } 30 | } 31 | } 32 | 33 |34 | * Commit in `deps-check` branch. 35 | * The pipeline will trigger automatically. 36 | * Navigate to Jenkins 37 | to see the results. The pipeline will be marked "failed": read the logs of the stage 38 | "Dependency check", then click on Artifacts tab on the top right to see the OWASP report. 39 | 40 |  41 |
23 | // Scan will run everyday on master 24 | triggers { cron( (BRANCH_NAME == "master") ? "@daily" : "" ) } 25 |26 | 27 | * Commit the change in this `deps-check` branch, in the context of the pull request. 28 | * The build will trigger automatically. 29 | * Navigate to Jenkins to see the results of the build. 30 | * The build should still succeed. In addition, it is also now scheduled for daily execution and on master branch only: such schedule would not make sense on development branches which could be many. 31 | * Everything looks good: merge the pull request. 32 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/assets/dialog1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # clear the screen 4 | clear 5 | 6 | #play the dialog 7 | TERM=xterm-256color python3 dialog.py dialog1.yaml 8 | 9 | echo "Click on 'CONTINUE'." 10 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/assets/dialog1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | speaking: Brenda 3 | text: > 4 | VSM sounds interesting what exactly is it? 5 | --- 6 | speaking: Chun 7 | text: > 8 | A Value Stream describes the process used to create and deliver goods, services, solutions and in our case, software. While a Value Stream Map is a pictorial representation of a value stream. 9 | --- 10 | speaking: Santhosh 11 | text: > 12 | A VSM will enable us to see the end to end flow of software from idea to delivery including branches, feedback loops and queues in our process. 13 | --- 14 | speaking: Dan 15 | text: > 16 | We already understand our process why do we need to draw it? We already work as fast as we can, this just seems to be a distraction from writing code. 17 | --- 18 | speaking: Paulo 19 | text: > 20 | I agree we all understand the general process as it applies to our functional areas and our interactions with our direct upstream and downstream activities but I think we don't have a shared understanding of the complete end to end flow. 21 | --- 22 | speaking: Paulo 23 | text: > 24 | The understanding I am referring to would include the nature of handoffs between functions, the lead times, the activity times and the quality of work reaching each of us. I think that lack of understanding is contributing to the problems we have been experiencing. 25 | --- 26 | speaking: Santhosh 27 | text: > 28 | Maybe another way to look at this is to agree what contributes to the time it takes for a feature to be delivered? 29 | --- 30 | speaking: Chun 31 | text: > 32 | Exactly, basically for a work item the Total Duration = Processing Time (Actual Time spent working ) + Waste Time (Handoffs etc.) 33 | --- 34 | speaking: Chun 35 | text: > 36 | A VSM is a pictorial representation, using a standard set of symbols, of an end to end process including lead and activity times for all steps in the process. 37 | --- 38 | speaking: Dan 39 | text: > 40 | OK I think I am starting to understand where you are going with this, what do we do with the VSM once we create it? 41 | --- 42 | speaking: Paulo 43 | text: > 44 | We use it to identify and eliminate waste, waste is any non value add activities in the value stream including handoffs, rework, manual activities, wait times etc. 45 | --- 46 | speaking: Brenda 47 | text: > 48 | We need to do that yesterday, how do we begin? 49 | --- 50 | speaking: Brenda 51 | text: > 52 | First, let's ask some questions to [student]. 53 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/assets/dialog2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # clear the screen 4 | clear 5 | 6 | #play the dialog 7 | TERM=xterm-256color python3 dialog.py dialog2.yaml 8 | 9 | echo "Click on 'CONTINUE'." 10 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/assets/dialog2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | speaking: Tina 3 | text: > 4 | OK we now have the Value Stream mapped, what do we do next? 5 | --- 6 | speaking: Chun 7 | text: > 8 | We need to look at what the VSM is telling us and determine where we need to focus our efforts. 9 | --- 10 | speaking: Selma 11 | text: > 12 | How do we do that? 13 | --- 14 | speaking: Chun 15 | text: > 16 | We need to look for and eliminate non value add activities in the current state VSM. For example: 17 | --- 18 | speaking: Chun 19 | text: > 20 | - How do we significantly increase the percent complete and accurate (%C/A) for each activity? 21 | --- 22 | speaking: Chun 23 | text: > 24 | - How can we improve the processing time (PT) for each activity? 25 | --- 26 | speaking: Chun 27 | text: > 28 | - How do we reduce, or even eliminate the non-productive time in the lead time (LT) for each activity? 29 | --- 30 | speaking: Paulo 31 | text: > 32 | Additional questions to be considered include - 33 | --- 34 | speaking: Paulo 35 | text: > 36 | - What are the boundaries between the activities and why do they exist? 37 | --- 38 | speaking: Paulo 39 | text: > 40 | - What contributes to the LT for each activity including handoffs, queues, and organizational rules & procedures? 41 | --- 42 | speaking: Paulo 43 | text: > 44 | - Who performs each activity, including their roles? 45 | --- 46 | speaking: Paulo 47 | text: > 48 | - What tools are used by people performing each activity? 49 | --- 50 | speaking: Paulo 51 | text: > 52 | - Are there opportunities for automation and/or integration to help improve efficiency of the activities? 53 | --- 54 | speaking: Paulo 55 | text: > 56 | Chun anything you would like to add to that list? 57 | --- 58 | speaking: Chun 59 | text: > 60 | Just a couple. 61 | --- 62 | speaking: Chun 63 | text: > 64 | How can we shift activities left to provide faster feedback? 65 | --- 66 | speaking: Chun 67 | text: > 68 | What other DevOps principles, practices or tools could be applied to improve the end-to-end LT? 69 | --- 70 | speaking: Adam 71 | text: > 72 | Better put on some more coffee and order more pizza, because I for one am keen to start looking for improvements. 73 | --- 74 | speaking: Santhosh 75 | text: > 76 | Consider it done. A word of caution for us as a team, we need to be aware that the debate that leads to answers to those questions can result in a new desired state VSM. 77 | --- 78 | speaking: Chun 79 | text: > 80 | The desired state VSM may have more challenging targets for each of the three key metrics - %C/A, LT, and PT per activity. These targets may need to be implemented over a couple of sprints. 81 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/assets/prereq.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This Source Code Form is subject to the terms of the Mozilla Public 3 | # License, v. 2.0. If a copy of the MPL was not distributed with this 4 | # file, You can obtain one at https://mozilla.org/MPL/2.0/. 5 | 6 | COLQUESTION="\u001b[36m" 7 | COLRESET="\u001b[m" 8 | COLINFO="\u001b[37m" 9 | 10 | echo -e "${COLINFO}Installing dependencies...${COLRESET}" 11 | 2>/dev/null 1>/dev/null python3 -m pip install pyyaml 12 | 13 | # if learner doesn't enter name, default will be set in dialog.py 14 | echo "Please enter your first name:" 15 | read FIRSTNAME 16 | 17 | echo $FIRSTNAME > /tmp/firstname.txt 18 | 19 | echo -e "${COLINFO}You are all set! Click on 'CONTINUE'.${COLRESET}" -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/finish.md: -------------------------------------------------------------------------------- 1 | # Conclusion 2 | 3 | Congratulations, you have completed the Value Stream Mapping module of the **Online DevOps Dojo**! 4 | 5 | Before moving on to the next module in this course or going back to work please take a few minutes to consider how you and your team could apply Value Stream Mapping. 6 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/intro.md: -------------------------------------------------------------------------------- 1 | ## Welcome! 2 | 3 | Welcome to the **Online DevOps Dojo** lab on Value Stream Mapping (VSM). 4 | 5 | ## Purpose 6 | 7 | The primary objective of the "Value Stream Mapping" (VSM) module is to help you to understand the principles and benefits of VSM. This is to enable you and your team to use VSM to better understand your current processes to identify and fix issues with those processes. 8 | 9 | The secondary objective is to give you an opportunity to complete a VSM real world scenario using Katacoda in **your** Sandbox environment. 10 | 11 | Remember the Sandbox is your personal clone of the Pet Clinic Repository. The Sandbox is the one which you created in the Welcome module. You are free to experiment in your Sandbox without fear of impacting the lab or other learners. 12 | 13 | By the end of the lesson and lab, you will be able to: 14 | 15 | * Explain what a Value Stream is. 16 | * Articulate what VSM is. 17 | * Describe the need for and business benefits of VSM. 18 | * Identify and select the initial Value Streams to address. 19 | * Understand the process of conducting a VSM exercise. 20 | * what to include 21 | * what to exclude 22 | * who needs to participate 23 | * what are the outputs 24 | * Use the VSM to help identify improvements that can deliver the greatest business value. 25 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step1.md: -------------------------------------------------------------------------------- 1 | Pet Clinic's merry bunch of people are now well underway on their DevOps 2 | journey. They have defined Improvement Themes and are running regular DevOps 3 | Kaizen events to address the delta between an ever improving current state and 4 | the desired state also known as the definition of awesome. 5 | 6 | They are from the disciplined application of the 3 ways of DevOps seeing 7 | incremental but manifest improvements to their processes. This hasn't gone 8 | unnoticed by the key stakeholders in the business, who are referring other 9 | groups in the organization to the team to help them understand how this change 10 | was carried out. 11 | 12 | **Brenda** still demands more from the team in terms of functionality delivered 13 | and quality of output. **Paulo** is still pressuring the team to commit to 14 | delivering more story points in a sprint. 15 | 16 | The difference now is that requests of that nature are not causing the panic of 17 | old. Now stakeholder requests are being analyzed, incorporated into the 18 | Improvement Themes and addressed via the DevOps Kaizen Events initiated 19 | following the VSM exercise the team performed. 20 | 21 | | | | 22 | |---|---| 23 | ||**Chun** DevOps coach who facilitated the VSM Exercise | 24 | ||**Paulo** Product Owner who led the VSM Exercise | 25 | ||**Santhosh** Scrum Master who co-facilitated the VSM exercise | 26 | ||**Brenda** Business representative in the VSM exercise | 27 | ||**Selma** Security representative in the VSM exercise | 28 | ||**Adam** IT Admin representative in the VSM exercise | 29 | ||**Dan** Developer representative in the VSM exercise | 30 | ||**Tina** Test representative in the VSM exercise | 31 | 32 | But it wasn't always that way ... 33 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step10-answer.md: -------------------------------------------------------------------------------- 1 | The correct answer is **Showcase and UAT** 2 | 3 | The step with the worst %C/A is **Showcase and UAT** as it has a %C/A of 50% 4 | 5 | As a reminder here is the VSM the Pet Clinic team agreed represented their E2E software development process 6 | 7 |  8 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step10.md: -------------------------------------------------------------------------------- 1 | **Learner** 2 | 3 | Here is the VSM which the Pet Clinic team have agreed represented their E2E software development process 4 | 5 |  6 | 7 | >> What activity in the VSM has worst %C/A? << 8 | ( ) Change Approval 9 | (*) Showcase and UAT 10 | ( ) Design and Analysis 11 | ( ) Development & dev testing (including test automation) 12 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step11-verify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ -f /tmp/dialog2played.txt ] && echo "done" -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step11.md: -------------------------------------------------------------------------------- 1 | The team now have their Value Stream Mapped, and now need to agree the way forward. 2 | 3 |  4 | 5 | Click: `./dialog2.sh`{{execute}} 6 | 7 | And follow the dialog in the terminal window... 8 | 9 | **Note**: Don't expect a one to one mapping between activities in the current 10 | state and the desired end state Value Stream Maps. In some cases the results of 11 | the VSM exercise may be that the team that given the scale of the issues with 12 | the current state may end up creating an completely new desired state process. 13 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step12-answer.md: -------------------------------------------------------------------------------- 1 | The correct answer is **Release Planning & Estimation** 2 | 3 | The step with the worst activity ratio is **Release Planning & Estimation** as it has an activity ratio of 1 hour/3 weeks so of less than 0.01% 4 | 5 | As a reminder here is the VSM the Pet Clinic team agreed represented their E2E software development process 6 | 7 |  8 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step12.md: -------------------------------------------------------------------------------- 1 | **Learner** 2 | 3 | Here is the VSM the Pet Clinic team agreed represented their E2E software development process 4 | 5 |  6 | 7 | >> The Overall Activity Ratio for the VSM is 14.5% which step has the worst activity ratio? << 8 | (*) Release Planning & Estimation 9 | ( ) Design Approval 10 | ( ) Design and Analysis 11 | ( ) Showcase and UAT -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step2.md: -------------------------------------------------------------------------------- 1 | Come with us on a journey, let us rewind and take to trip back in time to the Pet Clinic offices of a year ago. The reason for this trip is to better understand where the team were and how they used VSM with the support of their management to understand and change their end to end process. 2 | 3 | Fade In .. 4 | 5 | We open in an incident room strewn with coke cans, pizza boxes and stale air. 6 | 7 | The team, tired and tense, are following a long couple of days spent addressing issues following an upgrade to a key system holding a post-mortem into the issues with the upgrade. The question at hand is why another major upgrade to the system was delivered late, prone to errors and suffered periodic performance issues. 8 | 9 | **Brenda** is not happy, she is explaining to the team that this is not the first event of this nature and the impact to the business. She also outlines the effects issues of this nature are having on her and the teams credibility. 10 | 11 | It is a not a pleasant meeting, developers are blaming testers, testers are blaming developers, project managers are pointing to infrastructure issues, admins are pointing to planning issues. The only thing everyone seems to agree to is that someone else is more to blame than they are for the issues encountered. 12 | 13 | **Paulo** the product owner, who is relatively new to the company proposes VSM as an approach that could be used to help identify the root causes of the issues and provide a basis to start improving from. Paulo informs the team VSM was used extensively to great effect in his previous company. The team, eager to explore a potential solution to the challenges faced, are curious (if slightly skeptical) that a solution can be found. 14 | 15 | Paulo engages **Chun** the DevOps coach to host a session to outline VSM to the team. 16 | 17 | Chun explains that an IT Value stream is the process including all steps a team follows to get changes and feature implementations into production thus delivering business value. VSM is the process of aligning the entire team around an agreed understanding of the steps, processes, timings and constraints in a Value Stream, thus helping the team to identify, agree and prioritize improvement steps. 18 | 19 | VSM focuses the DevOps work on improvements which achieve the largest business value, thus helping organizations create blueprints in support of Lean transformations. 20 | 21 | This is **Value Stream Mapping**. 22 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step3-verify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ -f /tmp/firstname.txt ] && echo "done" -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step3.md: -------------------------------------------------------------------------------- 1 | The team have decided to explore the use of VSM as a tool to understand and hopefully understand their processes. 2 | 3 | The remainder of this lab is a series of conversational snippets taken from that exercise the Pet Clinic team conducted. 4 | 5 | First before you continue, let's get your name: click `./prereq.sh`{{execute}} -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step4-verify.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [ -f /tmp/dialog1played.txt ] && echo "done" -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step4.md: -------------------------------------------------------------------------------- 1 | 2 |  3 | 4 | Click: `./dialog1.sh`{{execute}} 5 | 6 | And follow the dialog in the terminal window... 7 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step5-answer.md: -------------------------------------------------------------------------------- 1 | The correct answer is **Both** 2 | 3 | The time it takes for a feature to be delivered includes both the actual time someone works on it and the time the feature spends waiting for someone to work on it. -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step5.md: -------------------------------------------------------------------------------- 1 | >> What do you think contributes to the time it takes for a feature to be delivered? << 2 | ( ) The actual time someone works on it 3 | ( ) The time work waits 4 | (*) Both -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step6-answer.md: -------------------------------------------------------------------------------- 1 | The correct answer is **All of the above** 2 | 3 | Handoffs, Incomplete/Incorrect Processing & Queues are all reasons that work spends time waiting. -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step6.md: -------------------------------------------------------------------------------- 1 | >> Why do you think work spends time waiting? << 2 | ( ) Handoffs 3 | ( ) Incomplete/Incorrect processing 4 | ( ) Queues 5 | (*) All of the above 6 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step7.md: -------------------------------------------------------------------------------- 1 | With the support of management, the team have scheduled a two day session to create the VSM. 2 | 3 | Representatives from all stakeholders in the value stream, i.e. the Pet Clinic software development process, have been included. 4 | 5 | The purpose of this session is to discuss, discover and agree a shared understanding of what is currently happening in the E2E process. 6 | 7 | Paulo who is leading the exercise has stressed the importance of resisting the temptation to document what is to supposed to happen but to focus on what is actually happening. 8 | 9 | This is the VSM  they created to represent the E2E flow. 10 | 11 | The process the team followed to create the VSM can be described as 12 | 13 | 1. **Identified the Value Stream to be mapped** - Pet Clinic Software Development Process. 14 | 15 | 2. **Empowered the team** - ensured all stakeholders represented. 16 | 17 | 3. **Agreed the problem statement** - Deliver defect free software that meets business requirements quicker and more frequently. 18 | 19 | 4. **Agreed the scope** - what parts of the process VSM was to include and just importantly, what parts it would not. 20 | 21 | 5. **Walked the process documenting** - agreed the process steps, took multiple passes through the process. 22 | 23 | 6. **Collected process data** - lead times, processing times, complete and accurate work per step. 24 | 25 | 7. **Agreed the VSM** - represented the current state of the Pet Clinic Software Development Process. 26 | 27 | 8. **Analyzed the VSM and agreed the way forward** - which the remainder of this module will cover. 28 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step8.md: -------------------------------------------------------------------------------- 1 | There are some points to note about the VSM 2 | 3 |  4 | 5 | The symbols on the VSM are a standard set of symbols  6 | 7 | Please take some time to review the Pet Clinic Software Development Process, specifically where and how the symbols have been used in the mapping of the process. 8 | 9 | As well as describing the flow, including branches and loops, for each step in the process the team have captured the following metrics 10 | 11 | **LT: Lead Time**. LT is the time it takes a work item to leave the previous step to when it leaves the current step. LT includes both the time during which value is being added to the the work item, processing time and idle time when no work is being done on the item. 12 | 13 | **PT: Processing Time**. PT is the time in the step when a work item is being productively processed. 14 | 15 | %**C/A: Percent of Complete/Accurate Work Items**. % C/A is the percent of Complete/Accurate work items received in the current step from the previous step. 16 | 17 | Capturing these metrics in the current state VSM will help the team understand the areas jeopardizing fast flow, short lead times and reliable outcomes, and thus guide the team toward identifying the desired improvements. 18 | 19 | fade out ... -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step9-answer.md: -------------------------------------------------------------------------------- 1 | The correct answer is **Release Planning & Estimation** 2 | 3 | The step with longest lead time (LT) is **Release Planning & Estimation** as it has a lead time of 3 weeks with only 1 hour of processing time (PT) 4 | 5 | As a reminder here is the VSM the Pet Clinic team agreed represented their E2E software development process 6 | 7 |  8 | -------------------------------------------------------------------------------- /online-devops-dojo/value-stream-mapping/step9.md: -------------------------------------------------------------------------------- 1 | Here is the VSM the Pet Clinic team agreed represented their E2E software development process 2 | 3 |  4 | 5 | >> What activity has the longest lead time? << 6 | (*) Release Planning & Estimation 7 | ( ) Design Approval 8 | ( ) Show Case and Approval 9 | ( ) Production Deployment 10 | -------------------------------------------------------------------------------- /online-devops-dojo/version-control/assets/prepare.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This Source Code Form is subject to the terms of the Mozilla Public 3 | # License, v. 2.0. If a copy of the MPL was not distributed with this 4 | # file, You can obtain one at https://mozilla.org/MPL/2.0/. 5 | # 6 | # Globals 7 | # 8 | DEBUG=false 9 | GITHUB='github.com' 10 | GITHUBAPIURL='https://api.github.com' 11 | # Explicit header for GitHub API V3 request cf. https://developer.github.com/v3/#current-version 12 | GITHUBAPIHEADER='Accept: application/vnd.github.v3+json' 13 | 14 | COLQUESTION="\u001b[36m" 15 | COLINFO="\u001b[37m" 16 | COLLOGS="\u001b[35m" 17 | COLRESET="\u001b[m" 18 | REPO=pet-clinic 19 | ORGREPO=dxc-technology 20 | WELCOME_URL=https://dxc-technology.github.io/about-devops-dojo/katacoda/os1-welcome/ 21 | 22 | if [ "$DEBUG" = false ] ; then 23 | CURL_NODEBUG="-sS" 24 | fi 25 | 26 | # adding -s to the command line, allows to hide the PAT entered especially during demos 27 | if [ "$1" == "-s" ] ; then 28 | HIDE_PAT="-s" 29 | fi 30 | 31 | # 32 | # Ask for GitHub PAT 33 | # 34 | echo -e "${COLQUESTION}Please enter your ${GITHUB} Personal Access Token:${COLRESET}" 35 | read $HIDE_PAT TOKEN 36 | export TOKEN 37 | 38 | echo -e "${COLLOGS}Fetching your details from GitHub...${COLRESET}" 39 | USER_JSON=$(curl ${CURL_NODEBUG} -H "Authorization: token ${TOKEN}" -H "$GITHUBAPIHEADER" -X GET ${GITHUBAPIURL}/user) 40 | 41 | SHORTNAME=$(echo $USER_JSON | jq -r '.login') 42 | export SHORTNAME 43 | echo "export SHORTNAME=${SHORTNAME}" > /tmp/shortname.txt 44 | 45 | EMAIL=$(echo $USER_JSON | jq -r '.email//empty') 46 | if [ -z "$EMAIL" ]; then 47 | EMAIL=${SHORTNAME}@noemail.com 48 | fi 49 | export EMAIL 50 | 51 | git config --global user.email "${EMAIL}" 52 | 53 | # Check if repository already exists and properly populated 54 | echo -e "${COLLOGS}" 55 | curl $CURL_NODEBUG -H "Authorization: token $TOKEN" -H "$GITHUBAPIHEADER" -X GET ${GITHUBAPIURL}/repos/$SHORTNAME/$REPO/contents/Jenkinsfile | grep "Not Found" 56 | REPO_DOES_NOT_EXIST=$? 57 | if [ $REPO_DOES_NOT_EXIST -eq 0 ]; then 58 | echo -e "${COLRESET}> I'm confused..." 59 | echo -e "> I was expecting to find the $REPO repository under your GitHub username and I didn't, or the content does not look right." 60 | echo -e "> That must be me. But just in case:" 61 | echo -e "> - Close this Katacoda window: the environment will expire soon and you need ample time to complete the module" 62 | echo -e "> - Go through the Welcome module which will set everything up for you:" 63 | echo -e "> $WELCOME_URL" 64 | exit 1 65 | fi 66 | 67 | # 68 | # Clone Pet Clinic locally 69 | # 70 | echo -e "${COLINFO}Cloning $REPO Git repository...${COLRESET}" 71 | echo -e "${COLLOGS}" 72 | cd ~ 73 | rm -fR $REPO 74 | git clone https://${SHORTNAME}:${TOKEN}@${GITHUB}/${SHORTNAME}/${REPO}.git 75 | echo -e "${COLRESET}" 76 | 77 | touch /tmp/ready 78 | 79 | echo -e "${COLINFO}You are all set! Click on 'CONTINUE'.${COLRESET}" 80 | -------------------------------------------------------------------------------- /online-devops-dojo/version-control/finish.md: -------------------------------------------------------------------------------- 1 | # Conclusion 2 | 3 | Congratulations! You experienced version control: 4 | 5 | * Proposing changes within a short lived feature branch 6 | * Submit a pull request 7 | * Looked for feedback with a peer review 8 | * Iterate on the change 9 | * Merge the change in the `master` branch 10 | 11 | This process is appropriate for a small team, and can also scale for very large 12 | teams. Remember, this process is applicable to application code, but also documentation, infrastructure, and any type of text based asset. 13 | -------------------------------------------------------------------------------- /online-devops-dojo/version-control/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "pathwayTitle": "Online DevOps Dojo", 3 | "title": "Version Control", 4 | "private": true, 5 | "description": "Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later.", 6 | "difficulty": "intermediate", 7 | "time": "30 minutes", 8 | "details": { 9 | "steps": [ 10 | { 11 | "title": "Step 1", 12 | "text": "step1.md" 13 | }, 14 | { 15 | "title": "Step 2", 16 | "text": "step2.md", 17 | "verify": "step2-verify.sh" 18 | }, 19 | { 20 | "title": "Step 3", 21 | "text": "step3-nospell.md", 22 | "code": "step3.sh" 23 | }, 24 | { 25 | "title": "Step 4", 26 | "text": "step4.md" 27 | }, 28 | { 29 | "title": "Step 5", 30 | "text": "step5.md", 31 | "code": "step5.sh" 32 | }, 33 | { 34 | "title": "Step 6", 35 | "text": "step6.md", 36 | "code": "step6.sh" 37 | }, 38 | { 39 | "title": "Step 7", 40 | "text": "step7.md", 41 | "code": "step7.sh" 42 | } 43 | ], 44 | "intro": { 45 | "text": "intro.md" 46 | }, 47 | "assets": { 48 | "host01": [ 49 | { "file": "prepare.sh", "target": "~/","chmod": "+x" } 50 | ] 51 | }, 52 | "finish": { 53 | "text": "finish.md" 54 | } 55 | }, 56 | "environment": { 57 | "hideintro": false, 58 | "uilayout": "editor-terminal", 59 | "uieditorpath":"/root/pet-clinic", 60 | "uimessage1": "\u001b[32mYour Interactive Bash Terminal.\r\nYou can type in and run shell commands here.\r\n\u001b[m" 61 | }, 62 | "backend": { 63 | "imageid": "ubuntu" 64 | 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /online-devops-dojo/version-control/intro.md: -------------------------------------------------------------------------------- 1 | ## Welcome! 2 | 3 | Welcome to the **Online DevOps Dojo** lab on Version Control. 4 | 5 | ## Purpose 6 | 7 | The primary objective of the "version control" module is to understand the 8 | benefits of version control. The secondary objective is to expose a working 9 | example of a branching model for version control: the pull request / feature 10 | branch. 11 | 12 | If you have not completed the Welcome module, you must do so before continuing 13 | with this module. 14 | 15 | By the end of the lesson and lab, you will be able to: 16 | 17 | * articulate the benefits of version control, 18 | * implement version control for your own activity, 19 | * understand the mechanism of pull requests / feature branches. 20 | -------------------------------------------------------------------------------- /online-devops-dojo/version-control/step1.md: -------------------------------------------------------------------------------- 1 | ## Version control: what for? 2 | 3 | | | | 4 | |---|---| 5 | ||**Paulo** wants us to support veterinarians who handle horses.