centos7部署gitlab+jenkins(jenkins篇)

接gitlab上一篇继续写

部署环境
10.0.13.102 gitlab
10.0.13.103 jenkins
10.0.13.104 git客户端

  • jenkins配置(103主机上操作)

关闭防火墙和selinux

安装jenkins

  1. 第一种方法

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 install jenkins(这种方法默认安装最新版)

  1. 第二种方法

直接下载 rpm 安装
各个版本地址 https://pkg.jenkins.io/
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm
(去该网址选择自己要的稳定版本)

安装插件
maven jdk git gradle(jenkins里也可以帮你安装,但是建议自己手动安装,jdk,git必须要,maven和gradle是我公司编译java所需要的插件,看你自己的需求安装)

  • 安装jdk

(去jdk官网下载,但是需要去官网注册一个oracle账号)
建议用rpm方式安装,简单且不用配置环境变量
例如:下载地址 https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.rpm
安装 rpm -ivh jdk-8u231-linux-x64.rpm
查看jdk java -version

  • 安装git

    yum install git -y

  • 安装maven

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压到/usr/local/下面,目录名改为maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz /usr/local/maven
添加环境变量
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH= P A T H : PATH: PATH:{M2_HOME}/bin
刷新环境变量 source /etc/profile
查看是否安装成功 mvn -v
centos7部署gitlab+jenkins(jenkins篇)_第1张图片

  • 安装gradle

(自行百度吧,和maven一样,因为我后面有一些gradle的例子配置,如果不需要可以不安装)

  • 启动jenkins

systemctl start jenkins
systemctl enable jenkins
systemctl status jenkins
启动可能报错,安装JDK后,Jenkins可能无法启动,需要修改vim /etc/rc.d/init.d/jenkins文件中的你安装的jdk路径, 查找,输入/java, 添加新的jre路径
/etc/alternatives/java
/usr/lib/jvm/java-1.6.0/bin/java
/usr/lib/jvm/jre-1.6.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-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/bin/java
/data/java/jdk1.8.0_101/bin/java 自己的jdk路径(如果你是源码安装的jdk一般都会遇到这个错,这是由于服务找不到你安装的jdk路径,所以上面建议用rpm安装jdk)

启动之后访问页面,默认是8080端口
可以在主配置文件里/etc/sysconfig/jenkins修改,但建议不要修改。

访问可能报错:该Jenkins实例似乎已离线
centos7部署gitlab+jenkins(jenkins篇)_第2张图片最终解决方法

网上好多文章吧唧吧唧说了好长,其实就三步:
第一步:打开配置页面
http://ip:8080/pluginManager/advanced
进去以后是这样的
centos7部署gitlab+jenkins(jenkins篇)_第3张图片
第二步:
Https协议改为http
修改后的为:
http://updates.jenkins.io/update-center.json
要修改的地方在页面最下面
centos7部署gitlab+jenkins(jenkins篇)_第4张图片
第三步:重启Jenkins
OK,重启后再次输入密码进入就是正常的啦,正常的页面如下:
centos7部署gitlab+jenkins(jenkins篇)_第5张图片

启动完成后我们开始配置环境

  1. 第一步

配置jenkins和gitlab之间免密,把jenkins服务器上的id_rsa.pub中的公钥发到gitlab上面。(不会的看gitlab那篇)

  1. 第二步

配置全局环境

  • jdk配置

如果你是按我上面的rpm安装的,按我的命令查看你的java路径
which java 查看java的执行路径 /usr/bin/java
ls -lrt /usr/bin/java 查看软连接路径 /etc/alternatives/java
ls -lrt /etc/alternatives/java 查看安装路径
在这里插入图片描述上面显示的路径,你就填/usr/java/jdk1.8.0_221-amd64/就行
centos7部署gitlab+jenkins(jenkins篇)_第6张图片

  • maven配置

/etc/profile
export M2_HOME=/usr/local/maven
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin:$M2_HOME/bin
centos7部署gitlab+jenkins(jenkins篇)_第7张图片如果要做gradle编译构建,和maven一样的操作,源码安装gradle,自行百度
git选择自动安装即可

