jenkins安装及代码发布
官方文档:https://jenkins.io/zh/doc/
1、引言
产品设计成型-->开发人员开发代码-->测试人员测试功能-->运维人员发布上线
持续集成(Continuous integration,简称CI)
持续交付(Continuous delivery)
持续部署(Continuous deployment)
推荐学习网站 http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
2、Jenkins 介绍
官网 官方文档:https://jenkins.io
Jenkins 是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)基于web界面的平台。
Jenkins是一个工具集,提供了各种各样的插件
比如获取git上最新的代码
比如可以编译源代码
比如可以调用自定义的shell脚本远程执行命令
官方文档:https://jenkins.io/zh/doc/
3、Jenkins安装 (192.168.128.129:8080)
最低配置:不少于256M内存,不低于1G磁盘,jdk版本>=8
安装jdk1.8
yum install -y java-1.8.0-openjdk //jenkins是java开发的依赖jdk
wegt -O /etc/yum.repos.djenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo //安装jenkins的yum源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo --no-check-certificate 前面执行提示了安全证书未生效所以加了 --no-check-certificate 选项,也有可能是系统时间不同步,可以执行 ntpdate pool.ntp.org 同步
cat /etc/yum.repos.d/jenkins.repo 其中内容可以不执行上面wget命令而直接手写
[jenkins] name=Jenkins baseurl=http://pkg.jenkins.io/redhat gpgcheck=1
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key 导入jenkins的CA证书
yum install -y jenkins
systemctl start jenkins
grep -A 5 'An admin user has been created' /var/log/jenkins/jenkins.log
//查询admin密码
或 cat /var/lib/jenkins/secrets/initialAdminPassword //直接查询admin密码
访问 http://ip:8080/ 进行安装 192.168.128.129:8080
1)、可以选择社区推荐的插件自动安装,也可以选择自定义选择安装
2)、创建第一个管理员用户
4、Jenkins 相关目录文件
/etc/sysconfig/jenkins 主配置文件
/var/lib/jenkins/ 核心的程序文件目录,目录可以直接整个拷贝迁移使用
├── config.xml ├── hudson.model.UpdateCenter.xml ├── hudson.plugins.git.GitTool.xml ├── identity.key.enc ├── jenkins.install.InstallUtil.lastExecVersion ├── jenkins.install.UpgradeWizard.state ├── jenkins.telemetry.Correlator.xml ├── jobs //创建任务目录 ├── logs //日志目录 ├── nodeMonitors.xml ├── nodes //多节点时 ├── plugins //插件目录 ├── secret.key ├── secret.key.not-so-secret ├── secrets ├── updates ├── userContent ├── users └── workflow-libs
5、Jenkins使用配置插件(对ssh的配置)
系统管理 --> 管理插件 --> 已安装
检查是否有 “Git plugin” 和 “Publish Over SSH” 两个插件,如果没有,则需点击 “可选插件”,找到并安装
安装后,点击 “系统管理” --> “系统设置”
下拉,找到 “Publist Over SSH”
事先在jenkins服务器上生成一对密钥
# ssh-keygen -f /root/.ssh/jenkins //可设置密码也可不设置
“Passphrase”填写设置的密码,“Path to key”留空,“key”粘贴/root/.ssh/jenkins文件内容
点击左下角“增加” ,SSH Server,name自定义,Hostname填写线上web服务器的ip,Username填写root,Remote Directory填写 /
将公钥放到远程web server机器/root/.ssh/authorized_keys文件,用于使用过程中免密登录访问,可以点jenkins的 “Publist Over SSH”配置部分的 ”Test Configuration"进行测试 Success 表示成功
如果是多台web server,继续点击”增加“,重复上两步操作
点击下角的 ”保存“
6、创建任务(发布PHP代码)
点击“新建”,任务名称自定义,比如 test,选择 “构建一个自由风格的软件项目(Freestyle project)” 点击下方的 “确定”
描述,自定义
"源码管理" 选择 "Git"
"Repository URL" 填写项目的 git 地址,如果是公共项目可以不设置下面的参数,直接填写一个git地址即可,若是私有项目,需要填写认证信息,比如可以选择"SSH Username whith private key",然后设置Username以及private key
注意,jenkins服务器上需要安装git
“Branches to build”默认为 */master,发布的分支为master,保持默认
”构建触发器“ 和 “构建环境” 留空
“构建”,选择"Send files or execute commands over SSH"
SSH Server,Name 选择对应的服务器,Transfers,Source files 填写 **/** ,表示全部文件
Remove prefix可以指定裁掉的前缀目录,这里留空即可,Remote directory 指定远程服务器上代码存放路径,比如/data/wwwroot/www.aaa.com,Exec command 为文件传输完成后要执行的命令,比如可以是更改文件权限的命令,设置完成后点击“Add Transef Set”(可以传输多个),如果还有另外的机器,可以点击“Add Server”重复以上操作
最后点击左下角的“保存”
完成以上操作后,就可以使用这个刚创建的任务去工作了。
选择任务名称进入的,点击左面的“立即构建(Build Now)”(或者任务视图中有可操作构建按钮),就能把git上的代码发布到指定的服务器上。
点击左下角的#1/#2...,然后再点击“Console Output”可以查看输出日志
7、Jenkins配置邮件--内置邮件
系统管理-->系统设置-->Jenkins Location 先设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致。
向下拉,找到 “邮件通知” 栏
填写SMTP服务器,点右侧的高级,打勾 “使用SMTP认证”,填写用户名密码,如果使用的是ssl协议,还需要在这里打勾,smtp端口默认为 25
可以打勾 “通过发送测试邮件测试配置”,然后填写接收邮件的地址,点右侧的Test configuration
然后就是到已经构建过的job里去配置接收邮件的地址了。在最下面 “构建后操作” 那一栏,找到E-mail Notification,Recipients填写收邮件人
邮件只会在job构建失败时发送
8、Jenkins配置邮件--插件email-ext
插件名字Email Extension Plugin,默认已经安装
系统管理-->系统设置-->Extended E-mail Notification
填写SMTP server (如smtp.qq.com),[高级]点击Use SMTP Authentication,填写用户名、密码、SMTP port等
到对应构建任务中去配置一下,下拉到“构建后操作”
点击 “增加构建后操作步骤” ,选择 “Editable Email Notfictation”,其中Project Recipient List 为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用逗号分隔
点击右下角的 “Advanced settings",定位到 ”Triggers",然后点击下方的 “Add Triger”,可以增加发邮件的条件。
参考文章 https://www.cnblogs.com/zz0412/p/jenkins_jj_01.html
9、Jenkins破解管理员密码
# cat /var/lib/jenkins/users/admin_6452924050092568885/config.xml |grep password
<passwordHash>#jbcrypt:$2a$10$rPg/ozd6c9eJRboFrKo.Zuw.G562CssY0q9Z19I8IUntTY3BlYy.O</passwordHash>
对应了密码 00fae69f05664e479047a60c53f02b12
# vim /var/lib/jenkins/users/admin_6452924050092568885/config.xml
<passwordHash>#jbcrypt:$2a$10$7cmrq4RP45lnXPjKmoCCnO3hr.hYN04BqSm3Y460h8cGpb.ECAAjm</passwordHash>
对应密码为 jenkins@123
# systemctl restart jenkins 重启后生效
密码正常修改路径是页面 右上角 点 “Admin” 用户名--> 设置 进入页面配置密码
10、Jenkins部署java项目-之准备私有仓库(192.168.128.131)及开源java代码(zrlog)
java的项目是需要编译和打包的
编译和打包用maven完成,所以需要安装maven
本次实验,采用git私有仓库的形式,涉及到配置密钥
准备工作:
申请一个私有git仓库(使用自建的gitlabGitlab.note)
生成密钥对 # ssh-keygen -t rsa ,并将公钥放到git服务端,然后可以克隆gitlab仓库数据
# cd /home/gitlab_repository
# git clone git@gitlab.example.com:java/java_test.git
下载zrlog的源码 https://codeload.github.com/94fzb/zrlog/zip/master
# cd /home/gitlab_repository
# wget https://codeload.github.com/94fzb/zrlog/zip/master
# unzip master //会解压出一个目录 zrlog-master
# mv zrlog-master/* java_test/ //移动到 java_test/目录下
将解压后的源码推送到gitlab远程创库
# cd java_test/
# git add .
# git push
11、Jenkins部署java项目-web服务器tomcat (192.168.128.128:8080)
在web服务器上安装 jdk+tomcat,yum install -y java-1.8.0-openjdk
其中 jdk 可以为 openjdk,版本1.8
tomcat 二进制包安装
# wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
# mv apache-tomcat-8.5.42 /usr/local/tomcat
修改tomcat配置 关于tomcat参考点击
# vim /usr/local/tomcat/conf/tomcat-users.xml //增加如下内容,是因为jenkins需要管理员用户这个接口,所以需要到tomcat中配置
<role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-stats"/> <user name="admin" password="jenkins123" role="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>
# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml //增加允许访问IP:192.168.128.*
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.128.*" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
关闭tomcat # /usr/local/tomcat/bin/shutdown.sh
启动tomcat # /usr/local/tomcat/bin/startup.sh
配置好后 http://192.168.128.128:8080/ 进入页面登录点击任务再次进入页面都会有用户登录的弹窗
登录后点击相关按键可进入 manager页面http://192.168.128.128:8080/manager/html
12、Jenkins部署java项目-安装maven
安装maven
maven用于编辑java并打包
下载地址:https://maven.apache.org/download.cgi
# wget # wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz 下载二进制包后手动安装(jenkins在插入管理可以找到Maven Release Plug-in安装包)
# tar zxvf apache-maven-3.6.1-bin.tar.gz -C /usr/local/
# /usr/local/apache-maven-3.6.1/bin/mvn --version
jenkins配置mave
系统管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->
Maven 配置(Mave Configuration)
填写信息如下:
默认 settings 提供(Default settings provider): Settings file in filesystem
文件路径(File Path): /usr/local/apache-maven-3.6.1/conf/settings.xml
默认全局 settings 提供(Default global settings provider): Global settings filesystem
文件路径(File Path): /usr/local/apache-maven-3.6.1/conf/settings.xml
Maven 安装
填写信息如下:
Name: maven-3.6.1
MAVEN_HOME: /usr/local/apache-maven-3.6.1
可以选择自动安装(Install automatically)这里不勾选自动安装。
保存(save)
13、Jenkins部署java项目-安装插件
系统管理-->管理插件(Manage Plugins),检查是否已经安装 Maven Integration plugin(创建maven相关项目任务时要用到) 和 Deploy to container Plugin(用于把war包发布到远程),若没有安装则需要安装这两个插件(在jenkins上找到可直接安装)。
安装完插件后,需要重启jenkins:systemctl restart jenkins
14、Jenkins部署java项目-构建job
登录jenkins,点击“新建Item” 进入页面填写如下内容:
输入一个任务名称:(任务名称自定义)--选择 “构建一个maven项目”-->点击“确定” 后会跳转到一个新页面(这个新建的任务项目页面)
General页面填写:
描述: 根据自身要做的事情任务项目进行描述
源码管理
Git
Repositories
Repository URL git@gitlab.example.com:java/java_test.git
Credentials 添加jenkins机器上的密钥,用于认证git(已经上传过公钥给git上)
添加凭据(密钥)
Domain 全局凭据(unrestricted)
类型(Kind) SSH Username with private key
范围(Scope) 全局(Jenkins,nodes,items,all child items,etc)
Username git
Private Key 点选 Enter directly,然Key中ADD密钥
选择 git (当前上一步新加的git认证)
构建触发器 、构建环境 、Pre Steps 保持默认
Build
Root POM 默认 pom.xml 不做修改
Goals and options 编辑mave时用到的一些选项,可以留空,当前咱们这填写了: clean install -D maven.test.skip=true
Post Steps、构建设置 保持默认
构建后操作
Editable Email Notification
Project Recipient List 加入邮箱地址$DEFAULT_RECIPIENTS,254266155@qq.com
应用,保存。可以偿试 构建job,查看 控制台输出,有如下报错:
[ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] Unable to locate the Javac Compiler in: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/../lib/tools.jar Please ensure you are using JDK 1.4 or above and not a JRE (the com.sun.tools.javac.Main class is required). In most cases you can change the location of your Java installation by setting the JAVA_HOME environment variable. [INFO] 1 error [INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for zrlog 2.1.3: [INFO] [INFO] zrlog .............................................. SUCCESS [ 30.534 s] [INFO] common ............................................. FAILURE [01:39 min] [INFO] data ............................................... SKIPPED [INFO] service ............................................ SKIPPED [INFO] web ................................................ SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:13 min [INFO] Finished at: 2019-06-13T20:32:33+08:00 [INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project common: Compilation failure [ERROR] Unable to locate the Javac Compiler in: [ERROR] /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/../lib/tools.jar [ERROR] Please ensure you are using JDK 1.4 or above and [ERROR] not a JRE (the com.sun.tools.javac.Main class is required). [ERROR] In most cases you can change the location of your Java [ERROR] installation by setting the JAVA_HOME environment variable. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException [ERROR] [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn <goals> -rf :common Waiting for Jenkins to finish collecting data
java配置出错,需要重新配置。可能与当前使用安装的openjdk有关,考虑手动安装jdk(也可以使用jenkins)
系统管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->JDK 路径下可以选择自动安装,也可以手动安装后配置 别名 和 JAVA_HOME
15、Jenkins部署java项目-手动安装JDK
安装
# cd /usr/local/src/
JDK官网下载http://www.oracle.com/techZnetwork/java/javase/downloads/jdk8-downloads-2133151.html
# tar zxvf jdk-8u211-linux-x64.tar.gz
# mv jdk1.8.0_211/ /usr/local/jdk1.8
# systemctl restart jenkins
在jenkins上配置java_home
系统管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->JDK
JDK安装栏填写如下内容
别名 : jdk1.8
JAVA_HOME: /usr/local/jdk1.8
再去构建成功,可以查看 控制台输出 日志,如下为打好的war包,但还没有上传到web(tomcat)服务上去
/var/lib/jenkins/workspace/测试java代码发布到web/target/zrlog-2.1.3.war
16、Jenkins部署java项目-发布war包
进入项目页面-->配置-->构建后操作 进行如下配置:
增加构建后操作步骤-->选择 Deploy war/ear to a container 填写:
WAR/EAR files : ”**/*.war“
Contex path: 留空
Containers: 选择Tomcat 8.x(根据自动web服务器部署的应用选择)
Tomcat URL: 填写war发要发布到的机器url,如 http://192.168.128.128:8080/
Credentials: 点击右侧的ADD,添加用户名和密码(name="admin" password="jenkins123")
应用,保存
然后再去构建,同时可以看控制台输出 日志信息
同时根据信息情况可以到web服务器(192.168.128.128)上看是否相关内容发布过来 /usr/local/tomcat/webapps