GitHub Actions 传递密钥作为可重用工作流程的输入

5

我有一个可重复使用的工作流程,用于构建和将docker镜像推送至ECR。

工作流程中的其中一个输入是用于指定docker build命令参数的。以下是可重复使用工作流程中的命令:

docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG ${{ inputs.DOCKER_BUILD_ARGS }} .

在某些情况下,我需要将 DOCKER_BUILD_ARGS 中包含机密信息,例如:

    secrets:
      AWS_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    uses: XXXXX/.github/workflows/DockerBuildPushECR.yml@main
    with:
      ECR_REGISTRY: XXXXXX
      ECR_REPOSITORY: XXXXX
      DOCKER_BUILD_ARGS: "--build-arg PASSWORD=${{ secrets.PASSWORD }}"

GitHub提示工作流无效:"未识别的命名值:'secrets'",因为它只在secrets部分中期待secrets。

我不能将其传递为secret,因为可复用工作流并不期待这个secret,我只想让它成为字符串的一部分...

不能使用env,因为它不能与可复用工作流一起使用。

我该如何使这种情况有效?


实际上,在可重用的工作流中,您可以使用env,但必须在可重用的工作流内设置值。 在您的情况下,我相信设置env:PASSWORD:${{secrets.PASSWORD}},然后使用with:DOCKER_BUILD_ARGS:"--build-arg PASSWORD = ${{env.PASSWORD}}"应该会起作用。 让我知道 :) - GuiFalourd
是的,那可能行得通。然而,这是针对特定秘密的。我正在尝试制作更通用的东西,其中整个参数列表可以不同。有时只是纯文本,有时带有秘密,有时带有不同的秘密。 - Mickey Cohen
这里遇到了同样的问题。你找到解决方案了吗? - orkenstein
@orkenstein,我刚刚发布了我是如何解决这个问题的,希望这也能帮到你。 - Mickey Cohen
1个回答

0
我最终做的是在可重复使用的工作流中添加了2个可选的秘密,并将它们作为构建参数添加到docker build命令中。这样,如果它们被传递了-它们就是秘密,如果没有-它们就是空白的,这不会影响任何事情。这解决了我的问题。
因此,秘密部分看起来像这样:
    secrets:
      AWS_ACCESS_KEY:
        required: true
      AWS_SECRET_ACCESS_KEY:
        required: true
      USERNAME:
        required: false
      PASSWORD: 
        required: false

构建如下:

    - name: Build and tag image
      run: docker build -f ${{ inputs.DOCKERFILE }} -t ${{ inputs.ECR_REGISTRY }}/${{ inputs.ECR_REPOSITORY }}:${{ inputs.IMAGE_TAG }} --build-arg USERNAME=${{ secrets.USERNAME }} --build-arg PASSWORD=${{ secrets.PASSWORD }} ${{ inputs.DOCKER_BUILD_ARGS }} ${{ inputs.DOCKER_BUILD_CONTEXT }}

当然,Dockerfile需要有相应的参数。 这使我能够“动态”传递最多2个机密。

提供文档链接会很有帮助。 - justin.m.chase
提供文档链接将会很有帮助。 - undefined

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