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为用户名/密码方式)
- master节点的配置可以在节点管理中或者在系统管理—》系统设置
- 用法:
- 尽可能的使用这个节点,默认的,表示job会随机的使用可以使用的节点
- 只允许运行绑定到这台机器的Job,表示job会到指定机器运行
配置验证方式
A机器执行 ssh-keygen 然后一直回车
执行 ssh-copy-id 用户名@ip地址
如
ssh-copy-id root@123.4.4.22
使得A机器可以访问B机器
然后把A机器的私钥添加到 验证管理
高级配置
比如修改java path路径
2. 节点运行结果
- 大致步骤: 通过节点配置的credentials连接到slave服务器—-》输出当前用户的环境变量—-》检查节点服务器java版本—-》开启sftp传输slave.jar到节点服务器的工作目录—》java -jar启动节点服务器上的slave进程
- 当标签和服务器名称一样时这里不会显示标签
3. job配置
- General中勾选:
Restrict where this project can be run
- 输入节点的名称或标签(jenkins所在机子默认节点名称master),从而关联job到节点服务器。注意:下拉框选中节点名称或标签时末尾会有空格需要手动去掉该空格。
4. job运行结果
- 节点服务器的job工作目录:节点配置的远程工作目录/workspace/
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
JNLP
(Java Network Launching Protocol,java网络加载协议 )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。javaws
命令运行.jnlp文件,javaws -viewer在java控制面板中显示高速缓存查看器,可看到客户端已经安装的webstart应用程序
我的配置
启动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 "启动成功"