这篇文章将引导你使用 docker 启动一个 Jenkins 代理来运行构建,接下来我们将在 docker 容器中运行 Jenkins 代理。

本文假设我们已经运行了 Jenkins,所以先打开 Jenkins 主页 http://localhost:8080,然后按照以下步骤操作:

  1. 单击左侧的Manage Jenkins
  2. System Configuration 部分下,单击 Manage Nodes and Clouds
  3. 在左侧,单击 New Node
  4. 起个名字
    • 这里我起名叫 smith
    • 这个名字在后面会用到所以我们现在需要记住它。
  5. 单击 Permenant Agent 单选框。
  6. 单击 OK

现在我们将进一步配置代理,你可以尝试不同的设置;但为了让我们保持一致,请暂时按照以下步骤操作。

  1. 对于 Description 字段,请填写一些描述性的内容说明它的用途。
    • 示例里我输入了 This is agent smith,你可以输入任何你需要的描述内容。
  2. Number of executors 的数量设置为 1
    • Executors 定义了一个代理可以同时运行多少个 Jenkins Job。
    • 这个需要根据节点资源来配置, CPU/内存越多可以运行的并发作业就越多。
  3. Remote root directory 字段中输入/home/jenkins/agent/
  4. Label 允许我们将特定的工作与特定的代理联系起来。
    • 例如拥有运行特定软件(如 iOS 版本)的 Mac、Windows 和 Linux 代理。
    • 目前,这对我们来说不重要,因此我们将其留空。
  5. 继续并单击 Save

完成上述操作并单击 Save 后,你将看到代理列表。如你所见,列出了 smith
在这里插入图片描述

点击smith,我们可以看到连接细节。

你应该能够看到如下文本:

java -jar agent.jar -jnlpUrl http://localhost:8080/computer/smith/jenkins-agent.jnlp -secret 91af70f19b975b97eef81d42f624f1c44bl1d216b380905c9c27531d2259d823 -workDir "/home/jenkins/agent/"

复制-secret选项中的值。在这种情况下,它是91af70f19b975b97eef81d42f624f1c44bl1d216b380905c9c27531d2259d823,但你的秘密会有所不同。

在终端中,现在运行以下命令,替换

  • <secret-from-above>替换成-secret选项中的值。
  • <agent-name-from-above>替换成你输入的代理名称。
  • http://jenkins-controller:8080 替换成你自己的链接地址。
docker run --rm \
 -eJENKINS_SECRET=<secret-from-above> \
 -eJENKINS_URL=http://jenkins-controller:8080 \
 -eJENKINS_AGENT_NAME=<agent-name-from-above> \
 --network jenkins \
 --init \
 -it \
 jenkins/inbound-agent:jdk11

这会将 jenkins/inbound-agent 图像下拉到你的机器上并运行起来。所有不同类型的代理都可以在Docker Hub上找到。

现在让我们回到浏览器中的 Jenkins。你现在应该smith在左侧看到一个代理。
在这里插入图片描述
如你所见,我们现在有两个构建执行器:mastersmith

下一步,我们不想在控制器容器 ( master) 上运行任何构建,所以接下来我们配置 Jenkins 阻止构建在 master 运行。

  1. 单击左侧的 Manage Jenkins
  2. System Configuration 部分下,单击 Configure System
  3. 滚动到 # of executors 并将值从2更改为0。
  4. 单击 Save

当 Jenkins 现在再次加载完成时,你将只看到smith代理。

我们现在试着运行上一篇文章中的 hello-world 作业,看看它如何在代理smith内部执行。

  1. 单击列表中的 hello-world 作业。
  2. 单击左侧的 Build Now
  3. 稍等片刻,构建作业将出现在构建历史中。
  4. 单击蓝色的那个球,可以看到 “Hello World” 的输出。
    Jenkins Hello World 在代理上运行

Jenkins Hello World 在具有输出的代理上运行

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