使用GitHub Action递增Maven版本时settings.xml配置问题求助
解决GitHub Action「qcastel/github-actions-maven-release」读取自定义settings.xml的问题
核心思路
该Action会自动生成自身的settings.xml覆盖目标目录,要让Maven使用包含CodeArtifact配置的自定义文件,可通过以下两种可靠方式实现:
方式一:通过maven-args强制指定自定义settings.xml路径
- 在你的仓库中创建自定义
settings.xml,包含CodeArtifact的仓库与服务器认证配置(示例如下):
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>your-codeartifact-id</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> </servers> <mirrors> <mirror> <id>your-codeartifact-id</id> <mirrorOf>central</mirrorOf> <url>https://xxxx-xxxx.d.codeartifact.ap-south-1.amazonaws.com/maven/prod/</url> </mirror> </mirrors> <profiles> <profile> <id>codeartifact</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>your-codeartifact-id</id> <url>https://xxxx-xxxx.d.codeartifact.ap-south-1.amazonaws.com/maven/prod/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles> </settings>
- 在GitHub Action流程中,先将该文件复制到Runner的可访问路径,再在
maven-args中添加-s参数指定自定义文件路径:
- name: 复制自定义settings.xml run: cp ./path/to/your/custom-settings.xml /home/runner/custom-settings.xml - name: Increment release version uses: qcastel/github-actions-maven-release@master env: JAVA_HOME: /usr/lib/jvm/java-11-openjdk/ CODEARTIFACT_AUTH_TOKEN: ${{ secrets.CODEARTIFACT_AUTH_TOKEN }} with: ssh-private-key: ${{ secrets.GIT_ACTION_DEPLOY_SSH_PK }} skip-perform: true version-patch: true release-branch-name: "ET-1027_Package_Versioning" maven-args: "-s /home/runner/custom-settings.xml -Dmaven.repo.url=https://xxxx-xxxx.d.codeartifact.ap-south-1.amazonaws.com/maven/prod/"
方式二:替换Action生成的settings.xml
由于Action会在指定的m2-home-folder下生成默认settings.xml,可在Action执行后立刻替换为自定义配置:
- name: Increment release version uses: qcastel/github-actions-maven-release@master env: JAVA_HOME: /usr/lib/jvm/java-11-openjdk/ CODEARTIFACT_AUTH_TOKEN: ${{ secrets.CODEARTIFACT_AUTH_TOKEN }} with: ssh-private-key: ${{ secrets.GIT_ACTION_DEPLOY_SSH_PK }} skip-perform: true version-patch: true release-branch-name: "ET-1027_Package_Versioning" maven-servers: '[{"id": "xxxxx", "username": "aws", "password": "${{ secrets.CODEARTIFACT_AUTH_TOKEN }}"}]' m2-home-folder: '/root/.m2' # 明确指定Action使用root用户的.m2目录 - name: 替换为自定义settings.xml run: cp ./path/to/your/custom-settings.xml /root/.m2/settings.xml # 此处可添加后续需要执行的Maven命令(如deploy等)
关键注意事项
- 确保自定义settings.xml中的服务器
id与仓库id完全匹配,Maven会通过id关联认证信息。 - 不要硬编码CodeArtifact的认证token,用GitHub Secrets存储并通过环境变量引用,避免敏感信息泄露。
- 若Action运行在root用户环境下,
m2-home-folder需设置为/root/.m2,否则Action会默认生成到root目录,导致你的配置不生效。
内容的提问来源于stack exchange,提问作者Sahitya Gupta
相关产品推荐
相关产品推荐

