如何在GitHub Actions YAML中按环境(dev/uat/prd)设置非密钥参数
在GitHub Actions中按环境设置参数并传入构建命令
你可以通过写入全局环境变量或设置输出变量的方式,基于环境条件配置参数,且无需使用环境密钥。这些参数明文存储在YAML中,开发者可直接修改,完全满足你的需求。
问题分析
你之前的写法中,每个step的env仅对当前step的run命令生效,后续step无法读取到ans的值。因此需要将参数设置为全局可用的变量。
方案一:写入全局环境变量(推荐)
通过echo "VAR=value" >> $GITHUB_ENV将参数写入GitHub Actions的全局环境,后续所有step都能直接调用该变量。
# 第一步:根据环境设置全局参数 - name: Set environment-specific parameters run: | case "${{ github.event.inputs.environment }}" in dev) echo "ans=20" >> $GITHUB_ENV ;; uat) echo "ans=30" >> $GITHUB_ENV ;; prd) echo "ans=40" >> $GITHUB_ENV ;; *) echo "ans=10" >> $GITHUB_ENV # 可选:设置默认值 ;; esac # 第二步:在构建命令中使用参数 - name: Run build with environment parameter run: | # 替换为你的实际构建命令,例如前端项目的npm构建 npm run build -- --custom-param=$ans # 验证参数是否生效 echo "Build completed with ans=$ans"
方案二:使用多step+if条件(贴近你的初始思路)
如果你更倾向于用多个带if的step来分别设置参数,只需将参数写入全局环境即可:
- name: Set dev parameters if: ${{ github.event.inputs.environment == 'dev' }} run: echo "ans=20" >> $GITHUB_ENV - name: Set uat parameters if: ${{ github.event.inputs.environment == 'uat' }} run: echo "ans=30" >> $GITHUB_ENV - name: Set prd parameters if: ${{ github.event.inputs.environment == 'prd' }} run: echo "ans=40" >> $GITHUB_ENV - name: Set default parameters if: ${{ !contains(fromJSON('["dev", "uat", "prd"]'), github.event.inputs.environment) }} run: echo "ans=10" >> $GITHUB_ENV # 构建step调用参数 - name: Run build run: | echo "Using parameter ans=$ans in build" # 实际构建命令示例 yarn build --env ans=$ans
方案三:使用输出变量(跨step/job传递)
如果需要在跨job的场景中传递参数,可以使用输出变量:
- name: Set parameter output id: set_param run: | case "${{ github.event.inputs.environment }}" in dev) echo "ans=20" >> $GITHUB_OUTPUT ;; uat) echo "ans=30" >> $GITHUB_OUTPUT ;; prd) echo "ans=40" >> $GITHUB_OUTPUT ;; *) echo "ans=10" >> $GITHUB_OUTPUT ;; esac - name: Run build with output parameter run: | # 通过steps.set_param.outputs.ans获取参数 npm run build -- --ans=${{ steps.set_param.outputs.ans }}
以上三种方式都无需使用环境密钥,参数明文存储在YAML文件中,开发者可直接修改调整。
内容的提问来源于stack exchange,提问作者user12358212
相关产品推荐
相关产品推荐

