简述
概念
Jenkins是一个功能强大的应用程序,容许持续集成和持续交付项目,不管用的是什么平台。这是一个免费的源代码,能够处理任何类型的构建或持续集成。集成Jenkins能够用于一些测试和部署技术。
Jenkins是一种软件容许持续集成。java
目的
一、持续、自动地构建/测试软件项目,如CruiseControl与DamageControl。
二、监控一些定时执行的任务。linux
什么是持续集成?
持续集成是一个开发的实践,须要开发人员按期集成代码到共享存储库。这个概念是为了消除发现的问题,后来出如今构建生命周期的问题。持续集成要求开发人员有频繁的构建。最多见的作法是,每当一个代码提交时,构建应该被触发。git
搭建环境
Linux/Centos7
jdk-8u181-linux-x64.tar.gz
apache-maven-3.5.4-bin.tar.gz
git-2.9.5.tar.gz
apache-tomcat-9.0.10.tar.gz
jenkins.war(2.137)github
搭建步骤:
centos7服务器配置
查看ssh协议服务,是否被sshd进程占用web
netstat -anp|grep :22
1
启动ssh服务apache
service sshd start
1
查看防火墙状态vim
firewall-cmd --state
1
关闭防火墙centos
//临时关闭
systemctl stop firewalld.service
//禁止开机启动
systemctl disable firewalld.service
1
2
3
4
安装jdk
解压jdktomcat
tar -xzvf jdk-8u181-linux-x64.tar.gz
1
修改/etc/profile安全
export JAVA_HOME=/opt/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
当即生效
source /etc/profile
1
安装maven
解压maven
tar -xzvf apache-maven-3.5.4-bin.tar.gz
1
修改/etc/profile
export JAVA_HOME=/opt/java/jdk1.8.0_181
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
4
5
从新加载配置
. /etc/profile
1
安装git
安装好必要的依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
1
解压git
tar -xzvf git-2.9.5.tar.gz
1
安装git到/usr/local/git目录
cd git-2.9.5
make prefix=/usr/local/git all
make prefix=/usr/local/git install
1
2
3
配置环境参数
方式一:
echo "export PATH=$PATH:/usr/local/git/bin" >>/etc/profile
source /etc/profile
1
2
方式二:
vim手写修改 /etc/profile
export JAVA_HOME=/opt/java/jdk1.8.0_181
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export GIT_HOME=/usr/local/git
export PATH=$MAVEN_HOME/bin:$GIT_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
4
5
6
当即生效
source /etc/profile
1
初始化设置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
1
2
生成公钥
ssh-keygen -t rsa -C "email@example.com"
1
一直回车完成
查看公钥
cat ~/.ssh/id_rsa.pub
1
在码云写入公钥
测试链接
ssh -T git@gitee.com
1
第一次须要输入yes
返回Welcome to Gitee.com, yourname! 则为成功
在码云新建项目,并复制SSH链接
进入保存源代码的位置,克隆仓库
git clone git@github.com:michaelliao/gitskills.git
1
部署jenkins
方式一:直接用命令启动 java -jar jenkins.war –httpPort=8080
http://localhost:8080 便可访问
方式二:部署在中间件下
解压apache-tomcat-9.0.10.tar.gz
tar -xzvf apache-tomcat-9.0.10.tar.gz
1
给apche-tomcat下全部文件赋予可执行权限
cd apache-tomcat-9.0.10
chmod a+x -R *
1
2
若是要指定jdk启动tomcat能够在tomcat安装的bin文件中,找到setclasspath.sh和catalina.sh,vi编辑,在最前面加上须要指定的启动jdk和jre的路径,以下:
#指定jdk路径
export JAVA_HOME=/opt/java/jdk1.8.0_181
export JRE_HOME=/opt/java/jdk1.8.0_181/jre
1
2
3
将jenkins.war放到tomcat的webapps目录下,启动tomcat
访问:http://localhost:8090/jenkins
cat /root/.jenkins/secrets/initialAdminPassword
1
选择推荐的插件安装
补装插件:
系统管理-插件管理 rebuilder 做用:从新构建
系统管理-插件管理 safe restart 做用:安全重启
配置系统安全:
系统管理-全局安全配置
添加用户:
系统管理-管理用户-新建用户
为新用户添加权限
系统管理-全局安全配置
jenkins测试任务
添加节点:
系统管理-节点管理-新建节点
启动节点验证Linux服务器已经成功注册到jenkins上
单击刚才添加的节点 TestEnv ,再单击启动代理
若是报错:
缘由:
SSH代理的主机密钥验证
到目前为止,SSH代理是在不使用任何安全问题的主机密钥验证的状况下启动的。SSH Slaves插件 1.15的发布经过向SSH代理引入主机密钥验证策略来解决这个问题。此新功能旨在防止中间人攻击。
当您和您要链接的服务器之间的服务器假装成远程主机时,会发生中间人攻击。在这种状况下,您将链接到“中间人”,当您尝试进行身份验证并使用它们与远程主机创建链接时,能够拦截您传输的信息。
主机密钥验证是验证远程主机标识的过程。
主机密钥存储在SSH服务器下/etc/ssh/,用于标识服务器(Jenkins代理充当SSH服务器)
在SSH客户端保持主键列表是否信任下~/.ssh/known_hosts (詹金斯主充当SSH客户端)
主机密钥验证的目的是确保您链接到正确的远程主机 - 您要链接的主机。主机密钥存储在已知主机文件中(一般在下面~/.ssh/known_hosts)。当SSH客户端启动与远程主机的链接时,远程主机(SSH服务器)会发送其主机密钥。而后,SSH客户端将浏览此已知主机文件,并查找该主机的现有主机密钥。若是找到一个,它将检查远程主机发送的主机密钥是否与已知主机密钥匹配。
解决:
查看公钥
cat /etc/ssh/ssh_host_rsa_key.pub
1
vim 编辑~/.ssh/known_hosts
vim ~/.ssh/known_hosts
1
添加ip 和公钥进去
172.25.16.131 ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB…
1
参考:https://support.cloudbees.com/hc/en-us/articles/115000073552-Host-Key-Verification-for-SSH-Agents
新建任务验证jenkins任务能够远程运行在linux服务上
新建任务
单击当即构建,查看结果
实际应用
自动化部署流程图
在项目根目录添加deploy.sh文件
#!/usr/bin/env bash
#编译+部署erp项目站点
#须要配置以下参数
#项目路径,在Execute Shell中配置项目路径,命令pwd 就能够获取该项目路径
#export PROJ_PATH=这个jenkins任务在部署机器上的路径
#输入你的环境上tomcat的全路径
#export TOMCAT_APP_PATH=tomcat在部署机器上的路径
###base函数
killTomcat()
{
#pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`
pid=netstat -anp|grep 8091|awk '{printf $7}'|cut -d/ -f1
echo "tomcat Id list :$pid"
if [ "$pid" = "" ]
then
echo "no tomcat pid alive"
else
kill -9 $pid
fi
}
cd $PROJ_PATH/erp
mvn pull
mvn clean install
#调用函数,停tomcat
killTomcat
rm -rf $TOMCAT_APP_PATH/webapps/erp
rm -f $TOMCAT_APP_PATH/webapps/erp.war
#rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
#复制新的工程
cp $PROJ_PATH/erp/target/erp.war $TOMCAT_APP_PATH/webapps/
#cd $TOMCAT_APP_PATH/webapps/
#mv erp.war ROOT.war
#启动tomcat
cd $TOMCAT_APP_PATH/
sh bin/startup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
新建Jenkins任务 DeployErp
#jenkins部署完service任务后,jenkins进场自动关闭,service进程不会被关闭
BUILD_ID=DONTKILLME
#加载配置参数
. /etc/profile
#配置运行参数,对照deploy.sh文件 export PROJ_PATH=`pwd` export TOMCAT_APP_PATH=/usr/local/apache-tomcat-8091