什么是jinkins

jinkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台

jinkins的作用

  • 开发人员:无需对项目进行编译和打包,将代码放在托管平台即可,例如:GitHub、GitLab、Git、SVN
  • 运维人员:省去复杂的备份,更新,发布的工作
  • 测试人员:结合jinkins对代码质量进行测试,再加上Sonarqube进行更完善的质量检测

功能介绍

  • 一个自动化的周期性集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是由自动化完成的,无需人工干预
  • 有利于减少重复过程以节省时间、费用和工作量
  • 它需要有代码托管工具支持, 比如SVN、GIt、GitHub、gitlab。监控软件开发流程,快速显示问题

什么是持续集成

持续集成,简称CI,是指开发阶段,对项目进行持续性自动化编译、测试,以达到控制代码质量的手段,持续集成是一种软件开发实践

CI/CD       CI:持续集成、     CD:持续部署、持续交付

CI:continuous Integration持续集成             CD:Continuous Deploy  /  Continuous Delivery

持续集成:自动化编译、打包、发布、测试

构建:编译+打包

为什么要持续集成

  • 易于定位错误,也就是当你的持续集成失败了,说明你新加的代码或者修改的代码引起了错误
  • 更加充分地测试系统中的各个单元
  • 有助于项目的并发数据的收集
  • 便于开发流程的管理,要把一个开放的build提交给测试组做测试,测试组满意了,在提交到发布组去发布

jinkins部署

安装Git

[root@localhost ~]# yum -y install git

安装JAVA环境

  1. 首先需要下载JDK安装包,并解压到/usr/local目录下
