一、环境准备
1.1 环境介绍
名称 | 版本 | 下载地址 |
---|---|---|
linux | 7.0 | http://mirrors.163.com/centos/ |
git | 2.22.0 | https://github.com/git/git/releases |
jdk | 8 | http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html |
maven | 3.6.1 | http://mirror.bit.edu.cn/apache/maven/maven-3 |
我所有的资源文件都放到/opt/resources下
1.2 jdk安装
[root@bogon resources]# cd /opt/resource
[root@bogon resources]# tar -zxvf jdk-8u40-linux-x64.tar.gz -C /opt
[root@bogon resources]# vi /etc/profile
--------------------------------------------------------------------------------------
#最下面添加如下内容:
#jdk
export JAVA_HOME=/opt/jdk1.8.0_40
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---------------------------------------------------------------------------------------
[root@bogon resources]# source /etc/profile
[root@bogon resources]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
1.3 maven安装
- 下载解压maven安装包
[root@bogon resources]# cd /opt/resources/
[root@bogon resources]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
[root@bogon resources]# tar -zxvf apache-maven-3.6.1-bin.tar.gz
[root@bogon resources]# mv apache-maven-3.6.1 ../
- 配置环境变量
[root@bogon resources]# vi /etc/profile
----------------------------------------------------------------------------------------------------------------
#maven 添加:
export MAVEN_HOME=/opt/apache-maven-3.6.1
export PATH=$PATH:$MAVEN_HOME/bin
----------------------------------------------------------------------------------
[root@bogon resources]# source /etc/profile
[root@bogon resources]# mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /opt/apache-maven-3.6.1
Java version: 1.8.0_40, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_40/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
1.4 git安装
- 下载git安装包
[root@bogon resources]# wget https://codeload.github.com/git/git/tar.gz/v2.22.0
耐心等待下载完成。我们可以看到下载后的文件名是v2.22.0,并不是压缩包的格式,不用担心,这只是链接的问题,手动修改文件名为git-2.22.0.tar.gz
[root@bogon resources]# tar -zxvf git-2.22.0.tar.gz -C /opt
[root@bogon resources]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
[root@bogon resources]# yum remove git
[root@bogon resources]# cd /opt/git-2.22.0/
- 编译git源码
[root@bogon resources]# make prefix=/usr/local/git all
- 安装git至/usr/local/git路径
make prefix=/usr/local/git install
- 配置环境变量
[root@bogon opt]# vim /etc/profile
----------------------------------------------------------------------------------------------------
#添加
export PATH=$PATH:/usr/local/git/bin
---------------------------------------------------------------------------------------------------
[root@bogon opt]# source /etc/profile
[root@bogon opt]# git --version
git version 2.22.0
1.5 gitlab配置ssh key
ssh-keygen -t rsa -C 'xxx@xxx.com' //然后一路回车(-C 参数是你的邮箱地址)
- 复制ssh值到gitlab上面
[root@bogon .ssh]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDS0Bxbd+wIS9mnKNtYln1E7/fHoZ3duup9HWKg3jrH+rOtCUJbvK0r6+aIss4rumT6N7m2FYwjPCEzj+rnebuUXAcEN3BCgZDpgQJqkUGPLhpCRvhD05qmgT16u0hr+Hsz+QSJeetdhTsBzn+St6DD+HDX6Sm+zrfslLmUED3YYmxc8cglAUetIuBCRFl3CduvTjnbMXj5kkxJCAHBt9bg84LRIs+oSO484BZarwcAeas1pNyGwwXndbdCWG6z/XCFrEt/n2McoBhpaH2DbOz5eRAYftHClzp4uD3WHopQ4ARuuwHKSMXMAzyJ23sRAVanu2mGETpvR+z1cNS9XP2N hld@imlaidian.com
复制上面的值到gitlab
1.6 jenkins安装
这里推荐使用yum方式安装Jenkins,最简单方便。
yum的repos中默认是没有Jenkins的,需要先将Jenkins存储库添加到yum repos
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- yum安装Jenkins
yum install jenkins
现在Jenkins已经安装好了,不过启动之前最好稍微修改一下配置。默认情况是Jenkins是使用Jenkins用户启动的,但这个用户目前系统并没有赋予权限,这里我们将启动用户修改为root;另外Jenkins默认端口是8080,这个跟tomcat的默认端口冲突,我们也修改一下默认端口。
输入命令进入Jenkins配置文件
vi /etc/sysconfig/jenkins
此处修改配置
JENKINS_USER="root"
JENKINS_PORT="8081"
修改完配置后,保存退出。
好了,现在配置文件也修改好了,可以启动Jenkins了。
输入启动命令以启动Jenkins服务。
service jenkins start
出现OK表示Jenkins启动成功。
如果启动失败 出现如下所示
执行status jenkins.service发现如下错误信息:
解决方案:
[root@iZ2ze13kpist8bmp2hsgn3Z bin]# vi /etc/init.d/jenkins
---------------------------------------------------------------------------------------------------------------------------
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
/opt/jdk1.8.0_40/bin/java #添加jdk路径
"
-----------------------------------------------------------------------------------------------------------------------
[root@iZ2ze13kpist8bmp2hsgn3Z bin]# systemctl daemon-reload
重新执行 service jenkins start 启动服务
在浏览器输入ip:8081进入Jenkins登录页面
进入登录页面后,Jenkins提示我们需要输入超级管理员密码进行解锁。根据提示,我们可以在/var/lib/jenkins/secrets/initialAdminPassword文件里找到密码。
tail /var/lib/jenkins/secrets/initialAdminPassword
找到密码后,复制密码,粘贴到Jenkins解锁页面,点击Continue继续初始化配置。
有可能会出现jenkins离线提示
解决方法:
打开配置页面:http://ip:8081/pluginManager/advanced ,修改升级站点https协议改为http,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191216155929971.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbjk0OTQxNzE0MA==,size_16,color_FFFFFF,t_70
提交完之后,重启Jenkins:service jenkins restart
重新ip:8081访问jenkins。
没出现jenkins离线的话,短暂的等待后,进入插件安装页面
这里我们点击的Install suggested plugins,安装默认插件,当然你也可以点击另一个按钮安装指定的插件。
点击后,页面进入了插件下载安装页面。
耐心等待全部安装完成。安装完成后,页面自动进入了管理员账户注册页面。
这个页面大家肯定都不陌生,自己输入信息注册吧。输入完信息点击Save and Finish
默认地址不用修改,保存并完成
点击Start using Jenkins,进入Jenkins主页面。
二、配置jenkins自动化部署
这里需要先准备好一个gitlab项目,可以参考上传代码到gitlab
2.1 jenkins全局工具配置
在全局工具配置页面,我们可以配置JDK、GIT、maven。
- 这里我们先配置JDK,点击新增JDK,配置上面安装jdk时的路径
- 配置GIT路径
- maven配置
点击Save,GIT配置完成
2.2 jenkins配置
创建一个新任务
general配置
Repository URL字段填写git远程仓库地址,你可以从github上找到
进入任务配置页面,在源码管理选择git
点击添加按钮弹出添加账号,添加完账号之后上面红色报错信息一般就会消失。
如果还是报错的话,到jenkins服务器上面执行:
[root@iZ2ze13kpist8bmp2hsgn3Z sysconfig]# /usr/local/git/bin/git ls-remote -h -- git@192.168.179.132:root/template.git HEAD
The authenticity of host '192.168.179.132 (192.168.179.132)' can't be established.
ECDSA key fingerprint is SHA256:UVFQw/pMyVxMoelXDBPlXN+p1oahP0vnG08FfWLxJpA.
ECDSA key fingerprint is MD5:67:4a:f1:03:88:1d:a0:51:d9:e6:3f:dd:2a:1d:9e:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.179.132' (ECDSA) to the list of known hosts.
//报错提示host不识别,所以需要去/etc/hosts配置一下ip
[root@iZ2ze13kpist8bmp2hsgn3Z sysconfig]# vi /etc/hosts
-----------------------------------------------------------------------------------------------------------------------------
//添加一行配置,这里我gitlab和jenkins安装到同一台服务器上 所以配置成localhost
192.168.179.132 localhost
------------------------------------------------------------------------------------------------------------------------------
在项目控制台页面,点击立刻构建,来测试Jenkins是否可以成功从git仓库下载代码。
等待构建执行结束,在服务器进入Jenkins工程目录/var/lib/jenkins/workspace。可以看到目录下有文件夹template。进入文件夹,可以看到项目相关代码
至此Jenkins使用GIT下载代码配置成功。
2.3 Jenkins使用maven构建代码
构建选择调用顶层maven目标
如下图配置
现在使用maven构建代码也配置好了,我们来测试一下,在任务页面点击立即构建,等待执行成功。
执行成功后,进入Jenkins工程目录,发现/var/lib/jenkins/workspace/template文件夹下多出了个build文件下,里面有构建后的文件,在target文件夹下,可以找到构建后的工程文件publicTools.jar
至此,通过Jenkins使用git下载代码并使用maven构建工程成功
2.4 配置Jenkins使用SSH插件推送jar包到其他服务器,并启动jar包
现在我们已经可以通过maven构建用git下载的代码了,还需要将构建后的jar包推送到其他服务器去运行。Jenkins提供了SSH传输的插件,我们可以使用插件来推送文件。
先来安装SSH插件,从系统管理进入管理插件页面。
在可选插件中找到Publish Over SSH,选中后点击直接安装。
安装中页面,勾选上安装完成后重启,耐心等待安装完成。
现在插件安装好了,开始配置插件。从系统管理进入系统设置页面。
在页面中找到Publish over SSH,点击增加。
Name起一个别名,这里叫node132;Hostname填写服务器ip地址;Username填写服务器登录用户名;Remote Directory填写登录后路径;点击高级打开扩展页面,勾选上使用密码认证,在密码里填写登录用户名对应的密码。
全部填写好后,点击Test Configuration测试是否可以成功访问服务器,如果填写的信息都正确,应该提示Success,点击保存完成访问服务器的配置。
现在设置好了访问服务器,我们来配置把jar包传过去运行。
打开任务,进入任务配置页面,在构建后操作栏目下,点击增加构建后操作步骤,选择Send build artifacts over SSH。
在配置页面填写参数,Name选择我们刚才配置的服务器node132;Source files输入我们希望上传的包相对于工程根目录的路径,根据maven构建的位置,这里应该填target/publicTools.jar;Remove prefix是移除前缀,这里填写target/,如果不填的话,插件会把target/publicTools.jar连文件夹一起传过去,填写了就会只传一个publicTools.jar文件;Remote directory是服务器传接收上传文件的路径;最后Exec command为上传成功后在服务器上执行的命令。这里我们输入如下命令
服务器/work/product/template目录下创建一个restart.sh脚本
cat restart.sh
----------------------------------------------------------------------------------------------
#!/bin/bash
#查询进程id
ID=`ps -ef | grep "publicTools.jar" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo $ID
echo "---------------"
for id in $ID
do
# 杀死进程
kill -9 $id
echo "killed $id"
done
echo "---------------"
#重新启动项目
nohup /opt/jdk1.8.0_40/bin/java -jar /work/product/template/publicTools.jar --server.port=8092 --debug > /work/product/template/printout.log 2>&1 &
---------------------------------------------------------------------------------------------
至此ssh上传jar包配置完成,再次点击立即构建,控制台输出,构建成功
查看服务器相关目录下是否存在jar包以及jar包是否启动
2.5 jenkins配置gitlab钩子
- 安装插件Gitlab Hook Plugin插件
安装完插件之后执行service jenkins restart重启jenkins服务 - 配置钩子
在Jenkins的每个任务中,在钩子的Build Triggers配置处获取到Jenkins生成的钩子回调地址,并且可以配置Secret token。后面需要将这两个信息copy到GitLab上的配置中,如下:
- gitlab配置钩子
在GitLab端可以配置全局的钩子,也可以在项目上配置钩子(推荐直接在项目上配置,可以细粒度的配置)。进入项目后选择Settings -> Integrations,就进入了钩子配置页面。每一个项目可以配置多个钩子,根据不同的触发条件进行配置。比如我们之前项目会安装测试环境和开发环境,根据不同的项目分支(Branch)进行配置和条件触发。
进入页面,
1、将jenkins上的钩子地址和Secret token拷贝到上面,
2、并且配置触发条件,我们一般选择
Push events 往仓库中进行push操作,并且可以配置分支
Merge request events 往该分支上进行merge操作时
其他是提交Comments,往tag上推,提问题等就可以不用配置了。。。
页面测试钩子
点击后,如果事件发生成功:
再看看Jenkins上是否已经触发了:
至此安装配置完成