Section 4 - The deploy reusable workflow

Similarly to the reusable test and the build and push job , the reusable deploy job will closely resemble the one we created in Chapter 2, Section 5. The main difference is that this new workflow job will be part of a reusable workflow, allowing it to be called from other repositories.

Creating the reusable workflow job

We’ll start by referencing the logic used in Chapter 2, Section 5 (The deploy job) and refactor it to be part of a reusable workflow.

Setting up the reusable workflow files

First, we will rename the reusable-test-build.yaml file located in the .github/workflows/ directory of the github-actions-by-example-reusable-workflows repository to reusable-test-build-deploy.yaml

Refactoring the build and push workflow

Next, we’ll refactor the deploy workflow job by copying it from one of our service repositories and placing it below the build and push job in our newly renamed reusable workflow file. For this example, we'll use the deploy job from the test-build-and-deploy workflow in the user-management-service repository and modify it to be reusable.

To make the deploy job reusable, we’ll follow a similar process as with the build and push job. Since it’s now part of a reusable workflow file, we only need to introduce the necessary inputs and utilize them within the job.

We’ll add the following inputs, providing default values for each:

  • deploy-commit: wether to commit changes for deploy

    • defaults to: ${{ github.event_name != 'pull_request' }}

  • deploy-create-pr: wethe to create the pr for deploy

    • defauts to: ${{ github.event_name != 'pull_request' }}

We’ll now place the deploy job into the reusable workflow, integrating the inputs we just defined:

name: test-build-deploy

on:
  workflow_call:
    inputs:
...
      deploy-commit:
        required: false
        type: boolean
        description: "Commit changes to deploy"
        default: ${{ github.event_name != 'pull_request' }}
      deploy-create-pr:
        required: false
        type: boolean
        description: "Create PR for deploy"
        default: ${{ github.event_name != 'pull_request' }}

jobs:
  test:
  ...
  build:
  ...
  deploy:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Update deployment.yaml
        uses: fjogeleit/yaml-update-action@v1
        with:
          valueFile: 'deploy/deployment.yaml'
          propertyPath: 'spec.template.spec.containers[0].image'
          value: ghcr.io/${{ inputs.image-owner }}/${{ inputs.image-name }}:${{ github.sha }}
          commitChange: ${{ inputs.deploy-commit }}
          targetBranch: main
          masterBranchName: main
          createPR: ${{ inputs.deploy-create-pr }}
          branch: 'reusable/deploy'
          token: ${{ secrets.GITHUB_TOKEN }}
          message: 'Update Image Version to: ${{ github.sha }}'

  

Last updated