通过GitLab CI/CD发布maven项目到私有仓库

简介

本文将介绍如何通过GitLab CI/CD自动构建、测试maven项目并将它打包发布到maven私有仓库,并在此过程中可能会遇到的问题做一个汇总

本文假设已经在gitlab上准备了一个maven项目

操作步骤

  1. 配置环境变量
  2. 配置仓库地址
  3. 配置仓库账号
  4. 配置CI文件
  5. 运行流水线

详细步骤

配置环境变量

MAVEN仓库信息属于敏感信息,不应该直接写在项目代码里面,应该通过GitLab变量进行配置,可以保护这些敏感信息不会泄露

转到项目设置>CI/CD>变量,添加以下变量

MAVEN私有仓库配置信息

NEXUS_REPO_USERNAME: 私有仓库账号
NEXUS_REPO_PASSWORD: 私有仓库密码
NEXUS_REPO_RELEASES_URL: release仓库地址
NEXUS_REPO_SNAPSHOTS_URL: snapshot仓库地址

配置仓库地址

编辑项目配置文件,添加配置

    
        
            my-releases
            ${env.NEXUS_REPO_RELEASES_URL}
        
        
            my-snapshots
            ${env.NEXUS_REPO_SNAPSHOTS_URL}
        
    

配置仓库账号

在仓库的根目录下创建maven配置文件.m2/settings.xml,内容如下

 
   
     
       my-releases
       ${env.NEXUS_REPO_USERNAME}
       ${env.NEXUS_REPO_PASSWORD}
     
     
       my-snapshots
       ${env.NEXUS_REPO_USERNAME}
       ${env.NEXUS_REPO_PASSWORD}
     
   
 

配置CI文件

在仓库根目录下新建GitLab CI的配置文件,可参考如下内容

# define docker image when run job
image: maven:3.3.9-jdk-8

# define job variables at job level
variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

# define list of files that should be cached
cache:
  paths:
  - .m2/repository/
  - target/

# defines a job stage(default: test)
stages:
- build
- package
- deploy

# define build job
build:
  stage: build
  script:
  - echo "======== start build ========"
  - mvn $MAVEN_CLI_OPTS compile

# define package job
package:
  stage: package
  script:
  - echo "======== start package ========"
  - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true package

# define deploy job
deploy:
  stage: deploy
  script:
  - echo "======== start deploy ========"
  - mvn $MAVEN_CLI_OPTS deploy
  only:
  - master

运行流水线

每次提交代码都会自动运行流水线,也可以手工运行

转到项目CI/CD>流水线,点击运行流水线,然后等待运行结果

查看流水线运行状态与结果

也可以点开Stages查看运行日志

job运行日志

运行成功以后可以确认一下项目是不是已经发布到自己的私有仓库了

问题汇总

不发布某个模块

在对应模块pom文件中的properties节点中将maven.deploy.skip配置为true

  
    true
  

参考资料

.gitlab-ci.yml配置

你可能感兴趣的:(通过GitLab CI/CD发布maven项目到私有仓库)