Github Actions by Example
  • GitHub Actions by Example
  • chap1-intro
    • Section 1 - Introducing GitHub Actions
    • Section 2 - Terminology and Core Concepts
    • Section 3 - Building a workflow
  • chap2-deployment-workflow
    • Section 1 - Workflow
    • Section 2 - The services
    • Section 3 - The test workflow job
    • Section 4 - The build and push workflow job
    • Section 5 - The deploy workflow job
  • Chap3-reusable-workflows
    • Section 1 - What is a reusable workflow
    • Section 2 - The test reusable workflow
    • Section 3 - The build and push reusable workflow
    • Section 4 - The deploy reusable workflow
    • Section 5 - Releasing the reusable workflow
  • Chap4-custom-actions
    • Section 1 - What is a custom action
    • Section 2 - Composite Custom Actions
    • Section 3 - Javascript Custom Actions
Powered by GitBook
On this page
  • Creating the reusable workflow job
  • Setting up the reusable workflow files
  • Refactoring the build and push workflow
  1. Chap3-reusable-workflows

Section 4 - The deploy reusable workflow

PreviousSection 3 - The build and push reusable workflowNextSection 5 - Releasing the reusable workflow

Last updated 8 months ago

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 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 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 }}'

  

github-actions-by-example-reusable-workflows
deploy job