web-dev-qa-db-ja.com

githubアクション内で現在のブランチを取得する方法

GithubアクションでDockerイメージを構築していて、ブランチ名でイメージにタグを付けたいのですが、GITHUB_REF変数ですが、結果はrefs/heads/feature-branch-1と私だけが必要ですfeature-branch-1

21
aborilov

$GITHUB_REFからブランチ名を抽出するための別のステップを追加し、ステップ出力に設定しました

- name: Extract branch name
      Shell: bash
      run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
      id: extract_branch

その後、私はそれを次のステップで使用できます

- name: Push to ECR
      id: ecr
      uses: jwalton/gh-ecr-Push@master
      with:
        access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        region: us-west-2
        image: eng:${{ steps.extract_branch.outputs.branch }}
28
aborilov

私は信じている GITHUB_REFは、ブランチ名を含む唯一の環境変数です。

次のように、残りの文字列からブランチ名のみを抽出できます。

${GITHUB_REF##*/}

例:

$ GITHUB_REF=refs/heads/feature-branch-1
$ echo ${GITHUB_REF##*/}
feature-branch-1

更新:完全なワークフローの例を追加しました。

ワークフロー

name: CI
on: Push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v1
      - name: Branch name
        run: echo running on branch ${GITHUB_REF##*/}
      - name: Build
        run: docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .

ソース: https://github.com/tedmiston/x/blob/master/.github/workflows/workflow.yml

出力例-マスターブランチ

Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  Shell: /bin/bash -e {0}
Sending build context to Docker daemon  146.9kB

Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
 ---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:master

ログ: https://github.com/tedmiston/x/commit/cdcc58a908e41d3d90c39ab3bf6fef1ad2c4238a/checks#step:4:16

出力例-非マスターブランチ

Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  Shell: /bin/bash -e {0}
Sending build context to Docker daemon  144.9kB

Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
 ---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:branch-name-test

ログ: https://github.com/tedmiston/x/commit/4e8d31259f861aaa2c30375756fc081c3659bddf/checks#step:4:16


パラメータ展開構文の詳細については、 この回答 を参照してください。

参考のために、ページ GitHubアクションの仮想環境 には、実行環境で使用可能なすべての環境変数がリストされています。

11
Taylor Edmiston

プルリクエストトリガーでGitHubアクションを実行している場合、GITHUB_REF変数にはrefs/pull/421/mergeのようなものが含まれるため、その名前にgit Pushを使用しようとすると、失敗する可能性が高いことに注意してください。 。

ただし、使用できるのは、YAMLのGitHubコンテキストの参照です。次のようなもの:${{ github.head_ref }}

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context

Github action context refs

7
Dusan Plavak

en変数として設定するには、次の構文を使用します。

- name: Extract branch name
  Shell: bash
  run: echo "::set-env name=BRANCH_NAME::$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')"
- name: Test
  run: echo "${BRANCH_NAME}"

私はこの構文をここに見つけました: Githubアクション-スターターworflows#環境変数を定義する方法?#68

Rmq:sed 's/\//_/g'は、ブランチ名の\_に置き換えることです

3
LE GALL Benoît

GitHub Actions内でbashスクリプトを使用して簡単なテストを行いました:

_#!/bin/bash

echo Reserved for REPO_NAME=${GITHUB_REPOSITORY##*/}
echo GITHUB_REF=${GITHUB_REF}
echo EXTRACT_GITHUB_REF=${GITHUB_REF##*/}
echo EXTRACT_GITHUB_REF_HEADS=$(echo ${GITHUB_REF#refs/heads/})

cd $REPO_NAME
git checkout ${GITHUB_REF##*/}
git checkout $(echo ${GITHUB_REF#refs/heads/})
_

これが出力のスクリーンショットです。

enter image description here したがって、_${GITHUB_REF##*/}_と$(echo ${GITHUB_REF#refs/heads/})の両方が正しい

3
Chetabahana

https://github.com/rlespinasse/github-slug-action を使用できます

- uses: rlespinasse/github-slug-action@master
- name: Print slug variables
  run: |
    echo ${{ env.GITHUB_REF_SLUG }}
    echo ${{ env.GITHUB_HEAD_REF_SLUG }}
    echo ${{ env.GITHUB_BASE_REF_SLUG }}

環境変数からgithub_refを抽出します。

2
Antoine

if:github.ref == 'refs/heads/integration' && github.event_name == 'プッシュ'

上記のコマンドを使用して、実行するブランチまたはイベントを置き換えることができます。

0
Tarun Gupta