3.第三步

安装插件,主要有maven相关,ssh相关,git相关,其他的请查考网上下载
publish over ssh
Maven Integration
Git
centos7部署gitlab+jenkins(jenkins篇)_第8张图片

  1. 第四步

Publish over SSH配置(用于jenkins传输包给web服务器)
点击系统管理-----> 系统设置----> 往下面划
passphrase不用填,key里面填入jenkins主机的私钥,在id_rsa中,点击保存
centos7部署gitlab+jenkins(jenkins篇)_第9张图片

  1. 第五步

添加web服务器用于接收jenkins发的包(就在上面配置的地方)
填入远程连接的ip,用户名,密码,远程接收文件的路径,要是ssh端口不是22注意要修改端口,这是最简单的方法。
remote directory 表示代码包默认发送到服务器的地址,配置完记得点测试,success表示添加成功
centos7部署gitlab+jenkins(jenkins篇)_第10张图片
centos7部署gitlab+jenkins(jenkins篇)_第11张图片
好了,现在我们的准备工作做好了,我们开始配置流水线了

构建maven项目

  • 选择构建一个maven项目

centos7部署gitlab+jenkins(jenkins篇)_第12张图片

  • 配置代码仓库地址

centos7部署gitlab+jenkins(jenkins篇)_第13张图片
选择git,输入git项目链接url,点击添加凭证,新建一个用户,注意这里添加的用户必须是jenkins服务器上存在的用户,比如root用户,换句话说,这里需要填入jenkins这台linux服务器的登陆用户username和密钥id_rsa,我填入的就是root用户和root用户的密钥。再选择你自己的分支。
centos7部署gitlab+jenkins(jenkins篇)_第14张图片centos7部署gitlab+jenkins(jenkins篇)_第15张图片build中网上教程默认选项都是填clean install,这只是对于单个测试文件而言,这是个大坑,如果你是要用在生产环境中,需要学一下maven编译的命令,因为网上教程都是写一个测试文件来做实验,但是实际环境下gitlab上有太多的项目和模块,每个模块下面还有子模块,要是选择clean install,他会默认编译最外层的pom.xml,也就是会把所有的包都打出来,开发每次的操作只会影响某个包,我们不可能每次有一点点改动都把所有包打出来吧,所以我们要定位到我们要编译的子模块的pom.xml文件,只编译对应的包,命令:clean install -pl 子模块名 -am -Dmaven.test.skip=true,要是子模块下面还有子模块,命令:clean install -pl 子模块名/模块名 -am -Dmaven.test.skip=true,直到找到对应的pom.xml文件

  • 构建后操作

centos7部署gitlab+jenkins(jenkins篇)_第16张图片这里是把包传到web服务器上,也就是刚才我们添加的那台,要注意的是source files的路径,默认的是target/,如果你的项目有子模块,那默认的就是错的,以我的项目为例,我的流水线名为test-apply-web,所以在jenkins服务器上生成的工作路径默认是/var/lib/jenkins/workspace/test-apply-web,默认传输的target/其实是/var/lib/jenkins/workspace/test-apply-web/target/,但是我们构建的是子模块apply-service/web,所以真正的包路径在/var/lib/jenkins/workspace/test-apply-web/apply-service/web/target下面,所以我们必须找对路径才能找到正确的包,remote prefix是说传输时把一层层的文件夹去掉,只留下jar包,remote directory是指jar包要传到远程服务器的路径,还记得最上面我们添加主机时已经指定了路径为/data/product,所以我们真正传输的路径为/data/product/test-apply-web,这个一定要搞懂。command中你可以写一些脚本命令,比如重启服务,这样我们的一条流水线就算完成了。你可以构建试一试文件是否正常传输过去。

接下来我们在上面的流水线上进行优化。使我们的流程更规范和精巧。

  • 参数化构建分支和发布环境

centos7部署gitlab+jenkins(jenkins篇)_第17张图片在这里插入代码片
centos7部署gitlab+jenkins(jenkins篇)_第18张图片

  • 分支调用参数

