【问题标题】:Use two different GitHub environment secrets in single action在单个操作中使用两个不同的 GitHub 环境机密
【发布时间】:2021-02-25 19:01:54
【问题描述】:

例如,我已经为登台和制作创建了 GitHub Environment Secrets

Enviroment > Production  > DB_PASS

Enviroment > Staging  > DB_PASS

在我的工作流程中

on:
 push:
    branches:
      - main
      - staging
jobs:
  deploy:
    environment: Production 
    name: Deploy
    runs-on: ubuntu-latest
    steps:
    - name: Debug Secret 
      run: echo ${{ secrets.DB_PASS}}

当分支合并正在暂存时,我如何将环境更改为暂存,可能是通过使用 gihub.ref 为分支名称。我尝试使用needs.job1.outputs.output1 将上一个作业中的值动态传递给environment,但没有成功。

我发现 Stackoverflow 上的一些开发人员建议在秘密名称中使用前缀 喜欢

  • PROD_DB_PASS
  • STG_DB_PASS

但是有没有更好更清洁的方法来做到这一点?

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    就像你提到的那样,github.ref 可能是最好的方法。

    on:
     push:
        branches:
          - main
          - staging
    jobs:
      deploy-production:
        environment: Production 
        name: Deploy production
        runs-on: ubuntu-latest
        if: ${{ github.ref == 'refs/heads/main' }}
        steps:
          - name: Debug Secret 
            run: echo ${{ secrets.DB_PASS }}
    
      deploy-staging:
        environment: Staging 
        name: Deploy staging
        runs-on: ubuntu-latest
        if: ${{ github.ref == 'refs/heads/staging' }}
        steps:
          - name: Debug Secret 
            run: echo ${{ secrets.DB_PASS }}
    

    同意有很多重复的代码,但我认为它比根据以前的工作动态传递环境更简单、更清晰、更可靠。

    【讨论】:

    • 没问题。的确,尽管文档质量很高,但仍有许多高级可能性需要在行之间阅读。
    • 是的,这就是我所说的“根据以前的工作动态传递环境”的意思。无论如何,它几乎是等效的,您可以选择对您更有意义的任何一个。如果你需要更高级的模式我最近开始了一个小项目github.com/benjamin-bergia/github-workflow-patterns
    • 谢谢! @ITChap 对我来说唯一的问题是,当我动态传递值时,它不适用于单一语法,即环境:{{ needs.getenv.outputs.env }},它仅在我使用对象语法时才有效,即环境:名称:{{需要.getenv.outputs.env }}。我不确定这背后的原因是什么,或者它可能是一个错误。
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2021-12-28
    • 2022-10-25
    • 1970-01-01
    • 2022-11-10
    • 2022-01-24
    相关资源
    最近更新 更多