为什么要将 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 管理员开启此选项。

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

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

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

构建 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 有详细的使用说明。

参考文档:

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

将 maven repo 部署到 Gitlab的更多相关文章

  1. 使用Maven自动部署Tomcat 6和Tomcat 7下Web应用

    使用Maven自动部署Tomcat 6和Tomcat 7下Web应用 开启Tomcat远程管理权限 在tomcat的config目录下的tomcat-users.xml文件, <role rol ...

  2. Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)

    学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用)   做maven开发前提: 1.编码UT ...

  3. eclipse中maven项目部署到tomcat

    其实maven项目部署到tomcat的方式很多,我从一开始的打war包到tomcat/webapps目录,到使用tomcat-maven插件,到直接使用servers部署,一路来走过很多弯路. 下面就 ...

  4. maven 编译部署src/main/java下的资源文件

    maven 编译部署src/main/java下的资源文件 maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到targ ...

  5. maven自动部署到tomcat的问题

    最近需要使用Maven将项目自动部署到Tomcat,在网络上也查找了很多文章,内容大同小异,今天打算在这里给自己做一个小总结 参考网址:http://blog.csdn.net/dilaomimi/a ...

  6. Maven项目搭建(三):Maven直接部署项目

    上一章给大家讲解了如何使用Maven搭建SSM框架项目.   这次给大家介绍一下怎么使用Maven直接部署项目.   Maven直接部署项目  1.新建系统变量CATALINA_HOME,值为:Tom ...

  7. Docker化tomcat 并且使用maven热部署

    今天没事干 就把自己的tomcat  docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...

  8. CentOS7下 Java、Tomcat、MySQL、Maven热部署

    本文介绍了CentOS7 64位下Java.Tomcat.MySQL.Maven热部署等服务器环境的搭建和调试过程. 学生服务器资源获取方法: 云+校园计划 - 腾讯云 阿里云云翼计划 github ...

  9. Maven deploy部署jar包到远程私仓

    Maven deploy部署jar包到远程私仓 maven deploy介绍 maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的 ...

随机推荐

  1. editorconfig、eslint、prettier三者的区别、介绍及使用

    每次搭建新项目都少不了这些工具,但时间一久就忘记了,下次搭新项目时又要四处查官方文档,因此特此记录,主要内容是对这三个工具的理解,以及具体使用方式 editorconfig 理解 先看官网的定义: E ...

  2. 基于MATLAB的手写公式识别(10)

    2公式分割 2.1投影分割法 12:23:00 完成水平和垂直两个方向上的投影 15:32:23 水平投影只投到水平方向的影,垂直投影只投到垂直方向上的影. 16:51:38  17:37:08 终其 ...

  3. 【.NET 与树莓派】数模转换

    在开始之前,需要说明一对很耳熟的概念--数字信号 & 模拟信号. 这些概念的理论有些复杂,你如果相当有兴趣,可以找来有关的文献细细研究:若你不关心那是啥只想知道咋用,那就通俗但不庸俗地理解一下 ...

  4. Review: JQuery

    1.DOM access with jQuery 1 $("h1"); //select all the h1s 2 $("#heading"); // sel ...

  5. 在 Y 分钟内学会 Python

    在 Y 分钟内学会 Python 这是翻译, 原文地址: Learn Python in Y Minutes 在 90 年代初, Python 由 Guido van Rossum 创造, 现在, 它 ...

  6. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  7. Java中的反射机制Reflection

    目录 什么是反射? 获取.class字节码文件对象 获取该.class字节码文件对象的详细信息 通过反射机制执行函数 反射链 反射机制是java的一个非常重要的机制,一些著名的应用框架都使用了此机制, ...

  8. 模板templates的使用

    目录 模板及其渲染 模板查找路径 DTL模板语法 常用的模板标签 DTL常用过滤器 模块结构优化 加载静态文件 模板及其渲染 视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面 ...

  9. Word 通过添加Package 实现word藏毒

    这个思路要结合近期在一些安全网站上公布的姿势来实现,先科普几个地方. (1)通过cmd本身就可以直接下载: Bitsadmin /transfer AA /download /priority nor ...

  10. C#-CHTTPDownload

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...