26.1 jenkins介绍
• 产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
• 持续集成 (Continuous integration,简称CI)
• 持续交付(Continuous delivery)
• 持续部署(continuous deployment)
• 参考 http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
• 官网 https://jenkins.io
• Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)基于web界面的平台。
• Jenkins是一个工具集,提供了各种各样的插件
• 比如获取git上最新的代码
• 比如可以帮你编译源代码
• 比如可以调用自定义的shell脚本远程执行命令
• 官方文档 https://jenkins.io/doc/
26.2 jenkins安装
•最低配置: 不少于256M内存,不低于1G磁盘,jdk版本>=8
• 安装jdk1.8
[root@hongwei-02 ~]# yum install -y java-1.8.0-openjdk
已加载插件:fastestmirror
[root@hongwei-02 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
--2018-09-12 21:00:41-- https://pkg.jenkins.io/redhat/jenkins.repo
正在解析主机 pkg.jenkins.io (pkg.jenkins.io)...
[root@hongwei-02 ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
[root@hongwei-02 ~]#
安装jenkins
[root@hongwei-02 ~]# yum install -y jenkins
已加载插件:fastestmirro
启动jenkins
[root@hongwei-02 ~]# systemctl start jenkins
[root@hongwei-02 ~]# ps aux|grep jenkins
jenkins 2710 57.6 8.5 2299552 85960 ? Ssl 21:04 0:10 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 2738 0.0 0.0 112664 960 pts/0 R+ 21:04 0:00 grep --color=auto jenkins
查看admin的密码,一会我们会用到
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
cfbf17727c004b0283fcd0f
密码也保存在:/var/lib/jenkins/secrets/initialAdminPassword
[root@hongwei-02 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
cfbf17727c004b0283fcd0f8
[root@hongwei-02 ~]#
启动之后就可以在浏览器打开了
密码就是我们上面查询的密码
点击:继续,进入
我们选择安装推荐的插件
26.3 了解jenkins
安装插件成功后,会进入创建管理员用户界面:
进入jenkins页面
[root@hongwei-02 ~]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@hongwei-02 ~]#
安装目录/var/lib/jenkins
[root@hongwei-02 ~]# cd !$
cd /var/lib/jenkins
[root@hongwei-02 jenkins]# ls
config.xml jobs secret.key.not-so-secret
hudson.model.UpdateCenter.xml logs secrets
hudson.plugins.git.GitTool.xml nodeMonitors.xml updates
identity.key.enc nodes userContent
jenkins.CLI.xml plugins users
jenkins.install.UpgradeWizard.state secret.key workflow-libs
[root@hongwei-02 jenkins]#
配置文件 /etc/sysconfig/jenkins
[root@hongwei-02 jenkins]# vim /etc/sysconfig/jenkins
## Path: Development/Jenkins
## Description: Jenkins Automation Server
## Type: string
## Default: "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"
## Type: string
## Default: ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_JAVA_CMD=""
## Type: string
## Default: "jenkins"
## ServiceRestart: jenkins
日志目录 /var/log/jenkins
26.4/26.5 发布php代码
•“系统管理”à“管理插件”à“已安装”
• 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它并安装
安装完成后要重启jenkins服务。
[root@hongwei-02 jenkins]# systemctl restart jenkins
[root@hongwei-02 jenkins]#
事先在一台linux服务器上生成一对密钥
[root@hongwei-02 jenkins]# ssh-keygen -f /root/.ssh/jenkins
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/jenkins.
Your public key has been saved in /root/.ssh/jenkins.pub.
The key fingerprint is:
3d:55:e0:30:9f:11:e8:f0:4d:cf:a7:a6:9f:5e:b9:d7 root@hongwei-02
The key's randomart image is:
+--[ RSA 2048]----+
| o.+o. |
| . .=.+ |
| + o=o |
| .o.. o .|
| S o o |
| . o .|
| o .o|
| . oE|
| o+..|
+-----------------+
配置Jenkins的SSH密钥
点击系统管理-->系统设置,找到Publish Over SSH
Passphrase:留空,Path to key:留空,把私钥复制黏贴到key,点击:新增。
然后点击测试是否成功
在新增一个03机器
首页点击新建任务。
“构建触发器”和“构建环境”留空
构建
• Remove prefix可以指定截掉的前缀目录,这里留空即可,Remote directory指定远程服务器上代码存放路径,比如/data/wwwroot/www.aaa.com,Exec command为文件传输完成后要执行的命令,比如可以是更改文件权限的命令,设置完成后点击 “Add Transfer Set”,如果还有另外的机器,可以点击 “Add Server”重复以上操作
最后,点击保存。
然后回到页面点击立即构建
查看控制台输出:
到虚拟主机去查看一下:
[root@hongwei-02 ~]# ls /tmp/jenkins_test/
D11Z D12Z D13Z D14Z D15Z D17Z D18Z D19Z D20Z D21Z D22Z LICENSE README.md 习题答案.txt
[root@hongwei-02 ~]# ll !$
ll /tmp/jenkins_test/
总用量 108
drwxr-xr-x 2 nobody nobody 64 9月 12 22:13 D11Z
drwxr-xr-x 2 nobody nobody 4096 9月 12 22:13 D12Z
drwxr-xr-x 2 nobody nobody 23 9月 12 22:13 D13Z
drwxr-xr-x 2 nobody nobody 4096 9月 12 22:13 D14Z
drwxr-xr-x 2 nobody nobody 4096 9月 12 22:13 D15Z
drwxr-xr-x 2 nobody nobody 24 9月 12 22:13 D17Z
drwxr-xr-x 2 nobody nobody 73 9月 12 22:13 D18Z
drwxr-xr-x 2 nobody nobody 148 9月 12 22:13 D19Z
drwxr-xr-x 2 nobody nobody 80 9月 12 22:13 D20Z
drwxr-xr-x 2 nobody nobody 4096 9月 12 22:13 D21Z
drwxr-xr-x 2 nobody nobody 122 9月 12 22:13 D22Z
-rw-r--r-- 1 nobody nobody 18044 9月 12 22:13 LICENSE
-rw-r--r-- 1 nobody nobody 419 9月 12 22:13 README.md
-rw-r--r-- 1 nobody nobody 66243 9月 12 22:13 习题答案.txt
[root@hongwei-02 ~]#
26.6 jenkins邮件设置
依次点击:系统管理-->系统设置-->Jenkins Location,向下拉找到邮件通知,然后设置。
系统管理员邮件地址和发邮件的邮箱要保持一致。
最后点击保存即可。
配置好之后,回到test_php工程里配置:
选择:构建后操作--> E-mail Notification:
设置之后,修改一下test_php工程的文件,比如:
[root@hongwei-02 ~]# ls /tmp/jenkins_test/README.md
/tmp/jenkins_test/README.md
[root@hongwei-02 ~]# chattr +i /tmp/jenkins_test/README.md
[root@hongwei-02 ~]#
重新构建项目,看看会不会收到邮件通知:
这个邮件通知,只有在构建失败的时候才会发送。如果构建成功,则不会发送邮件。
26.7 插件email-ext
(1)Extension E-mail Notification配置
插件名称:Email Extension Plugin,默认已安装。
设置:
依次点击:系统管理-->系统设置-->Extension E-mail Notification。
勾选:
(2)修改test的配置:
(3)测试
前面中,/tmp/jenkins_test/README.md文件添加了i权限,现在先去掉此权限,再测试。
[root@hongwei-02 ~]# chattr -i /tmp/jenkins_test/README.md
[root@hongwei-02 ~]#
重新构建:
26.8 破解jenkins管理员密码
1、修改/var/lib/jenkins/目录中的config.xml文件,把以下下内容删除:
true
true
true
false
2、重启jenkins
3、浏览器打开:192.168.xx.xx:8080
4、点击:系统管理-->全局安全配置
勾选“启用安全“,点选“Jenkins专有用户数据库”,并点击“保存”;
5、重新点击首页>“系统管理”-->管理用户
修改admin用户的密码保存即可。
6、修改过admin用户密码之后
点击:系统管理-->全局安全配置
取消“启用安全“,取消“Jenkins专有用户数据库”,并点击“保存”;
7、把第1步中删除的内容,复制回去。
8、重启jenkins服务
Jenkins部署java项目
• java的项目是需要编译和打包的
• 编译和打包用maven完成,所以需安装maven
• 生成密钥对
• 把公钥放到git服务端
将上面的仓库克隆到/home目录中
[root@hongwei-02 home]# git config --global user.name"hongwei"
[root@hongwei-02 home]# git config --global user.email"[email protected]"
[root@hongwei-02 home]#
初始化及创建推送一个测试文件:
[root@hongwei-02 ~]# git clone ssh://[email protected]:14822/liuhongwei/test_java.git
正克隆到 'test_java'...
warning: 您似乎克隆了一个空版本库。
[root@hongwei-02 ~]# cd test_java
[root@hongwei-02 test_java]# touch README.md
[root@hongwei-02 test_java]# git add README.md
[root@hongwei-02 test_java]# git commit -m "add README"
[master(根提交) dcbd9e6] add README
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
[root@hongwei-02 test_java]#
push一下
[root@hongwei-02 test_java]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://[email protected]:14822/liuhongwei/test_java.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
[root@hongwei-02 test_java]#
回到浏览器查看一下
部署java项目-下载zrlog源码
下载地址:https://codeload.github.com/94fzb/zrlog/zip/master
下载到/home/目录
[root@hongwei-02 home]# wget https://codeload.github.com/94fzb/zrlog/zip/master
--2018-09-13 11:41:14-- https://codeload.github.com/94fzb/zrlog/zip/master
正在解析主机 codeload.github.com (codeload.github.com)...
解压,解压后的目录为:zrlog-master
[root@hongwei-02 home]# unzip master
[root@hongwei-02 home]# ls
git master mysql nfstestdir php-fpm pure-ftp svntest test_java virftp zrlog-master
[root@hongwei-02 home]#
将zrlog-master目录的全部文件复制到到test_java目录中。
[root@hongwei-02 home]# mv zrlog-master/* test_java/
mv:是否覆盖"test_java/README.md"? y
[root@hongwei-02 home]#
进入test_java目录推送
[root@hongwei-02 home]# cd test_java/
[root@hongwei-02 test_java]# git add .
[root@hongwei-02 test_java]# git commit -m "add zrlog"
十、安装tomcat
1、JDK安装
在192.168.10.102机子上安装jdk+tomcat
[root@lb02 ~]# hostname -i
192.168.10.102
[root@lb02 ~]#
jdk使用1.8版本,安装过程省略。
2、安装tomcat
下载解压:
[root@lb02 ~]# curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.tar.gz
[root@lb02 ~]# tar xf apache-tomcat-9.0.12.tar.gz -C /usr/local/
[root@lb02 ~]# cd /usr/local/
[root@lb02 local]# mv apache-tomcat-9.0.12/ tomcat9.0
[root@lb02 local]#
配置环境变量:
[root@lb02 local]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat9.0
export PATH=$CATALINA_HOME/bin:$PATH
[root@lb02 local]# chmod +x /etc/profile.d/tomcat.sh
[root@lb02 local]# source /etc/profile.d/tomcat.sh
[root@lb02 local]#
启动tomcat:
[root@lb02 ~]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9.0
Using CATALINA_HOME: /usr/local/tomcat9.0
Using CATALINA_TMPDIR: /usr/local/tomcat9.0/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat9.0/bin/bootstrap.jar:/usr/local/tomcat9.0/bin/tomcat-juli.jar
Tomcat started.
[root@lb02 ~]#
浏览器打开:192.168.10.102:8080
OK。tomcat安装成功。
3、配置tomcat管理用户
修改配置文件:conf/tomcat-users.xml,添加相关用户。
[root@lb02 ~]# cd /usr/local/tomcat9.0/conf/
[root@lb02 conf]# vim tomcat-users.xml
修改manager配置:
要想在其他机子访问,修改配置manager/META-INF/context.xml:
在allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />中添加允许访问的ip即可
[root@lb02 conf]# cd ..
[root@lb02 tomcat9.0]# vim webapps/manager/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.*.*"/>
停止Tomcat再启动:
[root@lb02 tomcat9.0]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat9.0
Using CATALINA_HOME: /usr/local/tomcat9.0
Using CATALINA_TMPDIR: /usr/local/tomcat9.0/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat9.0/bin/bootstrap.jar:/usr/local/tomcat9.0/bin/tomcat-juli.jar
[root@lb02 tomcat9.0]#
[root@lb02 tomcat9.0]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat9.0
Using CATALINA_HOME: /usr/local/tomcat9.0
Using CATALINA_TMPDIR: /usr/local/tomcat9.0/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat9.0/bin/bootstrap.jar:/usr/local/tomcat9.0/bin/tomcat-juli.jar
Tomcat started.
[root@lb02 tomcat9.0]#
点击首页的管理页面:
输入用户名和密码即可登录:
登录成功后如下图所示:
至此,tomcat安装成功。
十一、部署java项目-安装maven
1、下载、安装maven
maven要安装在jenkins所在的机子上,前面中,jenkins安装在192.168.10.101机子上。
下载地址:http://maven.apache.org/download.cgi
下载并解压到/usr/local/目录中
[root@lb01 ~]# curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[root@lb01 ~]# tar xf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
[root@lb01 ~]#
2、配置环境变量
[root@lb01 ~]# vim /etc/profile.d/maven.sh
export MAVEN_PATH=/usr/local/apache-maven-3.5.4
export PATH=$MAVEN_PATH/bin:$PATH
[root@lb01 ~]# chmod +x /etc/profile.d/maven.sh
[root@lb01 ~]# source /etc/profile.d/maven.sh
[root@lb01 ~]#
查看maven版本信息:
[root@lb01 ~]# mvn --version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/apache-maven-3.5.4
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
[root@lb01 ~]#
至此,maven安装完成。
3、jenkins安装maven插件
浏览器打开:192.168.10.101:8080,登录成功后。
点击:系统管理-->全局工具配置
设置全局文件路径,如下图:
新增maven,如下图:
配置jdk:
我的jdk安装路径是:/usr/local/jdk1.8
配置好maven,点击保存
十二、部署java项目-安装插件
登录jenkins之后,点击系统管理-->管理插件
检查是否安装了Maven Integration plugin和Deploy to container Plugin这两个插件。如果没有安装,则需要安装。
安装成功后,重启jenkins服务。
登录jenkins后点击新建,可以看到有maven的项目选项了:
至此,插件安装成功。
十三、部署java项目-构建job
1、创建项目
创建一个maven项目,名称为:test-java
创建成功后,页面跳转到:
填写源码管理中的url仓库地址。
如果仓库是私有的,必须配置用户密码等信息,如下:
配置好ssh私钥信息后,保存,下图中选择git。
Build设置:
Goals and options可以设置成:clean install -D maven.test.skip=true,也可以默认不设置;Root POM保持默认。
构建后操作:
添加Editable Email Notification设置:
设置好之后,保存。
2、构建项目
点击立即构建:
十四、部署java项目-手动安装jdk
1、下载jdk,并解压到/usr/local/目录,然后重命名为:/usr/local/jdk1.8/
jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、配置环境变量:
[root@lb01 ~]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
[root@lb01 ~]# chmod +x /etc/profile.d/jdk.sh
[root@lb01 ~]# source /etc/profile.d/jdk.sh
十五、部署java项目-发布war包
配置test-java工程的构建后操作:
选择Deploy war/ear to a container:
设置如下:
设置访问tomcat的用户名和密码(不支持tomcat9):
点击添加,然后设置如下:
保存退出即可。
最后,立即构建。
到tomcat所在的机子(192.168.10.102)查看一下:
[root@lb02 ~]# ls /usr/local/tomcat9.0/webapps/
docs examples host-manager manager ROOT zrlog-2.0.6 zrlog-2.0.6.war
[root@lb02 ~]#
war包已经发布过去了。
浏览器打开:http://192.168.10.102:8080/zrlog-2.0.6。
Jenkins中的工程构建tomcat只有8.x版本,而192.168.10.102机子装的是9.0,所以最终会报错。
换回8.x版本之后,重新构建即可。
tomcat8.5下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz
192.168.10.102安装tomcat8.5成功,并配置好之后
[root@lb02 local]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat8.5
Using CATALINA_HOME: /usr/local/tomcat8.5
Using CATALINA_TMPDIR: /usr/local/tomcat8.5/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar
Tomcat started.
[root@lb02 local]#
重新构建test-java工程。
部分构建信息如下:
[INFO] Reactor Summary:
[INFO]
[INFO] zrlog 2.0.6 ........................................ SUCCESS [ 1.461 s]
[INFO] common ............................................. SUCCESS [ 6.646 s]
[INFO] data ............................................... SUCCESS [ 3.105 s]
[INFO] service ............................................ SUCCESS [ 3.740 s]
[INFO] web 2.0.6 .......................................... SUCCESS [ 9.116 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.644 s
[INFO] Finished at: 2018-09-12T00:42:39+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/data/pom.xml to com.zrlog/data/2.0.6/data-2.0.6.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/data/target/data-2.0.6.jar to com.zrlog/data/2.0.6/data-2.0.6.jar
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/common/pom.xml to com.zrlog/common/2.0.6/common-2.0.6.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/common/target/common-2.0.6.jar to com.zrlog/common/2.0.6/common-2.0.6.jar
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/pom.xml to com.zrlog/zrlog/2.0.6/zrlog-2.0.6.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/service/pom.xml to com.zrlog/service/2.0.6/service-2.0.6.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/service/target/service-2.0.6.jar to com.zrlog/service/2.0.6/service-2.0.6.jar
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/web/pom.xml to com.zrlog/web/2.0.6/web-2.0.6.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/test-java/web/target/../../target/zrlog-2.0.6.war to com.zrlog/web/2.0.6/web-2.0.6.war
/var/lib/jenkins/workspace/test-java/target/zrlog-2.0.6.war is not inside /var/lib/jenkins/workspace/test-java/web/; will archive in a separate pass
channel stopped
Deploying /var/lib/jenkins/workspace/test-java/target/zrlog-2.0.6.war to container Tomcat 8.x Remote with context
[/var/lib/jenkins/workspace/test-java/target/zrlog-2.0.6.war] is not deployed. Doing a fresh deployment.
Deploying [/var/lib/jenkins/workspace/test-java/target/zrlog-2.0.6.war]
Email was triggered for: Always
Sending email for trigger: Always
Sending email to: [email protected]
Finished: SUCCESS
OK,成功。
浏览器再次打开:http://192.168.10.102:8080/zrlog-2.0.6/
OK,发布成功。