微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

#Jenkins

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并上传

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

jar包名称使用 &&& 替代

#!/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.shstop.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.shstop.shupdate.sh放在jenkinsworkspace目录下,认位置为:/var/lib/jenkins/workspace

5.修改项目的构建配置

使用shell脚本,在项目构建成功之后将start.shstop.shupdate.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] 举报,一经查实,本站将立刻删除。

相关推荐