跳过正文
  1. Posts/

如何使用 Jenkins Docker Cloud

·603 字·2 分钟· ·
沈显鹏
作者
沈显鹏
DevOps & Build 工程师 | Python 爱好者 | 开源贡献者
目录

最近我在进行 Jenkins 实例迁移,这次我选择使用 Jenkins Docker Cloud,而不是在 Jenkinsfile 中直接使用 docker { ... }

Jenkins Docker Cloud 插件
#

首先,你需要安装 Jenkins Docker Cloud 插件:
https://plugins.jenkins.io/docker-plugin/

Jenkins Docker Cloud 是一个允许 Jenkins 使用 Docker 容器作为构建节点的插件。

所以,你需要配置一个启用 Remote API 的 Docker 主机,如下所示。


启用 Docker Remote API
#

Jenkins Controller 通过 REST API 连接到 Docker 主机。
启用 Docker 主机的远程 API,请按照以下步骤操作:

Step 1:启动一个虚拟机并安装 Docker。你可以根据所使用的 Linux 发行版,参考官方文档进行安装。确保 Docker 服务已启动并正常运行。

Step 2:登录服务器,打开 Docker 服务文件 /lib/systemd/system/docker.service,找到 ExecStart 这一行,并替换为:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock

Step 3:重新加载并重启 Docker 服务:

systemctl daemon-reload
service docker restart

Step 4:执行以下命令验证 API 是否可用(将 myhostname 替换为主机名或 IP 地址):

curl http://localhost:4243/version
curl http://myhostname:4243/version

创建自定义 Docker 镜像
#

我在使用自定义 Docker 镜像时,选择了 launch via JNLP

如果你的镜像基于 jenkins/inbound-agent,可以参考以下 Dockerfile:

FROM jenkins/inbound-agent
RUN apt-get update && apt-get install XXX
COPY your-favorite-tool-here

ENTRYPOINT ["/usr/local/bin/jenkins-agent"]

在 Jenkinsfile 中使用
#

当 Docker Cloud 配置完成后,你就可以在 Jenkinsfile 中像普通 agent 一样使用它,例如:

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent {
        node {
            "docker"
        }
    }
}

这种方式和直接使用 docker { ... } 是不同的。 例如直接在 Jenkinsfile 中使用 docker { ... }

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent {
        docker { image 'node:22.13.1-alpine3.21' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --eval "console.log(process.platform,process.env.CI)"'
            }
        }
    }
}

更多关于在 Pipeline 中使用 Docker 的内容,请参考: https://www.jenkins.io/doc/book/pipeline/docker/


如有疑问,欢迎留言交流。


转载本文请注明作者与出处,禁止商业用途。欢迎关注公众号「DevOps攻城狮」。

相关文章