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

Mic*_*hen 5 github-actions github-secret

我有一个可重用的工作流程,用于构建 Docker 映像并将其推送到 ECR。

工作流的输入之一用于指定 docker build 命令的参数。这是可重用工作流程中的命令:

docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG ${{ inputs.DOCKER_BUILD_ARGS }} .
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我需要 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 }}"
Run Code Online (Sandbox Code Playgroud)

GitHub 抱怨工作流程无效:“无法识别的命名值:‘秘密’”,因为它只需要秘密部分中的秘密。

我无法将它作为秘密传递,因为可重用工作流程不需要这个秘密,我只是希望它成为字符串的一部分......

无法使用 env,因为它无法与可重用工作流程结合使用

我怎样才能让这个场景发挥作用?

Mic*_*hen 0

我最终做的是将 2 个可选秘密添加到可重用工作流程中,将它们添加为 docker build commnd 中的构建参数。这样,如果它们通过了 - 它们是秘密,如果没有通过 - 它们只是空白,这不会影响任何事情。它解决了我的情况。

所以,秘密部分看起来像这样:

    secrets:
      AWS_ACCESS_KEY:
        required: true
      AWS_SECRET_ACCESS_KEY:
        required: true
      USERNAME:
        required: false
      PASSWORD: 
        required: false
Run Code Online (Sandbox Code Playgroud)

和这样的构建:

    - 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 }}
Run Code Online (Sandbox Code Playgroud)

当然,Dockerfile需要有相应的参数。这允许我“动态”传递最多 2 个秘密