如何基于两个Artifactory实例搭建CICD构建并实现分环境制品发布
配置多环境Artifactory发布的解决方案
一、在同一个pom.xml中配置多Artifactory仓库
完全可以通过Maven的Profile机制在单个pom.xml中配置两套Artifactory仓库信息,实现生产/非生产环境的隔离。核心思路是为每个环境定义独立的Profile,在Profile中配置对应的distributionManagement信息。
示例pom.xml配置片段:
<profiles> <!-- 非生产环境Profile --> <profile> <id>non-prod</id> <activation> <!-- 可选:默认激活非生产,避免本地构建误发生产 --> <activeByDefault>true</activeByDefault> </activation> <distributionManagement> <repository> <id>artifactory-non-prod-release</id> <url>https://non-prod-artifactory.example.com/libs-release-local</url> </repository> <snapshotRepository> <id>artifactory-non-prod-snapshot</id> <url>https://non-prod-artifactory.example.com/libs-snapshot-local</url> </snapshotRepository> </distributionManagement> </profile> <!-- 生产环境Profile --> <profile> <id>prod</id> <distributionManagement> <repository> <id>artifactory-prod-release</id> <url>https://prod-artifactory.example.com/libs-release-local</url> </repository> </distributionManagement> </profile> </profiles>
注意:每个仓库的id需要和Maven settings.xml中<servers>节点的id一一对应,用于配置Artifactory的认证凭证(用户名、密码或API密钥)。
二、单个CI作业中实现分环境发布
在CI作业中,只需根据触发条件(如分支、标签、手动参数)动态激活对应的Maven Profile即可完成分环境发布,无需拆分多个作业。
具体步骤:
- 配置CI环境的Maven凭证:在CI系统(如GitLab CI、Jenkins)中配置两个环境变量,分别存储生产和非生产Artifactory的认证信息,然后注入到Maven的
settings.xml中。示例settings.xml模板:
<settings> <servers> <server> <id>artifactory-non-prod-release</id> <username>${env.NON_PROD_ARTIFACTORY_USER}</username> <password>${env.NON_PROD_ARTIFACTORY_PWD}</password> </server> <server> <id>artifactory-non-prod-snapshot</id> <username>${env.NON_PROD_ARTIFACTORY_USER}</username> <password>${env.NON_PROD_ARTIFACTORY_PWD}</password> </server> <server> <id>artifactory-prod-release</id> <username>${env.PROD_ARTIFACTORY_USER}</username> <password>${env.PROD_ARTIFACTORY_PWD}</password> </server> </servers> </settings>
CI作业逻辑:根据触发源判断要激活的Profile,执行对应的Maven命令:
- 当触发非生产发布(如开发分支推送、MR验证):
mvn clean deploy -P non-prod -s path/to/settings.xml - 当触发生产发布(如主分支合并、生产标签推送):
mvn clean deploy -P prod -s path/to/settings.xml
以GitLab CI为例,作业配置片段:
deploy: script: - | if [ "$CI_COMMIT_BRANCH" = "main" ]; then mvn clean deploy -P prod -s settings.xml else mvn clean deploy -P non-prod -s settings.xml fi rules: - if: $CI_COMMIT_BRANCH- 当触发非生产发布(如开发分支推送、MR验证):
额外提示
- 生产环境通常不允许发布快照版本,所以生产Profile中可以只配置release仓库。
- 为避免误操作,生产发布建议添加手动确认环节(如CI系统的手动触发、审批流程)。
内容的提问来源于stack exchange,提问作者Hangul
相关产品推荐
相关产品推荐

