运行 docker 在 Jenkins 内部构建 Docker Slave
Run docker build inside Jenkins Docker Slave
目前我有一个包含以下阶段的 CI 管道:
- 建造
- 单元测试
- 静态代码分析
这是我的 Jenkinsfile 的样子:
pipeline {
agent any
stages {
stage("Install") {
steps {
sh "npm install"
}
}
stage("Build") {
steps {
sh "npm run build"
}
}
stage("Format") {
steps {
sh "npm run format"
}
}
stage("Lint") {
steps {
sh "npm run lint"
}
}
stage("Test") {
steps {
sh "npm run test"
}
}
stage("Code Coverage") {
steps {
sh "npm run test:cov"
publishHTML(target: [
reportDir: "./coverage/lcov-report",
reportFiles: "index.html",
reportName: "Jest Coverage Report"
])
}
}
stage("End-To-End Testing") {
steps {
sh "npm run test:e2e"
}
}
}
}
我想为我的管道添加更多阶段:
- 构建并标记 Docker 图片来自 Docker 文件
- 将图像推送到 Docker Hub
- 需要 Docker CLI 的更多步骤
示例:
pipeline {
.
.
.
stage("Docker Build") {
steps {
sh "docker build -t [user_name]/[image_name]:[tag] .
}
}
}
我对此很陌生,我尝试了多种安装方法 docker 但都没有成功,这也是一种不好的做法。
我们可以 运行 docker run -v /var/run/docker.sock:/var/run/docker.sock ...
但我不能在使用 docker 构建命令时使用绑定安装。
有人可以建议我在 Jenkins SSH 代理中使用 docker 命令的方法吗?
解决方案
- 在 Jenkins Docker Slave 中安装 Docker 没有守护进程的 CLI。这个我用过 Docker Agent and installed Docker CLI inside it using this method
- 然后作为 docker 守护程序,我使用了我的远程 docker 主机。 (另外,您可以使用这些 steps 将本地 docker 主机配置为远程主机)。您可以使用 docker 远程主机使用 --host 标志。例如。
docker --host x.x.x.x:2375 build -t johndoe:calculator .
- 语法:
docker --host [Docker_Host]:[Port] build -t [Image_Name]:[Image_Tag] .
我新建的Jenkins文件如下:
pipeline {
agent any
stages {
stage("Install") {
steps {
sh "npm install"
}
}
stage("Build") {
steps {
sh "npm run build"
}
}
stage("Format") {
steps {
sh "npm run format"
}
}
stage("Lint") {
steps {
sh "npm run lint"
}
}
stage("Test") {
steps {
sh "npm run test"
}
}
stage("Code Coverage") {
steps {
sh "npm run test:cov"
publishHTML(target: [
reportDir: "./coverage/lcov-report",
reportFiles: "index.html",
reportName: "Jest Coverage Report"
])
}
}
stage("End-To-End Testing") {
steps {
sh "npm run test:e2e"
}
}
stage("Docker Build") {
steps {
withCredentials([string(credentialsId: 'Docker_Host', variable: 'DOCKER_HOST')]) {
sh 'docker --host $DOCKER_HOST build -t xxx/xxx .'
}
}
}
}
}
注意:我已将 Docker 主机 URL 作为凭据存储在 Jenkins 上,并使用 withCredentials 函数使用它。
目前我有一个包含以下阶段的 CI 管道:
- 建造
- 单元测试
- 静态代码分析
这是我的 Jenkinsfile 的样子:
pipeline {
agent any
stages {
stage("Install") {
steps {
sh "npm install"
}
}
stage("Build") {
steps {
sh "npm run build"
}
}
stage("Format") {
steps {
sh "npm run format"
}
}
stage("Lint") {
steps {
sh "npm run lint"
}
}
stage("Test") {
steps {
sh "npm run test"
}
}
stage("Code Coverage") {
steps {
sh "npm run test:cov"
publishHTML(target: [
reportDir: "./coverage/lcov-report",
reportFiles: "index.html",
reportName: "Jest Coverage Report"
])
}
}
stage("End-To-End Testing") {
steps {
sh "npm run test:e2e"
}
}
}
}
我想为我的管道添加更多阶段:
- 构建并标记 Docker 图片来自 Docker 文件
- 将图像推送到 Docker Hub
- 需要 Docker CLI 的更多步骤
示例:
pipeline {
.
.
.
stage("Docker Build") {
steps {
sh "docker build -t [user_name]/[image_name]:[tag] .
}
}
}
我对此很陌生,我尝试了多种安装方法 docker 但都没有成功,这也是一种不好的做法。
我们可以 运行 docker run -v /var/run/docker.sock:/var/run/docker.sock ...
但我不能在使用 docker 构建命令时使用绑定安装。
有人可以建议我在 Jenkins SSH 代理中使用 docker 命令的方法吗?
解决方案
- 在 Jenkins Docker Slave 中安装 Docker 没有守护进程的 CLI。这个我用过 Docker Agent and installed Docker CLI inside it using this method
- 然后作为 docker 守护程序,我使用了我的远程 docker 主机。 (另外,您可以使用这些 steps 将本地 docker 主机配置为远程主机)。您可以使用 docker 远程主机使用 --host 标志。例如。
docker --host x.x.x.x:2375 build -t johndoe:calculator .
- 语法:
docker --host [Docker_Host]:[Port] build -t [Image_Name]:[Image_Tag] .
我新建的Jenkins文件如下:
pipeline {
agent any
stages {
stage("Install") {
steps {
sh "npm install"
}
}
stage("Build") {
steps {
sh "npm run build"
}
}
stage("Format") {
steps {
sh "npm run format"
}
}
stage("Lint") {
steps {
sh "npm run lint"
}
}
stage("Test") {
steps {
sh "npm run test"
}
}
stage("Code Coverage") {
steps {
sh "npm run test:cov"
publishHTML(target: [
reportDir: "./coverage/lcov-report",
reportFiles: "index.html",
reportName: "Jest Coverage Report"
])
}
}
stage("End-To-End Testing") {
steps {
sh "npm run test:e2e"
}
}
stage("Docker Build") {
steps {
withCredentials([string(credentialsId: 'Docker_Host', variable: 'DOCKER_HOST')]) {
sh 'docker --host $DOCKER_HOST build -t xxx/xxx .'
}
}
}
}
}
注意:我已将 Docker 主机 URL 作为凭据存储在 Jenkins 上,并使用 withCredentials 函数使用它。