【Jenkins + gitlab + maven 自动打包部署项目】

Jenkins + gitlab + maven 自动打包部署项目

有时候采用本地手动打包,再通过ssh传到服务器部署运行,这种方式对于单应用部署还算可以,不会耗费太大时间,但假如分布式项目,拆分为多个微服务部署,那么每个服务都打包部署一遍,发布上线可能会耗时非常久,Jenkins + gitlab + maven 可以实现自动打包,部署到远程服务器~

什么是gitlab?

程序员肯定都懂的,跟gayhub一样的东西,可以在内网自己搭建一套来管理项目代码。

什么是Jenkins?

可以简单地理解为可以代替你实现自动从gitlab拉取代码,打包,部署到远程服务器的工具。

环境准备

Centos7 64位,内核版本不低于 3.10
安装 docker ,具体参考 这是一次 docker 入门实践
使用docker安装gitlab

gitlab的安装这里不做过多记录,可以参考以下内容:

https://www.cnblogs.com/zuxing/articles/9329152.html
https://hub.docker.com/r/beginor/gitlab-ce/
使用docker安装Jenkins

1docker run --name jenkins --privileged=true -d -v /home/docker/data/jenkins_home:/var/jenkins_home -p 8090:8080 -p 50000:50000 jenkins/jenkins:lts

参数解析:

–name jenkins:指定 Jenkins 容器名称
–privileged=true:防止docker容器没有权限
-d:容器在后台启动
-v /home/docker/data/jenkins_home:/var/jenkins_home:将容器的/var/jenkins_home 映射到本机的/home/docker/data/jenkins_home目录,为了便于管理Jenkins容器的数据,需要注意的是,挂载出来的目录允许我们往容器里面添加文件或者目录,也就是在/home/docker/data/jenkins_home:/var/jenkins_home中添加的文件或者目录都会被映射到容器目录/var/jenkins_home,那么我们最终在Jenkins中配置软件环境时应当使用容器目录路径,因为Jenkins实际上是在容器中跑的,比如JDK家目录,你放在/home/docker/data/jenkins_home/jdk_home,那么最终配置应当写成/var/jenkins_home/jdk_home
-p 8090:8080 -p 50000:50000:将容器的8080端口映射到本机的8090端口,5000端口映射为5000端口
jenkins/jenkins:lts:指定镜像名称跟 tag
可能会踩的坑:

1chmod 777 /home/docker/data/jenkins_home 2chown -R 1000 /home/docker/data/jenkins_home

至此,Jenkins已经部署好了,然而….折腾才刚刚开始…

Jenkins基础配置

访问http://192.168.2.219:8090打开Jenkins首页如下图:

按照界面提示,为了管理员安全地设置Jenkins,已将密码写入日志文件:/var/jenkins_home/secrets/initialAdminPassword,提示写的是Jenkins容器中的文件,映射到本机文件则是/home/docker/data/jenkins_home/secrets/initialAdminPassword,复制文件中的文本,输入,点击继续…滴滴滴~掉坑里了。

如果不出意外的话,这里有个坑,上一步之后会一直卡在如下图所示的加载界面:

这是怎么肥事? 原来Jenkins在启动的时候,请求Google,检查当前机器是否可以联网,在请求/home/docker/data/jenkins_home/updates/default.json 中存在如下数据:

而由于天朝的网络原因,请求Google失败,则一直卡住,解决办法是修改为www.baidu.com即可解决。

创建管理员账号

配置Jenkins 资源 url,使用默认即可

至此,Jenkins 基础配置完成,开始使用。随后登录Jenkins后发现页面空白,没找到具体原因,重启下Jenkins 容器后再登录就好了。

Jenkins插件安装

Jenkins插件安装的步骤为:系统管理–>插件管理… 相信聪明的你一定知道怎么安装了。我们需要安装的插件如下:

Maven项目插件:Maven Integration plugin,这个插件可以让我们创建一个maven构建任务
ssh传输工具插件:Publish Over SSH 项目打包完成后,使用这个插件,通过ssh的方式传输到远程服务器
Gitlab插件:允许Jenkins访问gitlab服务器,拉取代码
全局工具配置

系统管理–>全局工具配置,安装一些打包必须的配置环境,如 jdk,maven,git,maven

安装git客户端:

下载
1#下载 git 2yum update 3yum install git 4 5# 配置用于拉取gitlab代码的用户名和邮箱 6git config --global user.name “yourname” 7git config --global user.email “youremail”
配置公钥
生成ssh秘钥, 首先查看是否已经有ssh秘钥:

