Existe-t-il une méthode DRY pour calculer et partager une valeur en plusieurs étapes de travail avec les actions Github?
Dans le fichier yml de workflow ci-dessous, echo $ {GITHUB_REF} | cut -d '/' -f3` - $ {GITHUB_SHA} est répété en plusieurs étapes.
name: Test, Build and Deploy
on:
Push:
branches:
- master
jobs:
build_and_Push:
name: Build and Push
runs-on: ubuntu-latest
steps:
- name: Docker Build
uses: "actions/docker/cli@master"
with:
args: build . --file Dockerfile -t cflynnus/blog:`echo ${GITHUB_REF} | cut -d'/' -f3`-${GITHUB_SHA}
- name: Docker Tag Latest
uses: "actions/docker/cli@master"
with:
args: tag cflynnus/blog:`echo ${GITHUB_REF} | cut -d'/' -f3`-${GITHUB_SHA} cflynnus/blog:latest
set-output
peut être utilisé pour définir des sorties pour les étapes. Les sorties peuvent ensuite être utilisées dans des étapes ultérieures et évaluées dans les sections d'entrée with
et env
.
Voici à quoi cela ressemblerait pour votre exemple.
name: Test, Build and Deploy
on:
Push:
branches:
- master
jobs:
build_and_Push:
name: Build and Push
runs-on: ubuntu-latest
steps:
- name: Set tag var
id: vars
run: echo ::set-output name=docker_tag::$(echo ${GITHUB_REF} | cut -d'/' -f3)-${GITHUB_SHA}
- name: Docker Build
uses: "actions/docker/cli@master"
with:
args: build . --file Dockerfile -t cflynnus/blog:${{ steps.vars.outputs.docker_tag }}
- name: Docker Tag Latest
uses: "actions/docker/cli@master"
with:
args: tag cflynnus/blog:${{ steps.vars.outputs.docker_tag }} cflynnus/blog:latest
Voici un autre exemple montrant comment définir dynamiquement plusieurs variables à utiliser par une action.
- name: Set output variables
id: vars
run: |
echo ::set-output name=pr_title::"[Test] Add report file $(date +%d-%m-%Y)"
echo ::set-output name=pr_body::"This PR was auto-generated on $(date +%d-%m-%Y) \
by [create-pull-request](https://github.com/peter-evans/create-pull-request)."
- name: Create Pull Request
uses: peter-evans/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_TITLE: ${{ steps.vars.outputs.pr_title }}
PULL_REQUEST_BODY: ${{ steps.vars.outputs.pr_body }}
Vous pouvez également utiliser set-env
.
- name: Set environment variables
run: |
echo ::set-env name=PR_TITLE::"[Test] Add report file $(date +%d-%m-%Y)"
echo ::set-env name=PR_BODY::"This PR was auto-generated on $(date +%d-%m-%Y) \
by [create-pull-request](https://github.com/peter-evans/create-pull-request)."
- name: Create Pull Request
uses: peter-evans/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_TITLE: ${{ env.PR_TITLE }}
PULL_REQUEST_BODY: ${{ env.PR_BODY }}
Mise à jour: Les actions du docker dans le premier exemple sont obsolètes. Veuillez consulter cette réponse pour la dernière façon de travailler avec docker dans les actions GitHub.