简介
本文将介绍如何通过GitLab CI/CD自动构建、测试maven项目并将它打包发布到maven私有仓库,并在此过程中可能会遇到的问题做一个汇总
本文假设已经在gitlab上准备了一个maven项目
操作步骤
- 配置环境变量
- 配置仓库地址
- 配置仓库账号
- 配置CI文件
- 运行流水线
详细步骤
配置环境变量
MAVEN仓库信息属于敏感信息,不应该直接写在项目代码里面,应该通过GitLab变量进行配置,可以保护这些敏感信息不会泄露
转到项目设置>CI/CD>变量,添加以下变量
NEXUS_REPO_USERNAME: 私有仓库账号
NEXUS_REPO_PASSWORD: 私有仓库密码
NEXUS_REPO_RELEASES_URL: release仓库地址
NEXUS_REPO_SNAPSHOTS_URL: snapshot仓库地址
配置仓库地址
编辑项目配置文件,添加配置
<distributionManagement>
<repository>
<id>my-releases</id>
<url>${env.NEXUS_REPO_RELEASES_URL}</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>${env.NEXUS_REPO_SNAPSHOTS_URL}</url>
</snapshotRepository>
</distributionManagement>
配置仓库账号
在仓库的根目录下创建maven配置文件.m2/settings.xml,内容如下
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"
xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<server>
<id>my-releases</id>
<username>${env.NEXUS_REPO_USERNAME}</username>
<password>${env.NEXUS_REPO_PASSWORD}</password>
</server>
<server>
<id>my-snapshots</id>
<username>${env.NEXUS_REPO_USERNAME}</username>
<password>${env.NEXUS_REPO_PASSWORD}</password>
</server>
</servers>
</settings>
配置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查看运行日志
运行成功以后可以确认一下项目是不是已经发布到自己的私有仓库了
问题汇总
不发布某个模块
在对应模块pom文件中的properties节点中将maven.deploy.skip配置为true
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>