web-dev-qa-db-ja.com

Githubアクション、ジョブステップ間で計算値を共有するにはどうすればよいですか?

DRY Githubアクションの複数のジョブステップで値を計算して共有する方法はありますか?

以下のワークフローymlファイルでは、echo $ {GITHUB_REF} | cut -d '/' -f3`-$ {GITHUB_SHA}が複数のステップで繰り返されています。

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
11
Casey Flynn

set-output を使用して、ステップの出力を定義できます。その後、出力を後のステップで使用し、withおよびenv入力セクションで評価できます。

以下は、あなたの例ではどのようになるかです。

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

アクションで使用される複数の変数を動的に設定する方法を示す別の例を次に示します。

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

または、 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 }}

Update:最初の例のdockerアクションは非推奨になりました。 GitHubアクションでdockerを使用する最新の方法については、 この回答 を参照してください。

7
peterevans