2

I have a Github Action which consist to tag, build and deploy a docker image. When there is a pull request I just do the build job with this file: build.yml

# This is a basic workflow to help you get started with Actions

name: Build

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  docker:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    env:
      DOCKERHUB_REPOSITORY: ${{ secrets.DOCKERHUB_REPOSITORY }}

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: docker build
        run: | # Tag the image with the commit hash
          docker build -t $DOCKERHUB_REPOSITORY .
          docker tag $DOCKERHUB_REPOSITORY:latest $DOCKERHUB_REPOSITORY:$(git log -1 --pretty=%h)

And for the deployment I have to build and deploy with this file: deploy.yml

# This is a basic workflow to help you get started with Actions

name: Deploy

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  docker:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    env:
      DOCKERHUB_REPOSITORY: ${{ secrets.DOCKERHUB_REPOSITORY }}

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: docker login
        env:
          DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
          DOCKERHUB_ACCESS_TOKEN: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
        run: |
          docker login -u $DOCKERHUB_USER -p $DOCKERHUB_ACCESS_TOKEN

      - name: docker build
        run: | # Tag the image with the commit hash
          docker build -t $DOCKERHUB_REPOSITORY .
          docker tag $DOCKERHUB_REPOSITORY:latest $DOCKERHUB_REPOSITORY:$(git log -1 --pretty=%h)

      - name: docker push
        run: |
          docker push $DOCKERHUB_REPOSITORY

For me there is a repetition with the build section but I did not found how can I use a dependency in jobs on different files. It is not working.

How can I tell github action that the deploy section depends on the build ?, with 2 different files.

link: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#creating-dependent-jobs

1 Answer 1

1

You can merge them into one CI/CD pipeline. This should be triggered by both pushes and pull_requests in master. This has several advantages;

  • If the build fails, the pipeline is automatically aborted
    (to be absolutely sure, you can add if: ${{ success() }}!
  • No duplicate steps, docker build is only defined once.
  • Steps can still only be performed on a push or pull_request by using conditions:
if: ${{ github.event_name == 'push' }} // OR
if: ${{ github.event_name == 'pull_request' }}
  • Fewer pipelines to maintain!
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.