如何获得github工作流的短sha?

如何获得github工作流的短sha?,git,docker,github-actions,Git,Docker,Github Actions,我正在GitHub中创建一个工作流,它创建并使用docker映像。因此,我已使用此docker图像的全局环境变量启动了我的工作流文件,该图像对我工作流中的所有作业都可见: name: continuous integration on: push: branches: - '**' env: IMAGE: docker.pkg.github.com/${{ github.repository }}/jactor-persistence:${{ github.sha

我正在GitHub中创建一个工作流,它创建并使用docker映像。因此,我已使用此docker图像的全局环境变量启动了我的工作流文件,该图像对我工作流中的所有作业都可见:

name: continuous integration
on:
  push:
    branches:
      - '**'

env:
  IMAGE: docker.pkg.github.com/${{ github.repository }}/jactor-persistence:${{ github.sha }}
我想用头提交的短sha替换
${{github.sha}
,与以下命令的结果相同
git rev parse--short head


这可能吗?

它似乎不可用:仅包括
github.sha
作为完整提交sha(触发工作流运行)

您需要以某种方式计算所需的字符串(只选择
${{github.sha}
的前n个字符)

这意味着您可以:

  • 定义一个变量,如中所示
  • 将其写入磁盘
  • cat$my_var
    在每个步骤中使用您的
    var
见和

但是,您现在有“”

通常需要定义一组环境变量,这些变量用于作业中的多个步骤,甚至工作流中的多个作业

现在,您可以在工作流和作业级别添加
env
映射 这些环境变量将与层次结构中任何较低一级定义的
env
合并

见:


正如VonC所提到的,您可以在上一步中自己计算字符串

      - name: Set outputs
        id: vars
        run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
      - name: Check outputs
        run: echo ${{ steps.vars.outputs.sha_short }}

您还可以使用短sha设置环境变量:

    - name: Add SHORT_SHA env property with commit short sha
      run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV
SHORT\u SHA
可以像任何其他环境变量一样使用,例如:

    - name: My step
      run: myscript ${SHORT_SHA}

对我的答案进行了很好的补充。问题是知道7足够短,而且不太短:但它确实如此:这就是documents/Declusted。回答很好,但在windows上运行时无法正常工作。需要引用echo字符串。
echo::set output name=sha_short:$(git rev parse--short HEAD)
谢谢@MaxGhost。更新了答案。哦,还值得一提的是,PR期间头部的提交哈希实际上指的是合并提交,这是将PR分支合并到目标分支的结果。CI在该合并上运行,以确保即使考虑到可能的合并冲突,构建也不会中断。这是但是,当CI在主线分支上运行时,右提交散列。通常没有问题,但这可能取决于用例。是的……这是我自己得出的结论。但是这是否可以在全局变量的表达式中执行(在这里的某处
${github.sha}
),以避免在所有需要variable@jactor-瑞斯当然肯定是全局的,但彼得雷万斯使用了一个变量…..我现在知道了,但我希望有一个全局环境变量,以避免在我的工作中重复代码…@jactor瑞斯将使用环境映射:请参阅上面我编辑的答案。是的…我使用的是workflow环境(
env
位于工作流文件顶部),因此它可用于工作流中的所有作业。但是在工作流阶段,是否可以将
${{github.sha}}
操作为短sha,或者我必须在作业中复制此逻辑?