Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CI CD with GitHub Actions – DevOpsCon London 20...

CI CD with GitHub Actions – DevOpsCon London 2021 04 21

CI/CD with GitHub Actions including firebase functions deployments and a live demo to deploy Docker image to Dockerhub and GitHub Container Registry.

Avatar for Lothar Schulz

Lothar Schulz

April 21, 2021
Tweet

More Decks by Lothar Schulz

Other Decks in Technology

Transcript

  1. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    CI/CD with GitHub Actions DevOpsCon London 2021 04 21
  2. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Lothar Schulz CTO AIVITEX lotharschulz.info github.com/lotharschulz speakerdeck.com/lothar @lothar_schulz lnkd.in/in/lotharschulz
  3. What are GitHub Actions? With GitHub Actions, workflows and steps

    are just code in a repository, so you can create, share, reuse, and fork your software development practices.
  4. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    github.com/sdras/awesome-actions#community-resources
  5. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Open Source Projects using GitHub actions (incomplete list) • https://github.com/gatsbyjs/gatsby/tree/master/.github/workflows • https://github.com/hakimel/reveal.js/blob/master/.github/workflows/js.yml • https://github.com/twbs/bootstrap/blob/master/.github/workflows/test.yml • https://github.com/microsoft/vscode/tree/master/.github/workflows • https://github.com/facebook/create-react-app/tree/master/.github/workflows • https://github.com/hakimel/reveal.js/blob/master/.github/workflows/js.yml • https://github.com/babel/babel/tree/master/.github/workflows • https://github.com/nodejs/node/tree/master/.github/workflows • https://github.com/microsoft/TypeScript/tree/master/.github/workflows • https://github.com/kubernetes/utils/tree/master/.github/workflows • https://github.com/jonico/programmatic-runner-test/blob/master/.github/workflows/blank.yml • https://github.com/corona-warn-app/cwa-testresult-server/tree/master/.github/workflows • https://github.com/corona-warn-app/cwa-verification-portal/tree/master/.github/workflows • https://github.com/corona-warn-app/cwa-testresult-server/tree/master/.github/workflows • https://github.com/OWASP/owasp-masvs/tree/master/.github/workflows
  6. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Jobs Jobs can run at the same time in parallel or be dependent on the status of a previous job and run sequentially. build-and-dockerhub-push-if-linux: needs: [benchmark, test]
  7. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Conditionals if: matrix.os == 'ubuntu-18.04' env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} run: | d=$(date +%Y-%m-%d) tag=$d-${{ matrix.os }}-${{ github.sha }} docker build -t lotharschulz/hello-github-actions:$tag . docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} docker push lotharschulz/hello-github-actions:$tag
  8. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Matrix - Excludes strategy: fail-fast: false matrix: os: [macOS-10.14, ubuntu-18.04] goos: [linux, darwin] exclude: - os: macOS-10.14 goos: linux - os: ubuntu-18.04 goos: darwin runs-on: ${{ matrix.os }}
  9. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Matrix - Excludes strategy: fail-fast: false matrix: os: [macOS-10.14, ubuntu-18.04] goos: [linux, darwin] exclude: - os: macOS-10.14 goos: linux - os: ubuntu-18.04 goos: darwin runs-on: ${{ matrix.os }} exclude: - os: macOS-10.14 goos: linux - os: ubuntu-18.04 goos: darwin
  10. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Matrix - Excludes strategy: fail-fast: false matrix: os: [macOS-10.14, ubuntu-18.04] goos: [linux, darwin] exclude: - os: macOS-10.14 goos: linux - os: ubuntu-18.04 goos: darwin runs-on: ${{ matrix.os }} exclude: - os: macOS-10.14 goos: linux - os: ubuntu-18.04 goos: darwin include: - os: macOS-10.14 goos: darwin - os: ubuntu-18.04 goos: linux !
  11. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Matrix - build only what you need task testMatrix { project.afterEvaluate { def checkTasks = subprojects.collect { it.tasks.findByName("check") }.findAll { it != null } dependsOn(checkTasks) doLast { def checkTaskPaths = checkTasks .collect { it.path } println(JsonOutput.toJson(checkTaskPaths)) } } } faster parallel github builds https://github.com/testcontainers/testcontainers-java/blob/master/gradle/ci-support.gradle#L4-L18
  12. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Matrix - build only what you need TASKS=$(./gradlew --no-daemon --parallel -q testMatrix) echo $TASKS echo "::set-output name=matrix::{\"gradle_args\":$TASKS}" https://github.com/testcontainers/testcontainers-java/blob/master/gradle/ci-support.gradle#L4-L18 faster parallel github builds
  13. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Surprises test: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - uses: actions/setup-java@v1 with: java-version: 11 - uses: eskatos/gradle-command-action@v1 with: arguments: test - name: test the code
  14. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Surprises test: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - uses: actions/setup-java@v1 with: java-version: 11 - uses: eskatos/gradle-command-action@v1 with: arguments: test # - name: test the code
  15. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Security ... env: GITHUB_CONTEXT: ${{ toJson(github) }} run: | REPO=$(echo $GITHUB_CONTEXT | jq -r '.repository') ... https://securitylab.github.com/research/github-actions-untrusted-input/
  16. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Self Hosted & Awesome Runners https://github.com/jonico/awesome-runners .lotharschulz.info/2019/12/09/github-action-self-hosted-runners-on-aws-incl-spot-instances
  17. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Issue Ops https://github.com/jonico/auto-scaling-github-runners-ec2-issueops https://github.com/jonico/auto-scaling-github-runners-kubernetes-issueops
  18. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    Core concepts Encrypted secrets Packages container registry supports github_token There is more
  19. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    There is more Contexts available on run time Triggered by own events Package manager and gh docker registry integrated
  20. CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz

    There is more Run github actions locally Organization Workflows first-issue-greeter & github-workflow-sync
  21. CREDITS: This presentation template was created by Slidesgo, including icons

    by Flaticon, infographics & images by Freepik CI/CD with GitHub Actions DevOpsCon London 2021 04 21 @lothar_schulz I am sure you have questions.