Jenkins
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具
CI/CD是什么?
**CI(Continuous integration,持续集成)**持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
**CD(Continuous Delivery, 持续交付)**是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。如果代码没有问题,可以继续手动部署到生产环境。
文档步骤所涉及的Jenkins部署在130服务器,将项目部署到128服务器
1.环境安装
1.安装jdk
#1.解压文件
[root@localhost java]# tar -zxvf jdk1.8.0_201.tar
#2.配置环境变量
[root@localhost java]# vim /etc/profile
#3.在 profile 文件最后加上
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH
export CLAsspATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
#4.使配置生效
[root@localhost java]# source /etc/profile
#5.最后输入 java 命令测试
[root@localhost java]# java -version
2.安装maven
[root@localhost java]# yum -y install maven
3.安装git
[root@localhost java]# yum -y install git
2.安装jenins
[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
#如果失败
[root@localhost /]# yum install epel-release # repository that provides 'daemonize'
#安装
[root@localhost /]# yum install -y jenkins
3.启动jenkins
[root@localhost /]# service jenkins start
4.配置jenkins
参考:https://www.cnblogs.com/wfd360/p/11314697.html
浏览器输入服务器 ip:8080 访问
1.获取管理员密码
[root@localhost /]# vim /var/lib/jenkins/secrets/initialAdminPassword
2.根据需要安装插件
3.系统配置 System Configuration
1.安装插件 Manage Plugins
Publish Over SSH
Deploy to container Plugin
2.全局配置 Configure System
Jenkins Location #jenkins地址
Jenkins URL
http://192.168.186.130:8080/
#前提安装了插件 Publish Over SSH 否则找不到
Jenkins SSH Key
Passphrase #登录服务器的密码
••••••••••••••••••••
SSH Servers
SSH Server
Name #服务部署的服务器名称(自己定)
128
Hostname #服务器地址
192.168.186.128
Username #服务器登录用户名
root
Remote Directory #服务存放的地址
/opt/module/
4.创建项目和配置
1.新建Item
# 1.输入任务名称
# 2.选择醒目构建风格
2.General
GitHub 项目
项目 URL #git项目地址
https://gitee.com/****/jenkins-test.git/
3.源码管理
Git
Repositories
Repository URL
https://gitee.com/****/jenkins-test.git/
#如果不是开源的,需要配置凭据
Branches to build
指定分支(为空时代表any)
*/master
4.构建触发器
根据个人需要,如需要提交代码触发自动构建,本地jenkins需要做内网穿透;
#1.配置构建触发器
触发远程构建 (例如,使用脚本)
身份验证令牌
test_token
#使用http://192.168.xxx.xxx/job/hello/build?token=test_token 该项目就会发起一次构建项目,即拉取代码打包部署操作(具体的地址,请看自己配置的身份验证令牌下面的提示)
#2.在gitxxx上配置WebHooks
#2.1 Payload URL #内网穿透的地址
http://xxx.xxx.xxx.xxx/job/hello/build?token=test_token
#2.2 Content type
application/x-www-form-urlencoded
#2.3 Which events would you like to trigger this webhook? 触发的时间
just the push event #当push时,进行回调
#2.4 激活
勾选Active
5.构建
#增加构建步骤 invoke top-level Maven targets
invoke top-level Maven targets
目标
clean install #先清理再打包
6.构建后操作
#增加构建后操作步骤 Send build artifacts over SSH
SSH Publishers
SSH Server
Name
128 #之前配置的服务器名称
Transfers
Transfer Set
Source files #打包后的jar包相对地址
target/jenkins-test-0.0.1-SNAPSHOT.jar
Remove prefix #去掉地址前缀
target/
Remote directory #远程存放目录,不存在会自动创建
hello
Exec command #上传到服务器执行的命令
cd /opt/module/
mv jenkins-test-0.0.1-SNAPSHOT.jar hello/
cd hello
./stop.sh
./start.sh
start.sh
#!/bin/bash
export JAVA_HOME=/usr/jdk1.8.0_301 #jdk路径
echo ${JAVA_HOME}
echo 'Start the program : jenkins-test-0.0.1-SNAPSHOT.jar'
chmod 777 jenkins-test-0.0.1-SNAPSHOT.jar #修改权限
echo '-------Starting-------'
nohup ${JAVA_HOME}/bin/java -jar jenkins-test-0.0.1-SNAPSHOT.jar >> test.log 2>&1 & #后台执行,输出到test.log
echo 'start success'
stop.sh
#!/bin/bash
echo "Stop Procedure : jenkins-test-0.0.1-SNAPSHOT.jar"
pid=`ps -ef |grep java|grep jenkins-test-0.0.1-SNAPSHOT.jar|awk '{print $2}'` #查询当前项目运行的pid
echo 'old Procedure pid:'$pid
if [ -n "$pid" ]
then
kill -9 $pid #如果存在则杀死
fi
start.sh和stop.sh执行失败的问题:
原因是windows环境下,每一行的结尾是\n\r,而Linux环境下,每一行结尾是\n。使用cat -A filename
可以看到每行的结尾后面多出了一个^M
解决:执行 sed -i 's/\r$//' stop.sh
即可
7.Build Now
输入jps查看
浏览器输入ip:端口查看
8.改进构建
由于每次都需要提前修改start.sh和stop.sh,所以编写个shell脚本去自动修改
1.修改start.sh
#!/bin/bash
export JAVA_HOME=/usr/jdk1.8.0_301
echo ${JAVA_HOME}
echo 'Start the program : &&&.jar'
chmod 777 &&&.jar
echo '-------Starting-------'
nohup ${JAVA_HOME}/bin/java -jar &&&.jar >> console.log 2>&1 &
echo 'start success'
2.修改stop.sh
#!/bin/bash
echo "Stop Procedure : &&&.jar"
pid=`ps -ef |grep java|grep &&&.jar|awk '{print $2}'`
echo 'old Procedure pid:'$pid
if [ -n "$pid" ]
then
kill -9 $pid
fi
3.添加一个update.sh
获取jar包的名称,将start.sh
和stop.sh
中的&&&
替换为jar包名称
#!/bin/bash
for file in $(ls ./)
do
if [ "${file##*.}" = "jar" ]
then
filename="${file%.*}"
sed -i 's/&&&/'$filename'/g' start.sh
sed -i 's/&&&/'$filename'/g' stop.sh
fi
done
4.上传到jenkins服务器
将start.sh
、stop.sh
、update.sh
放在jenkins
的workspace
目录下,默认位置为:/var/lib/jenkins/workspace
5.修改项目的构建配置
使用shell脚本,在项目构建成功之后将start.sh
、stop.sh
、update.sh
发送到项目部署目录
#Execute shell
mvn clean install
echo "...构建BRANCH/TAG ${branch} 完成, 准备开始部署流程..."
cd ..
scp start.sh [email protected]:/opt/module/
scp stop.sh [email protected]:/opt/module/
scp update.sh [email protected]:/opt/module/
echo "上传完成"
使用密钥解决scp命令需要输入密码问题
目的:
#这里假设主机A(192.168.100.3)想免密SSH登陆B(192.168.100.4)或向B拷贝(scp)文件。
步骤:注意先切到jenkins用户:
#1、切换到jenkins用户
[root@localhost /]# su jenkins
#2、在主机A上执行如下命令来生成配对密钥:
[jenkins@localhost /]# ssh-keygen -t rsa
#3、遇到提示回车默认即可,公钥被存到用户目录下.ssh目录,比如root存放在: /root/.ssh/id_rsa.pub
#4、将主机A~/.ssh 目录中的 id_rsa.pub 文件复制到主机B的 ~/.ssh/ 目录中,并改名为 authorized_keys
[jenkins@localhost /]# scp ~/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
#5、此时在A中用SSH登录B或向B拷贝文件,将不需要密码
注意:切换jenkins用户失败请查看 vim /etc/passwd
#将/bin/false 修改为/bin/bash
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
6.修改项目构建后的操作
#Exec command
cd /opt/module/
mv jenkins-test-0.0.1-SNAPSHOT.jar start.sh stop.sh update.sh hello/
cd hello
mv jenkins-test-0.0.1-SNAPSHOT.jar jekins-test.jar
./update.sh
./stop.sh
./start.sh
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。