当前位置:首页 > 技术分析 > 正文内容

Jenkins自动化部署集成了docker-maven插件的多模块项目

Jenkins自动化部署环境搭建

本文的目的是将多模块的项目利用 jenkins 实现自动化的部署,再将代码推送到 gitlab 时,jenkins 通过轮询的方式查看 gitlab 的代码是否有变化,有变化则拉取仓库的代码,使用 maven 打包,而我的项目的各个子模块又集成了 docker-mavne 插件,会将各模块的服务打包为 docker 镜像推送到服务器,在服务器编写好对应 docker-compose.yml 编排文件启动项目,所以 jenkind 需要在 maven 打包完成后,向服务器发送编排启动项目的命令,即可达到自动化部署项目的目的

1.拉取镜像

有很多的 jenkins 镜像,我们选择 jdk8 这一个

docker pull jenkins/jenkins:latest-jdk8

2.准备 maven 和 jdk

自行前往官网下载对应的版本,这里采用的是 maven3.6.3 和 jdk8

3.编写编排文件

准备一个目录放置挂载文件和 docker-compose.yml 文件

新建一个名为
hudson.model.UpdateCenter.xml 的文件,填入以下内容

<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<!-- 清华大学的Jenkins插件 镜像地址 -->
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>

新建 docker-compose.yml 文件

version: '3'
services:
docker_jenkins:
user: root
restart: always
image: jenkins/jenkins:latest-jdk8
container_name: jenkins
ports:
- 8080:8080
- 5000:5000
volumes:
- /etc/localtime:/etc/localtime # 挂载位置(镜像和宿主机器之间时间保持一致)
- ./jenkins_home:/var/jenkins_home
# 挂载maven,按自己的需求修改maven的配置文件,配置仓库地址和本地仓库存储地址
- ./apache-maven-3.6.3:/var/jenkins_home/maven
# 挂载 jdk8
- ./jdk1.8.0_202:/var/jenkins_home/jdk8
- ./jenkinsci:/usr/jenkinsci
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
# 挂载出生成的密钥
- ./ssh:/root/.ssh
# 如果容器无法解析域名,则需要将容器的网络模式修改为 host 模式

启动项目:docker-compose up -d

4.初始化 Jenkins

1.第一次登录需要在服务模块下获取密码,因为已经将 jenkins_home 目录挂载出来了,直接去对应的目录下找即可。

第一次登录需要在服务模块下获取密码,因为已经将 jenkins_home 目录挂载出来了,直接去对应的目录下找即可。

2.选择安装推荐的插件

3.创建一个账户

4.进入管理界面

5.安装插件

这里主要安装 Maven Integration 和 publish over ssh 插件

系统管理 -> 插件管理 -> 可选插件 搜索这两个插件下载即可

6.配置 maven 环境和 jdk 环境

进入 系统管理 -> 全局工具配置

配置 maven,新增maven,配置 maven_home

配置 settings 所在的路径

7.配置 jdk

8.配置 Publish over SSH,增加一个 ssh server,方便使用 ssh 连接服务器执行一些命令,或者传输文件

.5.gitlab配置ssh

安装 gitlab 插件

系统管理 -> 插件管理 -> 可选插件 搜索 gitlab

2.登录到jenkins服务器,生成秘钥,进入 jenkins 容器内部执行命令

# 生成密钥
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# 查看公钥
cat /root/.ssh/id_rsa.pub

1.登录到 gitlab 添加 ssh keys

点击头像 -> settings -> SSH Keys id_rsa.pub 复制到网页框中

2.创建 Access Token

点击头像 -> settings -> Access Token

复制这个令牌保存起来,作为之后的访问 gitlab 的令牌

5.jenkins 配置 gitlab 登录

系统管理 -> 系统设置 -> gitlab

添加登录凭据,api token 就是在 gitlab 创建的 Access Token

测试连接是否成功,成功之后点击保存即可

6.git plugins 配置

系统管理 -> 系统设置 -> git plugin 配置姓名和邮箱

7.新建任务

首页 -> 新建任务 -> 构建一个 maven 项目

在源码管理中选择 Git,复制仓库的 ssh 连接地址,此时提示无法连接仓库,点击添加

类型选择 SSH Username with private key,Username 填 root,PrivateKey 选择Enter directly,点击add 登录到 jenkins 服务器查看私钥,挂载了 .ssh目录出来,在 ssh 下,查看 id_rsa 的文件内容

cat ssh/id_rsa

将私钥内容复制的网页上面,点击添加

在“credentials”里选择我们刚刚创建的认证方式:root

kins job默认对master分支进行构建,也可以自定义分支。

配置 Job 的构建触发器

选择“构建触发器”,勾选“Pull SCM”,这个选项会每隔一段时间检查一下GitLab仓库中代码是否有更新,有的话就执行构建操作。日程表如何设置,在这个输入框下面有说明,轮询的时间还可以再缩短一点,比如 10s、半分钟、一分钟之类的

常见构建触发器:

  • Build after other projects are built 当另一个构建任务完成之后触发
  • Build periodically 周期性的触发
  • Build when a change is pushed to GitLab. GitLab CI Service 当代码有更新的时候触发,通过GitLab CI
  • GitHub hook trigger for GITScm polling 通过Github钩子触发
  • Poll SCM 定期检查代码有无更新,在更新时间触发

配置 maven 的 pom 文件位置

我这里是多模块的项目,配置父模块 pom 文件所在位置

构建后执行远程shell命令

选择ssh服务,配置执行的编排命令

我这里的项目是多模块的工程,然后每个子模块集成了 docker-maven 插件,会将每个服务的 jar 打包成镜像推送到服务器,在服务中编写对应的 docker-compose.yml 文件编排每个项目的容器,所以我这里在 jenkins 调用 maven 打包好项目之后,使用 ssh 连接服务器切换到对应的目录执行编排命令,即可启动服务,不同的部署方式可灵活变通,这里只是演示本项目所使用的一种方式。

# 登录服务器,执行docker-compose编排命令
cd /data/docker/farmland-chief-server
docker-compose stop
docker-compose rm -f
docker-compose up -d
docker rmi $(docker images | grep "none" | awk '{print $3}')

由于是父模块 pom 进行打包的,子模块要依据父模块 pom 的位置配置 dockerfile 所在的位置

点击执行构建任务

可以查看构建项目的控制台输出,输出 maven 打包的日志

原文链接:
https://blog.51cto.com/u_15506582/5436681

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4024.html

分享给朋友:

“Jenkins自动化部署集成了docker-maven插件的多模块项目” 的相关文章

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

Vue中路由router的基本使用

??本文开始我们来给大家介绍在Vue中非常重要的一个内容,就是路由Router什么是路由后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特...

前端路由简介以及vue-router实现原理

作者:muwoo 来源:https://zhuanlan.zhihu.com/p/37730038后端路由简介路由这个概念最先是后端出现的。在以前用模板引擎开发页面时,经常会看到这样http://www.xxx.com/login 大致流程可以看成这样:浏览器发出请求服务器监听到80 端口(或443...

SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

//xia仔のke:chaoxingit.com/208/全栈开发医疗小程序:利用Spring Boot 2.X、Vue和UniApp在当今数字化时代,医疗行业也在不断地迈向信息化和智能化的方向。开发一款医疗小程序,能够为用户提供便捷的医疗服务和信息查询,为医疗机构提供高效的管理和服务渠道。本文将介...

thinkphp8+vue3微信小程序商城,发布公众号App+SAAS+多商户

项目介绍三勾小程序商城基于thinkphp8+vue3+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。支持主题色+自定义头部导航+自定义...