在这里插入图片描述这里之前是/dev 现在写成$branch,在构建的时候可以选择不同的分支
在ssh server那里点击高级,label中填入上面的proc参数,表示当你构建时选择proc时,只会把jar包发送到标签是proc的服务器,其他没填的或者是填了test,pre就不会发送,这样就能实现环境隔离
*
centos7部署gitlab+jenkins(jenkins篇)_第19张图片要注意需要在最下方填入上面定义的ENV参数,否则上面配置无效
centos7部署gitlab+jenkins(jenkins篇)_第20张图片现在你再次构建就有很多选项了。

  • jenkins构建gradle项目(如果有需要请参考)

首先linux中源码安装gradle,配置环境变量,在jenkins全局变量里配置,和maven一样,新建流水线时选择构建一条自由风格的流水线
构建时注意格式:tasks中先空一格 再写 :模块名:子模块名:build
没有子模块默认写build
centos7部署gitlab+jenkins(jenkins篇)_第21张图片报错:
在这里插入图片描述
解决方法,把/var/lib/jenkins/workspace/流水线名/.gradle文件夹删除,没用的话就把/var/lib/jenkins/workspace/流水线名 整条流水线删除

  • 若是要跳过测试模块,执行下面语句 -x参数

centos7部署gitlab+jenkins(jenkins篇)_第22张图片

  • 至此一条简单的参数化流水线完成。

jenkins代码回滚部署

  • jenkins回滚方式有多种,在这里列举几个

1.通过git标签来回滚
2.通过每次发版的流水线版本号Revision来回滚
3.每次发版构建时保存一份jar包/war包,通过替换包直接回滚

三种方式各有优缺点,第一种需要开发配合,第三种占用系统资源较多,因为要保存大量的包,所以权衡之下选择第二种方式

发布回滚流程,先理解透图示流程
centos7部署gitlab+jenkins(jenkins篇)_第23张图片

  • 下面我们开始配置

我用生产上的一条流水线来测试
选择参数化构建中的选项参数,配置如下
centos7部署gitlab+jenkins(jenkins篇)_第24张图片

  • 再配置一个Version的字符参数,用于后面脚本调用

centos7部署gitlab+jenkins(jenkins篇)_第25张图片

  • 在build之前的pre steps中写一个脚本,脚本表示当你选择回滚时就不执行后面的操作了

centos7部署gitlab+jenkins(jenkins篇)_第26张图片

case $Status  in
  Rollback)
    echo "-----本次操作为回滚,版本号为$Version-----"
    git reset --hard $Version
    echo "-----回滚完成,打包中-----"   
    ;;
  *)
  exit
      ;;
esac
  • 这样就完成配置了,下面我们保存好来实验一下

可以看到我们构建的两个参数已经存在

centos7部署gitlab+jenkins(jenkins篇)_第27张图片

  • 下面我们获取版本号version

点击进去选择我们要回滚的之前版本的流水线,比如第53条
在这里插入代码片centos7部署gitlab+jenkins(jenkins篇)_第28张图片点击箭头标识
centos7部署gitlab+jenkins(jenkins篇)_第29张图片我们就能获取到version
centos7部署gitlab+jenkins(jenkins篇)_第30张图片把这一串复制到version框中,如果你还设置了其他参数要注意是否会受影响,比如看我的,我的branch分支要选择,但是比如我要回滚的那条流水线当时构建时是dev分支,我现在选择了一个master分支,那这次回滚到底是用哪个分支,这个需要你去试验,我保持默认不动,回滚不受影响,换句话说,我定义的branch在回滚的时候是无效的,只有在发布的时候有效,env环境是有效的

centos7部署gitlab+jenkins(jenkins篇)_第31张图片亲测有用,能正常回滚
个人感觉这种方法非常不错,理解简单,不用写大量脚本,就是每次发版的时候记得给流水线做个备注,以防要回滚到时间跨度较大之前的版本时找错了流水线。
centos7部署gitlab+jenkins(jenkins篇)_第32张图片至此回滚完成
jenkins到这就先告一段落

你可能感兴趣的:(运维,Jenkins,ci/cd)