使用Docker Buildx Github Action缓存而不使用官方Action

5

TL;DR:

如何在GitHub Actions中手动查找ACTIONS_RUNTIME_TOKENACTIONS_CACHE_URL

背景:

我正在尝试在GitHub Actions的buildkit构建期间缓存docker层。

理论上,使用docker/setup-buildx-actiondocker/build-push-actioncrazy-max/ghaction-github-runtime操作很简单。但问题是,由于组织策略的限制,我不能使用它们。

现在,我的工作流程的相关部分如下:

$repo_url= "<ECR repo in aws>"
docker buildx create --use --driver=docker-container
docker buildx build --tag "${repo_url}:latest"  --file docker/Dockerfile . --cache-to "type=gha,mode=max" --cache-from type=gha

缓存功能需要两个变量/配置:ACTIONS_RUNTIME_TOKENACTIONS_CACHE_URL。它们将由ghaction-github-runtime设置,因此我无法使用该组件。查看代码,似乎从环境中导出了这两个变量,但我找不到它们。我如何在没有其他操作的帮助下手动找到它们?
2个回答

9

虽然有点让人不舒服,但这是我想出来的解决方案:

首先,在工作流中添加权限。

permissions:
  id-token: write # Important for at least docker gha cache
  contents: read

这将为您提供环境变量ACTIONS_ID_TOKEN_REQUEST_URLACTIONS_ID_TOKEN_REQUEST_TOKEN
Docker gha缓存需要两个变量:
  • ACTIONS_RUNTIME_TOKEN,实际上是ACTIONS_ID_TOKEN_REQUEST_TOKEN
  • ACTIONS_CACHE_URL,可以从ACTIONS_ID_TOKEN_REQUEST_URL推断出来。GitHub变量看起来像https://pipelines.actions.githubusercontent.com/<a long id>/<a lot of things>,而docker变量ACTIONS_CACHE_URL应该是https://artifactcache.actions.githubusercontent.com/<the long id from above>/
因此,我的最终解决方案是:
export ACTIONS_CACHE_URL=$(echo "$ACTIONS_ID_TOKEN_REQUEST_URL" | grep -Po 'https://[^/]+/[^/]+/' | sed  's/pipelines/artifactcache/')
export ACTIONS_RUNTIME_TOKEN=$ACTIONS_ID_TOKEN_REQUEST_TOKEN

docker buildx build --load --file docker/Dockerfile . --cache-to "type=gha,mode=max" --cache-from type=gha

现在我可以在不进行外部操作的情况下使用缓存。

谢谢;我看到了这个,但是文档非常差。 - pkaramol

4
根据您实际可以使用的“官方”操作,您可能可以做与使用actions/github-script相同的事情,步骤如下:
    - name: Expose actions cache variables
      uses: actions/github-script@v6
      with:
        script: |
          core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
          core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接