![](/style/images/good.png)
![](/style/images/bad.png)
Jenkins JNLP Agent的配置
source link: https://note.qidong.name/2019/01/jenkins-jnlp-agent/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Jenkins JNLP Agent的配置
2019-01-26 21:18:38 +08 字数:928 标签: CI Ansible
Jenkins是一个单Master多Slave的集群架构(莫提什么Gearman)。 Jenkins Master是另一个比较大的话题,这里只谈Slave Agent。 (以前大多叫Slave,现在大多叫Agent。)
Jenkins的Agent大概分两种。 一是基于SSH的,需要把Master的SSH公钥配置到所有的Agent宿主机上去。 二是基于JNLP的,走HTTP协议,每个Agent需要配置一个独特的密码。 基于SSH的,可以由Master来启动;基于JNLP的,需要自己启动。 (1.611以后据说可以由Master启动了,但这版本5天前才更新,孤还没玩明白。)
本文介绍JNLP的Agent如何用systemd守护启动。 文末提供了Ansible Playbook的示例。
简单启动 ¶
![Jenkins Node](https://jenkins.io/doc/book/resources/hardware-recommendations/jnlp-slave.png)
如何用systemd守护启动在Jenkins Master新增Node以后,可以在界面上获取启动命令及agent.jar。 (上图虽然是官方的,但比较老了,仍然显示的是slave.jar。) 启动命令的大概形式如下:
java -jar agent.jar \
-jnlpUrl http://jenkins.example.com/computer/NODE-NAME/slave-agent.jnlp \
-secret a3868b087f3935cbb5195b26b4732aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
-workDir "/home/jenkins/"
简单启动,默认在前台,而且无法开机自启。 因什么原因挂掉以后,也不会自动重启。 所以,这只是用来验证的启动方式,不推荐在生产环境使用。
自动启动 ¶
这里的自动启动方案,是用systemd来守护。 虽然也有其它的可选项,比如supervisor。
安装JRE ¶
sudo apt install openjdk-8-jre
下载agent.jar
¶
mkdir /opt/jenkins
curl http://jenkins.example.com/jnlpJars/agent.jar -o agent.jar
准备env.sh
¶
在/opt/jenkins/env.sh
中,写入以下环境变量:
JNLP_URL=http://jenkins.example.com/computer/NODE-NAME/slave-agent.jnlp
JNLP_SECRET=a3868b087f3935cbb5195b26b4732aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
JNLP_WORKDIR=/home/jenkins/
其中,JNLP_URL
和JNLP_SECRET
需要根据节点信息而修改。
配置systemd ¶
新增文件/etc/systemd/system/jenkins-agent.service
:
[Unit]
Description=Jenkins agent of http://jenkins.example.com
[Service]
User=jenkins
Group=jenkins
Type=simple
EnvironmentFile=/opt/jenkins/env.sh
ExecStart=/usr/bin/java -jar /opt/jenkins/agent.jar -jnlpUrl $JNLP_URL -secret $JNLP_SECRET -workDir "$JNLP_WORKDIR"
ExecStop=/usr/bin/pkill -f 'java -jar /opt/jenkins/agent.jar'
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
启动 ¶
配置完成后,可以通过systemctl
管理,实现开机自启。
sudo systemctl daemon-reload
sudo systemctl enable jenkins-agent.service
sudo systemctl start jenkins-agent.service
参考 ¶
Ansible Playbook ¶
---
- hosts:
- jenkins
remote_user: root
tasks:
- name: Install JRE 8
apt:
name: openjdk-8-jre
- name: Create user jenkins
user:
name: jenkins
comment: jenkins slave agent
shell: /bin/bash
groups: docker
append: yes
- name: mkdir /opt/jenkins
file:
name: /opt/jenkins
state: directory
- name: Download jar
get_url:
url: http://jenkins.example.com/jnlpJars/agent.jar
dest: /opt/jenkins/agent.jar
- name: Config systemd
copy:
src: ./jenkins/jenkins-agent.service
dest: /etc/systemd/system/jenkins-agent.service
- name: Initialize env.sh
file:
name: /opt/jenkins/env.sh
state: file
# Config env.sh before start agent
# - name: Start in systemd
# systemd:
# name: jenkins-agent
# state: started
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK