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

Wol*_*ang 5 github-actions

我想找到一种方法将环境:语句从可重用工作流程移动到调用工作流程。可重用工作流程的开始是:

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

调用流程为:

name: Deployment TF Reuse
on:  
  workflow_dispatch:
jobs:
  walm:
    uses: ./.github/workflows/reuse-terraform.yml
    with:
      working-folder: r3us-walm
Run Code Online (Sandbox Code Playgroud)

无论我尝试将环境:开发行放在调用工作流程中的何处,它都会使解析步骤失败。

如果我能找到一种方法来像这样获取它们,我不介意将这 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 }}    
Run Code Online (Sandbox Code Playgroud)

Wol*_*ang 5

在这篇精彩文章和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 }}
Run Code Online (Sandbox Code Playgroud)

并且,所谓的可重用工作流程是:

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

除了学习如何将环境作为参数传递之外,我还记得简单的小工作流程最适合检查方法。

谢谢!