詹金斯奴隶自我注册

alo*_*ras 4 jenkins jenkins-plugins jenkins-cli

我正在创建一个 Jenkins 主/从集群,但我无法找到让新从服务器自动向主服务器注册的方法。

我目前的设置是运行一些 Terraform 脚本来创建主站和 5 个从站。然后我必须登录到主节点并管理 Jenkins -> 管理节点 -> 新节点并手动创建我想要的节点数。

然后我 RDP 进入我的奴隶并运行命令java -jar agent.jar -jnlpUrl http://yourserver:port/computer/agent-name/slave-agent.jnlp。这工作得很好,但我想要一种方法来自动增加/减少代理的数量,而不必每次创建一个新的时都手动登录到从属。

是否有关于如何动态自注册节点的插件或一些我遗漏的文档?

注意:这仅适用于 Windows 节点。我正在使用 Kubernetes 插件来自动扩展/缩小 linux 节点,但是 Kubernetes 没有稳定的 Windows 节点支持,所以我不能使用它。我必须支持经典的 .NET 应用程序(不是 .NET Core),所以我必须在 Windows 节点上构建。

Dan*_*iel 7

这是我在 Linux 上使用的 bash 脚本,它可以很容易地适应 Windows。

#!/bin/bash

set -xe

MASTER_URL=$1
MASTER_USERNAME=$2
MASTER_PASSWORD=$3
NODE_NAME=$4
NUM_EXECUTORS=$5

# Download CLI jar from the master
curl ${MASTER_URL}/jnlpJars/jenkins-cli.jar -o ~/jenkins-cli.jar

# Create node according to parameters passed in
cat <<EOF | java -jar ~/jenkins-cli.jar -auth "${MASTER_USERNAME}:${MASTER_PASSWORD}" -s "${MASTER_URL}" create-node "${NODE_NAME}" |true
<slave>
  <name>${NODE_NAME}</name>
  <description></description>
  <remoteFS>/home/jenkins/agent</remoteFS>
  <numExecutors>${NUM_EXECUTORS}</numExecutors>
  <mode>NORMAL</mode>
  <retentionStrategy class="hudson.slaves.RetentionStrategy\$Always"/>
  <launcher class="hudson.slaves.JNLPLauncher">
    <workDirSettings>
      <disabled>false</disabled>
      <internalDir>remoting</internalDir>
      <failIfWorkDirIsMissing>false</failIfWorkDirIsMissing>
    </workDirSettings>
  </launcher>
  <label></label>
  <nodeProperties/>
  <userId>${USER}</userId>
</slave>
EOF
# Creating the node will fail if it already exists, so |true to suppress the
# error. This probably should check if the node exists first but it should be
# possible to see any startup errors if the node doesn't attach as expected.


# Run jnlp launcher
java -jar /usr/share/jenkins/slave.jar -jnlpUrl ${MASTER_URL}/computer/${NODE_NAME}/slave-agent.jnlp -jnlpCredentials "${MASTER_USERNAME}:${MASTER_PASSWORD}"
Run Code Online (Sandbox Code Playgroud)

这有点类似于 docker slave 映像中包含的代理启动器,但在运行 jnlp 之前,它使用 jenkins cli 在 jenkins 上创建节点。一些参数显然需要适应窗口。

编辑:并获得该 xml 最简单的方法是在 web ui 中创建一个你想要的节点,然后使用 jenkins-cli 来检索它。


小智 1

我一直在 AWS 上对此进行测试。

https://plugins.jenkins.io/swarm

虽然您无法在 AWS 上使用广播,但您可以添加到 java 命令并指定 jenkins master 的 LB 的主机名或 URL。

我还没有检查它在 Windows 上的工作原理,但很快就会这样做,并让您知道它是如何进行的。