如何让GitHub Actions中的Secrets写入settings.xml?
解决GitHub Actions中Secrets无法写入settings.xml的问题
核心问题分析
你的Workflow使用workflow_call触发,这类被调用的子Workflow默认不会自动继承调用者仓库的Secrets,必须显式定义并传递;另外需要确保Secrets名称完全匹配,且Debug步骤的检查对象与实际使用的Secrets一致。
具体解决步骤
1. 为子Workflow定义Secrets参数
在你的Setup Maven Workflow顶层添加secrets字段,明确声明需要接收的Secrets,这样调用它的父Workflow才能传递对应值:
name: Setup Maven on: workflow_call: # 新增:定义需要接收的Secrets secrets: USERNAME: required: true # 必填,确保调用时必须传递 PASSWORD: required: true REPOSECRETTEST: required: false # 测试用,可选 jobs: setup-maven: runs-on: ubuntu-latest steps: # 修正Debug步骤,检查实际要用的Secrets - name: Debug Secrets run: | if [ -n "${{ secrets.USERNAME }}" ]; then echo "USERNAME is set" else echo "USERNAME is missing" fi if [ -n "${{ secrets.PASSWORD }}" ]; then echo "PASSWORD is set" else echo "PASSWORD is missing" fi - name: Configure Maven settings.xml run: | mkdir -p ~/.m2 cat > ~/.m2/settings.xml <<EOL <settings> <servers> <server> <id>githubauth</id> <username>${{ secrets.USERNAME }}</username> <password>${{ secrets.PASSWORD }}</password> </server> </servers> </settings> EOL - name: Upload settings.xml uses: actions/upload-artifact@v4 with: name: maven-settings path: ~/.m2/settings.xml
2. 在父Workflow中传递Secrets
调用这个Setup Maven Workflow的父Workflow,必须显式传递对应的Secrets:
name: Main Workflow on: [push] jobs: call-setup-maven: uses: ./.github/workflows/setup-maven.yml # 替换为你的子Workflow实际路径 secrets: USERNAME: ${{ secrets.USERNAME }} PASSWORD: ${{ secrets.PASSWORD }} REPOSECRETTEST: ${{ secrets.REPOSECRETTEST }} # 若需要测试则传递
3. 验证Secrets的正确性
- 确认仓库中创建的Secrets名称与Workflow中使用的完全一致(GitHub Secrets区分大小写),比如定义的是
USERNAME就不能写成username。 - 如果使用组织级Secrets,需确保当前仓库已被授权访问该Secrets。
- 若Secrets存储在特定环境中,需在Workflow的
jobs或steps中指定environment字段。
4. 测试验证
重新触发Workflow后,查看Debug步骤的输出,确认USERNAME和PASSWORD都显示为is set,再下载上传的maven-settings artifact,检查settings.xml中是否已正确填充用户名和密码。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