1cd ~/.ssh`

如果没有则提示没有此文件夹, 此时手动生成秘钥:

1ssh-keygen -t rsa -C “youremail”

连续按三次回车,生成id_rsa和id_rsa.pub文件夹,查看公钥文件内容:cat id_rsa.pub,复制公钥到gitlab配置ssh key.

测试
1ssh -T git@192.168.2.219
如下结果表示配置成功:

1The authenticity of host ‘192.168.2.210 (192.168.2.210)’ can’t be established. 2RSA key fingerprint is SHA256:7oKBkxcwp5naXUzohvjPwEJsow6Y/pF1fSpWFZPVscA. 3RSA key fingerprint is MD5:9c:a1:39:7c:2c:6c:d0:a2:4b:e8:8d:3a:73:6e:c9:c1. 4Are you sure you want to continue connecting (yes/no)? yes 5Warning: Permanently added ‘192.168.2.210’ (RSA) to the list of known hosts. 6Welcome to GitLab, jenkins_easywits! 7

最终配置如下图:

安装 jdk:

如图:

安装maven:

如图:

添加凭据

凭据是为了访问Gitlab拉取代码使用的,分别创建三个凭据:账号密码类型,api token访问类型,git私钥访问类型,总体配置如下图:

解析:

账号密码类型凭据,只需要上gitlab创建一个账户,同时这个账户拥有访问项目仓库的权限即可。
api token类型则是使用上述步骤创建的账户登录GitLab,去生成一个访问令牌,如下图:

git私钥访问类型,拷贝git客户端私钥配置即可,如下图:

全局系统配置

系统管理-->系统配置。。主要是配置访问GitLab服务器拉取代码,还有配置`ssh`远程服务器地址,目的是为了打包后上传文件到远程服务器。

GitLab配置如下图,使用git api token依据访问:

ssh远程服务器配置如下图,主要配置远程主机名,主机ip,用户名/密码,还有远程根目录从/开始:

至此,所有配置完成,可以创建构建任务了。

实战场景,自动部署web项目

创建一个 maven 构建任务

项目信息描述,指定远程连接gitlab

配置构建的缓存数量

拉取远程代码配置

构建触发器配置

打包配置

打包后操作,配置ssh传输到远程服务器,执行远程shell脚本

最后保存,点击构建按钮,即可自动打包,并且部署到远程tomcat服务器。远程shell脚本如下:

1#!/bin/bash 2# 配置java环境变量 3export JAVA_HOME=/usr/java/jdk/jdk1.8.0_161 # jdk 根目录 4export JRE_HOME=/usr/java/jdk/jdk1.8.0_161/jre # jre 目录 5export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JRE_HOME/lib: C L A S S P A T H 6 e x p o r t P A T H = CLASSPATH 6export PATH= CLASSPATH6exportPATH=JAVA_HOME/bin: J R E H O M E / b i n : JRE_HOME/bin: JREHOME/bin:JAVA_HOME:KaTeX parse error: Expected 'EOF', got '#' at position 9: PATH 7 8#̲ 配置tomcat环境变量 9…(netstat -nlp | grep :$port | awk ‘{print $7}’ | awk -F"/" '{ print KaTeX parse error: Expected 'EOF', got '}' at position 3: 1 }̲'); 18#杀掉对应的进程,…pid" ]; then 20 kill -9 KaTeX parse error: Expected 'EOF', got '#' at position 13: pid; 21fi 22#̲删除tomcat旧war包 2…DEPLOY_DATE.war 30#mv /home/wwwroot/easywits-operation/deploy_history/easywits.war /home/wwwroot/easywits-operation/deploy_history/$DEPLOY_FILE_NAME 31rm -rf /home/wwwroot/easywits-operation/deploy_history/* 32echo “restarting tomcat_easywits_operation…” 33sleep 5 34/home/wwwroot/easywits-operation/tomcat-easywits-operation/bin/startup.sh 35

整个shell脚本很常规,就是将文件复制到tomcat的webapp目录下,并重启。

部署结果,看看日志信息如下,表示成功:

提交代码,自动打包部署

当gitlab代码仓库发生事件:提交代码等操作时,触发打包部署动作

Jenkins配置

GitLab代码仓库配置

这样,当推送代码到指定代码仓库时候就会触发自动打包部署啦!

总结

Jenkins 自动打包部署操作,理论上跟本地打包部署是一个道理,该安装的环境一个不能少,只不过可以自动化罢了
Jenkins可以做的事情还有很多,配置太多啦,一篇文章也只能做个引导作用,更多配置还是需要多看

转自:https://www.sohu.com/a/289325385_120045139

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值