Jenkins做持续集成非常好用,应用越来越多,单机资源不够使用,是时候研究下分布式使用了。
目的
提交代码到git,让jenkins自动拉取代码,打包成jar,然后分发到另一台机器,并允许jar。
假设主节点为A 从节点为B,A上部署了jenkins
前提
机器都安装jdk
centos安装open-jdk8
yum install -y java-1.8.0-openjdk-devel
机器安装Jenkins
不懂持续集成和jenkins的,看我以前的文章详解https://www.jianshu.com/p/0a2d08e0f6da
slave节点为linux平台
1. 节点配置
系统管理--》管理节点--》新建节点
启动方法: Linux 选择 Launch slave agents via SSH
Host Key Verification Strategy: Non verifying Verification Strategy(对应Credentials为用户名/密码方式)
image
master节点的配置可以在节点管理中或者在系统管理--》系统设置
用法:
尽可能的使用这个节点,默认的,表示job会随机的使用可以使用的节点
只允许运行绑定到这台机器的Job,表示job会到指定机器运行
配置验证方式
A机器执行 ssh-keygen 然后一直回车
执行 ssh-copy-id 用户名@ip地址
如
ssh-copy-id root@123.4.4.22
使得A机器可以访问B机器
然后把A机器的私钥添加到 验证管理
高级配置
比如修改java path路径
image.png
image.png
image.png
2. 节点运行结果
大致步骤: 通过节点配置的credentials连接到slave服务器---》输出当前用户的环境变量---》检查节点服务器java版本---》开启sftp传输slave.jar到节点服务器的工作目录--》java -jar启动节点服务器上的slave进程
image
当标签和服务器名称一样时这里不会显示标签
image
3. job配置
General中勾选:Restrict where this project can be run
输入节点的名称或标签(jenkins所在机子默认节点名称master),从而关联job到节点服务器。注意:下拉框选中节点名称或标签时末尾会有空格需要手动去掉该空格。
image
4. job运行结果
节点服务器的job工作目录:节点配置的远程工作目录/workspace/
image
slave节点为windows平台
1. 节点配置
Launch method: windows 选择 Launch slave agent via java Web Start
2. 运行节点
方式一 Launch agent from browser: 点击Launch图标下载slave-agent.jnlp---》拷贝slave-agent.jnlp到配置的远程工作目录---》双击运行文件(会检测你本地的java版本是否合适);或者直接输入:javaws D:\jenkins-workspace\slave-agent.jnlp。
方式二 Run from agent command line
image
JNLP(Java Network Launching Protocol,java网络加载协议 )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。
javaws命令运行.jnlp文件,javaws -viewer在java控制面板中显示高速缓存查看器,可看到客户端已经安装的webstart应用程序
我的配置
image.png
image.png
启动shell
BUILD_ID=DONTKILLME
echo "当前路径:"
pwd
# 定义变量
appName="zhiyuan-1.0.0.jar"
jenkinsDir="/home/jenkins/workspace/zhiyuan/target/$appName"
runDir="/home/zhiyuan"
appDir="/home/zhiyuan/$appName"
mkdri runDir
echo "停止应用"
PID=$(ps -ef | grep $appName | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo "应用已经是停止状态"
else
echo kill $PID
kill $PID
fi
echo "移动应用目录"
rm -rf $appDir
cp $jenkinsDir $runDir
echo "启动应用"
cd $runDir
nohup java -jar $appDir > log.log &
echo "启动成功"