Bedingtes Abbrechen von Jobs in GitHub Actions
Vermeidung doppelter Ausführungen von Jobs durch bedingtes Abbrechen in GitHub Actions. Beispiele für Build- und Release-Workflows.
Etjen Delilovic, 16.09.2024
Inhalt
Bedingtes Abbrechen von Jobs in GitHub Actions
In diesem Blogpost wird gezeigt, wie bedingtes Abbrechen von Jobs in GitHub Actions implementiert werden kann. Dies ist besonders nützlich, um doppelte Ausführungen von Jobs zu vermeiden, beispielsweise bei einem Tag-Release.
Beispiel: Build Workflow
Im folgenden Beispiel wird ein Build-Workflow gezeigt, der nur ausgeführt wird, wenn es sich nicht um einen Tag-Release handelt. Dies wird durch folgende Bedingung erreicht:
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
Und hier der gesamte Workflow:
name: Build Workflow
on: [ push ]
jobs:
backend-build:
runs-on: ubuntu-latest
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
- name: Build with Gradle
run: |
cd backend
./gradlew build
Beispiel: Release Workflow
Im Release-Workflow wird die Bedingung umgekehrt, sodass die Jobs nur bei einem Tag-Release ausgeführt werden.
name: Release Workflow
on:
push:
tags:
- 'v*.*.*'
jobs:
backend-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
- name: Build with Gradle
run: |
cd backend
./gradlew build
- name: Extract version from tag
id: extract_version
run: |
version=${GITHUB_REF#refs/tags/backend-v}
echo "::set-output name=version::$version"
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Deploy to Docker Hub
uses: docker/build-push-action@v6
with:
context: ./backend
file: ./Dockerfile
push: true
tags: |
trx-base/backend:latest
trx-base/backend:${{ steps.extract_version.outputs.version }}
Fazit
Durch die Verwendung von bedingten Ausdrücken in GitHub Actions kann sichergestellt werden, dass bestimmte Jobs nur unter bestimmten Bedingungen ausgeführt werden. Dies hilft, unnötige Ausführungen zu vermeiden und die Effizienz der CI/CD-Pipeline zu verbessern.