什么是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环境
- 首先需要下载JDK安装包,并解压到/usr/local目录下
[root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz -C /usr/local/
- 设置环境变量
[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任务
源码管理
构建触发器
构建
构建项目--->查看控制台输出
Gitlab自动触发Jenkins构建打包
Gitlab | Jenkins | |
IP地址 | 192.168.1.11 | 192.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.22 | 192.168.1.33 |