Rüd*_*ulz 26 git github github-actions
I want to build a docker image using a GitHub action, migrating from TeamCity.
In the build script, I want to tag the image with a combination of branch and commit, e.g. master.ad959de. Testing that locally, I get that information like this:
git_branch=`git symbolic-ref --short HEAD`
git_hash=`git rev-parse --short HEAD`
docker_version=${git_branch}.${git_hash}
Run Code Online (Sandbox Code Playgroud)
This is the relevant part of the GitHub action:
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Create docker image
run: ./docker-build.sh
Run Code Online (Sandbox Code Playgroud)
Running that script in that GitHub action results in this error:
fatal: ref HEAD is not a symbolic ref
Run Code Online (Sandbox Code Playgroud)
How can I generate a tag like that inside a GitHub action?
小智 113
另一种方法是使用github context。
- name: Create docker image
run: ./docker-build.sh ${{ github.head_ref }}.${{ github.sha }}
Run Code Online (Sandbox Code Playgroud)
这种方法的好处是您不必添加设置值的步骤。请注意,它使用完整版本的 sha(而不是短版本)。
Ant*_*ile 38
github 提供了两个在这里很有用的变量,你需要对它们进行一些处理以获得你想要的值:
GITHUB_SHA:触发工作流的提交 SHA。例如,ffac537e6cbbf934b08745a378932722df287a53。
GITHUB_REF:触发工作流的分支或标记引用。例如,refs/heads/feature-branch-1。如果分支或标记均不适用于事件类型,则该变量将不存在。
可以像这样提取短值:
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git_branch=${GITHUB_REF#refs/heads/}
Run Code Online (Sandbox Code Playgroud)
Tia*_*vêa 26
获取当前分支并在工作流上提交 sha 的一种方便方法可能是获取它并保存“变量”。
- name: Declare some variables
id: vars
shell: bash
run: |
echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Another step
run: |
echo "Branch: ${{ steps.vars.outputs.branch }}"
echo "Sha: ${{ steps.vars.outputs.sha_short }}"
Run Code Online (Sandbox Code Playgroud)
也许你docker-build.sh可以接收分支和她作为参数,完整版本作为参数。
- name: Create docker image
run: ./docker-build.sh "${{ steps.vars.outputs.branch }}.${{ steps.vars.outputs.sha_short }}"
Run Code Online (Sandbox Code Playgroud)
要不就
- name: Create docker image
run: ./docker-build.sh "${GITHUB_REF#refs/heads/}.${GITHUB_SHA}"
Run Code Online (Sandbox Code Playgroud)
在此操作中,您可以看到我所做的许多测试,以了解哪些有效,哪些无效。
使用环境变量获得缩短的 SHA 的最简单方法:
- name: Build Docker Image
run: ./docker-build.sh alpha.${GITHUB_SHA::6}
Run Code Online (Sandbox Code Playgroud)