You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个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即可完成分环境发布,无需拆分多个作业。

具体步骤:

  1. 配置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>
  1. 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
    

额外提示

  • 生产环境通常不允许发布快照版本,所以生产Profile中可以只配置release仓库。
  • 为避免误操作,生产发布建议添加手动确认环节(如CI系统的手动触发、审批流程)。

内容的提问来源于stack exchange,提问作者Hangul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:40:44