[root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz -C /usr/local/
  1. 设置环境变量
[root@localhost ~]# vim /etc/profile

在末尾添加

export JAVA_HOME=/usr/local/jdk1.8.0_201/
export JRE_HOME=/usr/local/jdk1.8.0_201/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

使环境变量生效

[root@localhost ~]# source /etc/profile

添加软连接

[root@localhost ~]# ln -s /usr/local/jdk1.8.0_171/bin/java /usr/bin/java

检测java版本

[root@localhost ~]# java -version

安装maven

下载maven安装包,并解压到当前目录

[root@localhost ~]# tar -zxvf apache-maven-3.6.0-bin.tar.gz

然后将其移动到/usr/local/maven/目录下

[root@localhost ~]# mkdir /usr/local/maven
[root@localhost ~]# mv apache-maven-3.6.0/* /usr/local/maven/

查看maven信息(出现版本信息,说明maven环境安装成功)

[root@localhost ~]# mvn -v

配置阿里云镜像

[root@localhost kgcapp]# vim /usr/local/maven/conf/settings.xml
# 在其中增加以下代码
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

创建maven项目

[root@localhost ~]# mvn archetype:generate -DgroupId=com.kgcapp -DartifactId=kgcapp -DarchetypeArtifactId=maven-archetype-quickstart

测试编译(速度明显提升)

[root@localhost ~]# cd kgcapp/
[root@localhost kgcapp]# mvn test

安装Jenkins

下载jenkins

[root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

导入秘钥

[root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安装Jenkins

[root@localhost ~]# yum -y install jenkins

启动Jenkins

[root@localhost ~]# systemctl start jenkins

打开Jenkins

[root@localhost ~]# firefox 192.168.1.11:8080

查看密码

[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
ec4e9d11f8c242d785f9a2764da9989e

选择安装推荐的插件

解决:该Jenkins实例似乎已离线

如果显示:“该Jenkins实例似乎已离线” 或者 一直卡在加载页

就把Jenkins_HOME/hudson.model.UpdateCenter.xml里面的url标签的链接更改为:http://mirror.xmission.com/jenkins/updates/update-center.json
猜测原来地址应该是国外的,可能是被墙了。所以把这个地址换成国内的就解决了

[root@localhost ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
  </site>
</sites>

重启Jenkins

[root@localhost ~]# systemctl restart jenkins

然后重新打开网站应该就可以了

[root@localhost ~]# firefox 192.168.1.11:8080

全局工具配置

插件管理

权限管理

创建用户

创建任务

状态说明

全局角色管理

安装Role插件

更改授权策略

添加用户,给予权限

项目角色管理

创建任务:test-A

添加用户,给予权限

注意Pattern名称是:test-.*             注意正则匹配规则!

构建项目

安装maven插件

构建maven任务

源码管理

构建触发器

构建

构建项目--->查看控制台输出

构建成功(successfully)


Gitlab自动触发Jenkins构建打包

GitlabJenkins
IP地址192.168.1.11192.168.1.22

安装Gitlab插件

jenkins配置Gitlab

jenkins那台服务器上面添加域名解析

[root@localhost ~]# echo "192.168.1.11 gitlab.kgc.cn" >> /etc/hosts

获取Gitlab的API tokin

构建任务

获取Git URL

源码管理

查看SSH Key(在Gitlab服务器查看)
[root@gitlab ~]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv0OqysIk16PncBoW60S8psmHtGpHOibJbG5TDAekzDR8vWgc
jqkEN5+hXgStt3f2Lze82SMwDudelgJ+ZyxTM2evpTnUSsjQ9FcWCFp8hEN4w3Ez
p2ULvzqoJkZNTWaipZAq01pQlv8oWCsi0qBIC9B2rBC6mtzrExuM9D97/l9WBkXU
894K8FSYVvikR6IPubaigPkvJT4sN9rospTSrzRvMCTfHihHlLQaXz38HdBXWg+T
zkgfA2JhKStjB2rc+3+3UTJjea7cWb3FSqH1si0VpT3SQHohJ9k62S+QSeXc2h9B
CHuuKEBffvTUnjCbIQL+6r9uRMbwGZURC/R68wIDAQABAoIBAA35L50omfB3NQ1n
mo0NtIqq5pMzwIhrFQQq+z5BwLR6kTJ1TMDPcFNwAiYQSXDB/uZsOAvVGkm8dZiY
DgwTnPCAfsCffPcJvNpdEmsB0V8IXuZIevGb3EPYUTiaokMpYHCgG8DdNE4TzirC
3ARvWVQjosfnYPq3cSUwOhgOG0z2IcVUbpaYWe+jqOqb3lO+9ZfImbruuqLPsLXZ
NOtlsmWqZNcQYih25+0Bkur+r5cGepslgoIavOlWHIMQB9cVqRNwErSgiWbAO8qT
6TEKL5NRlxNWOMdWwbZwhvdQyQpbsvsB+WznzzxOi+iv4NwDTmuOUhDIxZMbqQNo
6+fSJYECgYEA5IikYTBnBgGXoHw2kxvQhg1+5qI5nltoPkBgFNb+3mtN117pBB69
09oImjJH+9mSMzxg2GIGaTIe/iBIcfKGrQF8szozVisThjX/KIuLa9CNZPNYEWda
wASQjn6IqoRISQJmyUsLiK6ESYkiF9SmBDVwOg2c054csXEElRoSwnECgYEA1kBY
vdBai+I/nKAdxDMFb6Xl9JHx9F5Ze+SOkb2BHO8qrtZNHQmf5fB8BqsOq+k8/Akl
IGOipSG61xouSCxWK6P5tH5VxiCJqdNYnA3TIyTuDUAM4o5LKombXXH6Errh8ZYD
FaJst4qI9bUIVewt2sb2WERIHmZwR7DNQl/p/aMCgYEApR4Q3mOxXAaUfhChAcLr
858WnB6D0OWsOKYchZIdDair0jsx0pc/giybYIWJuu6lEj3CnzSb+y+KcwPyM9oN
8jwL1Bbt9okjDyo+VBYWwuwo7NJhRBnP2MKzizDjH4h6Db4dc7yz9apZzCO3rU4o
MQxHLLqfH8qyYoYM0InJGhECgYAQVFkvJmkwTi8w/dcm9AiPCOLs8A6z5FkHo1Tm
cL4deXEUYEsCUpB4Uwrw6yq0GZPHVd8Zh96GnXqDGIC8iXyL2PSYOCTLdAFqCyyu
wDL+c7sdEWup/NRnypMn3R8FPG8qHZfglz+YAZwMth6LhfO8v/tYoOOqRX57SFNs
oqjP5wKBgQDXyYusF3Xvb+xVl5pmEK2tcSppEybFNVMKEn7tvw3TrjPxZ24Wytms
Mihh1rrG4NbPe9rY1RVsH5jKcFUqSlacKfA29hGuyBs76O/9u6mk0ImKGGeywPHl
+i3aWS0y/UlExA5BS1kXIM69+KDLyHW+LjnnzUELOzrWbcFAH65iuw==
-----END RSA PRIVATE KEY-----

构建触发器

获取身份验证令牌(在jenkins服务器)

[root@localhost ~]# openssl rand -hex 12
8f4e08031241221ccf867f78

发布

jenkins配置邮件通知

安装插件

邮件配置

构建后操作

通过tokin自动配置

安装插件

配置插件

设置Gitlab允许本地访问

找到身份证令牌和URL

关联Gitlab的token

推送事件

如果上面出现这个就代表推送成功了

可以看到这个时候项目已经自动部署完成了

构建后操作(自动创建war包)

测试是否会自动触发(回到Gitlab服务器)

[root@gitlab ~]# mkdir jenkins
[root@gitlab ~]# cd jenkins/
[root@gitlab jenkins]# git clone git@gitlab.kgc.cn:kgc/kgcweb.git
正克隆到 'kgcweb'...
Warning: Permanently added the ECDSA host key for IP address '192.168.1.11' to
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 17 (delta 1), reused 0 (delta 0)
接收对象中: 100% (17/17), done.
处理 delta 中: 100% (1/1), done.

[root@gitlab jenkins]# ls
kgcweb

[root@gitlab jenkins]# cd kgcweb/
[root@gitlab kgcweb]# ls
pom.xml README.md src test.txt

[root@gitlab kgcweb]# echo "1" > test.txt 
[root@gitlab kgcweb]# git add test.txt
[root@gitlab kgcweb]# git commit -m "test"
[master 1134547] test
1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab kgcweb]# git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitlab.kgc.cn:kgc/kgcweb.git
a837162..1134547 master -> master

然后回到Jenkins中查看

最后看到已经自动触发并且构建完成,还生成了war包

war包存放位置

[root@localhost ~]# ls /var/lib/jenkins/jobs/kgcweb/builds/lastSuccessfulBuild/archive/target/
kgcweb.war

Tomcat自动部署

安装tomcat

首先还是先下载Tomcat安装包,并解压到/usr/local目录下

[root@localhost ~]# tar -zxf apache-tomcat-8.5.35.tar.gz -C /usr/local/

修改tomcat端口号为:9000

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="9000" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

启动Tomcat

[root@localhost ~]# cd /usr/local/
[root@localhost local]# cp -r apache-tomcat-8.5.35/ ./tomcat
[root@localhost local]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_201/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# firefox 192.168.1.22:9000

2. 配置jenkins任务

3. 编写shell脚本

[root@localhost ~]# vim /tmp/autodeploy.sh
#!/bin/bash

########################################### backup #########################################
START="/usr/local/tomcat/bin/startup.sh"
STOP="/usr/local/tomcat/bin/shutdown.sh"
DIR=`date +%Y%m%d%H%M%S`
DEST="/tmp/$DIR"
APPBASE=/usr/local/tomcat/webapps/ROOT
WARDEST=/tmp
WARFILE="http://192.168.1.22:8080/job/kgcweb/lastSuccessfulBuild/artifact/target/kgcweb.war"

mkdir -p $DEST
mv $APPBASE/* $DEST

########################################## fetch war file #####################################
wget -O $WARDEST/kgcweb.war -c $WARFILE

######################################## unarchive war file ##################################
unzip $WARDEST/kgcweb.war -d $APPBASE

$STOP
$START

给执行权限

[root@localhost ~]# chmod +x /tmp/autodeploy.sh
修改jenkins默认用户(否则可能会提示没有权限)
[root@localhost ~]# vim /tmp/autodeploy.sh

# 修改jenkins为root用户
JENKINS_USER="root"

3. 往gitlab上提交代码(gitlab服务器)

[root@gitlab kgcweb]# echo 999 >> test.txt 
[root@gitlab kgcweb]# git add test.txt
[root@gitlab kgcweb]# git push origin master
Everything up-to-date
[root@gitlab kgcweb]# git commit -m "test"
[master 32f31a5] test
1 file changed, 1 insertion(+)
[root@gitlab kgcweb]# git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 271 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitlab.kgc.cn:kgc/kgcweb.git
e4e9a43..32f31a5 master -> master

然后jenkins会自动触发构建,然后再次访问

[root@localhost ~]# firefox 192.168.1.22:9000

jenkins集群搭建

主节点从节点
IP地址192.168.1.22192.168.1.33

管理节点

项目配置

Last modification:July 23rd, 2020 at 10:55 pm
如果觉得我的文章对你有用,请随意赞赏