5

Jenkins JNLP Agent的配置

 3 years ago
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

如何用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_URLJNLP_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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK