为什么要将 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. Magicodes.IE.ASPNETCore之多样化接口使用

    1.安装包 Install-Package Magicodes.IE.AspNetCore 2.开始配置 在Startup.cs的Configure()方法中,在UseRouting()中间件之后,注 ...

  2. .NET6 平台系列4 .NET开源之路

    系列目录     [已更新最新开发文章,点击查看详细] .NET平台是微软于2000年推出的Windows操作系统的应用软件开发框架,发展至今形成巨大的技术栈,涉及多语言(支持C#.F#.VB.NET ...

  3. IOS Widget(1):概述

    引言   本系列文章作者是安卓开发,以安卓开发的视角学习IOS小组件,记录一下踩坑记录,如有讲得不对的地方,路过大佬多包涵.如果你是想深入学习小组件,建议您顺着笔者的编号顺序阅读本系列文章.如果曾经了 ...

  4. ASP.NET Core 存储session取不到值

    该项目是一个mvc项目,我使用session存储登录后的用户信息,然后发现登录信息存储到session正常,这个时候立马去获取也正常 但是如果我跳转到首页后,再去获取session信息,发现sessi ...

  5. hdu2438 三分

    题意:       给你个90度的转弯,和一辆标准矩形的车,问你这台车能不能拐过去.. 思路:      求出靠近最里侧的那条边所在的直线(这个图形右下角为坐标原点)       y = x * ta ...

  6. Windows Server中企业证书服务的安装

    目录 企业证书服务的安装 证书服务的应用 企业证书服务的安装 企业证书服务是基于域的,所以需要该服务器是域控服务器. 添加角色,勾选 Active Directory 证书服务 然后后面的一直下一步, ...

  7. 【】POST、GET、RequestParam、ReqestBody、FormData、request payLoad简单认知

    背景: 使用vue+axios方式代替ajax后向后台发送数据出现问题了,controller获取不到数据.然后查.找.查.找中似乎找到一些门道.以下列出总结性的东西来记录自己的思考成果,仅供参考,不 ...

  8. CDH安装步骤

    Six Steps to CDH Installation There are many options and potential paths that make each CDH cluster ...

  9. window 10 删除文件夹需要管理员权限

    如果设了当前的账号有权限删除了, 还是显示删除里管理员则需要改: 按Win+R组合键,输入gpedit.msc点击确定: 在窗口边依次打开计算机配置--Windows设置--安全设置--本地策略--安 ...

  10. 使用FastDFS进行文件管理

    使用FastDFS进行文件管理 FastDFS简介 FastDFS: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等, ...