如何基于GitHub Actions实现带手动输入凭据的多环境部署?
基于GitHub Actions的双环境部署方案(带手动JWT输入)
核心方案:手动触发+输入参数
GitHub Actions支持手动触发时的自定义输入参数,结合环境隔离的可选审批机制,刚好能解决你的需求。具体实现思路如下:
1. 触发逻辑调整
将原有的自动部署改为「代码合并到develop分支时触发通知提醒,由有权限人员手动触发部署并输入JWT」,既满足代码更新后的部署触发需求,又解决了凭据频繁更新、权限受限的问题。
2. 工作流配置示例
创建.github/workflows/deploy.yml文件,内容如下:
name: 双环境部署流程 on: # 代码合并到develop时,仅触发部署提醒 push: branches: [ develop ] # 手动触发时允许输入两个环境的JWT凭据 workflow_dispatch: inputs: dev_jwt: description: 'Dev环境JWT凭据' required: true type: string test_jwt: description: 'Test环境JWT凭据' required: true type: string jobs: # 代码合并后的通知任务 send_deploy_alert: if: github.event_name == 'push' runs-on: ubuntu-latest steps: - name: 创建部署提醒Issue uses: actions/github-script@v6 with: script: | github.rest.issues.create({ owner: context.repo.owner, repo: context.repo.repo, title: 'Develop分支已更新,可触发部署', body: '请前往Actions页面手动触发部署流程,并输入对应环境的JWT凭据' }) # Dev环境部署任务 deploy_to_dev: if: github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest environment: dev # 可选:给Dev环境设置审批人,只有指定人员能确认部署 steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 执行Dev环境部署 run: | # 替换为你的实际部署命令,使用输入的JWT参数 echo "使用Dev JWT: ${{ inputs.dev_jwt }} 执行部署" # 示例:npm run deploy:dev --jwt=${{ inputs.dev_jwt }} # Test环境部署任务 deploy_to_test: if: github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest environment: test steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 执行Test环境部署 run: | echo "使用Test JWT: ${{ inputs.test_jwt }} 执行部署" # 替换为你的实际部署命令 # npm run deploy:test --jwt=${{ inputs.test_jwt }}
3. 关键细节说明
- 安全的参数传递:手动输入的JWT参数会被GitHub自动掩码处理,不会在工作流日志中明文显示,避免泄露风险。
- 环境权限控制:通过
environment字段绑定GitHub环境,可给每个环境设置审批人列表,确保只有指定人员能确认部署,进一步提升安全性。 - 灵活触发机制:代码合并后自动提醒,部署时机由运维/权限人员掌控,适配JWT每日更新的场景。
4. 可选优化方向
如果手动输入仍觉繁琐,可考虑对接内部临时密钥分发工具,在部署步骤中调用工具实时拉取最新JWT,但需确保工具的权限管控和安全性。不过对于每日更新的场景,手动输入反而更直接可控,无需额外维护密钥工具。
内容的提问来源于stack exchange,提问作者Shamus Harkin
相关产品推荐
相关产品推荐

