GitHub Actions中的环境和可重用工作流程

3
我想找到一种方法,将环境语句从可重用工作流移动到调用工作流中。 可重用工作流的开始是:
name: Reusable Terraform Action
on: 
  workflow_call:
    inputs:
      working-folder:
        description: The name of the client folder to process
        required: true
        type: string

jobs:
  Terraform:
    ***environment: Development***    
    env:
      ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
      ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
      ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
      ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
        working-directory: ${{ inputs.working-folder }}

调用工作流程如下:

name: Deployment TF Reuse
on:  
  workflow_dispatch:
jobs:
  walm:
    uses: ./.github/workflows/reuse-terraform.yml
    with:
      working-folder: r3us-walm

无论我在调用工作流程中的哪个位置尝试放置环境:开发线,它都会失败解析步骤。
如果我能找到一种方法在可重用的工作流程中获取这些参数,就像这样将4个密钥作为参数传递,我不介意。但它仍然抱怨“uses:”语句。
name: Deployment TF Reuse
on:  
  workflow_dispatch:
jobs:
  walm:
    environment: Development
    uses: ./.github/workflows/reuse-terraform.yml
    with:
      working-folder: r3us-walm
      secrets:
        ACID: ${{ secrets.ARM_CLIENT_ID }}
        ACS: ${{ secrets.ARM_CLIENT_SECRET }}
        ATID: ${{ secrets.ARM_TENANT_ID }}
        ASID: ${{ secrets.ARM_SUBSCRIPTION_ID }}    

关于 secrets,您可以使用 secrets: inherit 隐式地传递它们。有关更多详细信息,请参阅 将输入和 secrets 传递给可重用的工作流程 - Azeem
如果您删除environment部分周围的那些星号并将steps添加到其中,则上面的可重用工作流看起来不错。您遇到了什么解析错误?请将其添加到您的问题中。 - Azeem
Azeem,谢谢你的回答。环境部分周围的星号是我试图突出显示GitHub action抱怨的那行代码。Action认为它不应该在那里,因为它抱怨了以下用法:行。我想要在那里放置环境,是因为我想在环境:Development上下文下运行可重复使用的工作流程,并且从另一个工作流程中,我想在环境:UAT上下文下使用相同的可重复使用的工作流程。 - Wolfgang
我通过Colin的ALM Corner的一篇优秀文章使其正常工作: https://colinsalmcorner.com/consuming-environment-secrets-in-reusable-workflows/ 再次感谢Azeem! - Wolfgang
很高兴听到这个。当然可以。那么,具体是什么问题呢?如果您能够详细地自我解答,对其他人会有帮助。谢谢! - Azeem
1个回答

3

这篇文章的帮助下,以及从Azeem那里得到的灵感,我成功地让它运行起来了。

以下是我的简单调用/调用者工作流程:

name: Calling Workflow

on:
  workflow_dispatch:

jobs:
  deploy_dev:
    name: Deploy to Dev
    uses: ./.github/workflows/reuse.yml
    with:
      environment: Development
    secrets:
      PASSWORD: ${{ secrets.PASSWORD }}
      
  deploy_prod:
    name: Deploy to Prod
    needs: deploy_dev
    uses: ./.github/workflows/reuse.yml
    with:
      environment: UAT
    secrets:
      PASSWORD: ${{ secrets.PASSWORD }}

而且,被调用的可重用工作流是:

name: Called Workflow

on:
  workflow_call:
    inputs:
      environment:
        type: string
        description: environment to deploy to
        required: true
    secrets:
      PASSWORD:
        required: true

jobs:
  deploy:
    name: Deploy to ${{ inputs.environment }}
    runs-on: ubuntu-latest
    environment: ${{ inputs.environment }}
    
    steps:
    - name: Dump Password
      run: |
        echo Password is $PASSWORD
        if [[ $PASSWORD == *"password"* ]]; then
          echo "This is the UAT password!"
        else
          echo "This is NOT the UAT password!"
        fi
      env:
        PASSWORD: ${{ secrets.PASSWORD }}

除了学习将环境作为参数传递的知识,我还想提醒大家,对于检查方法来说,简单的工作流程是最好的选择。
谢谢!

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