GithubアクションでDockerイメージを構築していて、ブランチ名でイメージにタグを付けたいのですが、GITHUB_REF
変数ですが、結果はrefs/heads/feature-branch-1
と私だけが必要ですfeature-branch-1
。
$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 }}
私は信じている 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アクションの仮想環境 には、実行環境で使用可能なすべての環境変数がリストされています。
プルリクエストトリガーでGitHubアクションを実行している場合、GITHUB_REF
変数にはrefs/pull/421/merge
のようなものが含まれるため、その名前にgit Push
を使用しようとすると、失敗する可能性が高いことに注意してください。 。
ただし、使用できるのは、YAMLのGitHubコンテキストの参照です。次のようなもの:${{ github.head_ref }}
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'
は、ブランチ名の\
を_
に置き換えることです
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/})
_
これが出力のスクリーンショットです。
したがって、_${GITHUB_REF##*/}
_と$(echo ${GITHUB_REF#refs/heads/})
の両方が正しい
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を抽出します。
if:github.ref == 'refs/heads/integration' && github.event_name == 'プッシュ'
上記のコマンドを使用して、実行するブランチまたはイベントを置き換えることができます。