将 maven repo 部署到 Gitlab

为什么要将 maven repo 部署到 Gitlab

  1. 将 Maven artifacts 放在对应的项目仓库下,而不是专门再去建一个 Maven 仓库。这么做使用起来更方便,更易于管理。

  2. 借助 Gitlab CI/CD 自动部署 Maven artifacts,减少人力投入和不必要的人为错误。

最小版本要求

  • Java:11.0.5+
  • Maven:3.6+
  • Gitlab:11.3+

构建步骤

Gitlab 设置

首先你需要创建一个 Gitlab 项目,或者你应该是一个已有项目的管理员。

当你创建好项目之后,你应该能在侧栏看到 Packages & Registries。如果没有这个选项,你需要联系你的 Gitlab 管理员开启此选项。

Packages & Registries

你需要在项目设置 Settings > Access Tokens 中设置项目令牌,注意 Scopes 应该要选择 api。当你点击 Create project access token 之后,Gitlab 会为你生成一个令牌,你必须小心谨慎地将它保存起来,因为这个页面刷新之后你就再也无法看到这个 token 了。

在项目设置 Settings > CI/CD > Runners 中你可以看到注册 Runner 时需要用到的 URL 与 Token。

image-20210414112813885

此外,强烈推荐Settings > CI/CD > Variables 中设置 PRIVATE_TOKEN、CI_SERVER_URL、CI_PROJECT_ID 三个变量,这些变量在后面的项目设置中会有很大的用处。其中 CI_PROJECT_ID 可以在 Project overview > details 中找到。

project id

构建 Gitlab Runner

构建 Runner,你需要另外一台主机/虚拟机。

构建 Runner 有多种方式,我这边采用 Docker 方式。

为了保存 register 的配置,我挂载了一个 volume:/srv/gitlab-runner/config

$ docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=9 revision=54944146 version=13.10.0
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
这里填写上一步得到的 URL
Enter the registration token:
这里填写上一步得到的 Token
Enter a description for the runner:
[5edf4287b599]: 这里填写 runner 的名称
Enter tags for the runner (comma-separated):
这里填写 tags,只有在 CI/CD 中指定了 tag,才会用到这个 runner
Registering runner... succeeded                     runner=r59ARoTS
Enter an executor: custom, docker-ssh+machine, ssh, virtualbox, docker+machine, kubernetes, docker, docker-ssh, parallels, shell:
这里填写 executor
Enter the default Docker image (for example, ruby:2.6):
这里填写默认的 Docker 镜像
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

$ docker run -d --name gitlab-runner --restart always \
     -v /srv/gitlab-runner/config:/etc/gitlab-runner \
     -v /var/run/docker.sock:/var/run/docker.sock \
     gitlab/gitlab-runner
# 这里挂载的 volume 需要与 register 的相同

其他构建方式可以查看官方文档:

https://docs.gitlab.com/runner/install/docker.html#register-the-runner

https://docs.gitlab.com/runner/register/index.html#docker

项目配置

pom.xml

你需要在项目的 pom.xml 文件中引入以下内容,其中 ${env.CI_SERVER_URL}${env.CI_PROJECT_ID}是上一步添加的变量,这也正是它的作用之处。放在 Gitlab 中设置而非直接写死在项目文件中,有更好的通用性和安全性。

	<repositories>
		<repository>
			<id>your-server-id</id>
			<url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
		</repository>
	</repositories>

	<distributionManagement>
		<repository>
			<id>your-server-id</id>
			<url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
		</repository>
		<snapshotRepository>
			<id>your-server-id</id>
			<url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
		</snapshotRepository>
	</distributionManagement>

ci_settings.xml

此文件放在项目的根目录下,用于指定 Maven 的配置。其中 id 需要与 pom.xml 中的 id 对应,name 必须为 Private-Token,value 我们已经配置在 Gitlab 仓库的变量中了。

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <servers>
        <server>
            <id>your-server-id</id>
            <configuration>
                <httpHeaders>
                    <property>
                        <name>Private-Token</name>
                        <value>${env.PRIVATE_TOKEN}</value>
                    </property>
                </httpHeaders>
            </configuration>
        </server>
    </servers>
</settings>

.gitlab-ci.yml

此文件放在项目的根目录下,用于指定 CI/CD 相关的配置。如果你在构建 Runner 的时候指定了 tags,那么你需要在此处指定对应的 tag,否则 CI/CD 无法在这个 Runner 上运行。

deploy:
  image: maven:3.6.3-jdk-11
  variables:
    CMD: |
      mvn deploy -s ci_settings.xml
  script:
    - bash -c "${CMD}"
  only:
    - master

Gitlab 官方 CI/CD 文档:https://docs.gitlab.com/ee/ci/

如何发布

只要 master 分支发生改变,CI/CD 会自动部署到 Gitlab Maven Repo。

在 Packages & Registries > Package Registry 中,就可以看到我们发布的 Package 了。

Package Registry

点击对应的 Package 有详细的使用说明。

参考文档:

https://docs.gitlab.com/ee/user/packages/maven_repository/index.html

https://docs.gitlab.com/runner/install/docker.html#register-the-runner

https://docs.gitlab.com/runner/register/index.html#docker

版权声明:本文为wuyukangkang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wuyukangkang/p/maven-repo-git.html