一般情况下,我们会有多个环境,需要不同的配置,甚至涉及到多个主机(集群)的环境。在这种情况,我们可以使用 docker container 的方式进行构建。
在这里,我们可以使用之前配置好的节点作为我们的 Docker host,并在上面启用 REST API。
更改 Docker service 文件,在 ExecStart 后面添加 “-H tcp://0.0.0.0:4243”。
root@test:~# cat /lib/systemd/system/docker.service
... ...
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:4243
ExecReload=/bin/kill -s HUP $MAINPID
... ...
然后重启 docker 服务
root@test:~# systemctl daemon-reload
root@test:~# systemctl restart docker.service
测试配置(jq 可能需要额外安装):
root@test:~# curl http://localhost:4243/version | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 822 100 822 0 0 21702 0 --:--:-- --:--:-- --:--:-- 22216
{
"Platform": {
"Name": "Docker Engine - Community"
},
"Components": [
{
"Name": "Engine",
"Version": "24.0.6",
"Details": {
"ApiVersion": "1.43",
"Arch": "amd64",
"BuildTime": "2023-09-04T12:31:44.000000000+00:00",
"Experimental": "false",
"GitCommit": "1a79695",
"GoVersion": "go1.20.7",
"KernelVersion": "5.15.0-79-generic",
"MinAPIVersion": "1.12",
"Os": "linux"
}
},
... ...
],
"Version": "24.0.6",
"ApiVersion": "1.43",
"MinAPIVersion": "1.12",
"GitCommit": "1a79695",
"GoVersion": "go1.20.7",
"Os": "linux",
"Arch": "amd64",
"KernelVersion": "5.15.0-79-generic",
"BuildTime": "2023-09-04T12:31:44.000000000+00:00"
}
使用 docker pipeline,我们需要在 Jenkins 上安装 docker 插件。
点击 Manage Jenkins > Nodes > Clouds. 在 Clouds 页面,点击 New cloud。如果没有 New cloud 选项,你需要点击 Install a plugin,来安装 docker 插件。
在 Cloud name 文本框中,输入节点的名称,并选择 Type 为 Docker。
点开 Docker Cloud details 展开,填写 Docker Host URI 为 “tcp://:4243”。 然后点击 Test Connection,测试连接。测试完成后,会显示当前 Docker 的版本,以及 API 的版本。
点击 Docker Agent templates 展开,然后点击 Add Docker Template。输入下面信息:
然后点击 Save 保存(截图只包含部分内容)
粘贴 pipeline 脚本,并进行 build(镜像标签应该是完整的镜像标签,示例只包含部分。
pipeline {
agent none
stages {
stage('Build') {
agent {
dockerContainer { image 'opensshserver:05' }
}
steps {
sh 'java --version'
}
}
}
}
在 build 过程中,我们可以在 Docker 主机上通过 docker ps 看到,一个 docker 容器被启动了。Build 完成后,容器将自己停止并被删除。