在容器中使用 Jenkins 运行 在主机上构建 docker 文件
build docker file on host with Jenkins running in container
我正在尝试使用 Jenkins 管道构建 docker 图像,Jenkins 运行 在 Docker 容器中。
这是我的 Jenkins 文件:
stage 'Deploy'
dir('/apps/npt'){
sh 'chmod +x deploy_prod.sh'
sh 'cat deploy_prod.sh'
sh './deploy_prod.sh'
}
这是我启动容器的方式:
docker run --detach --publish 8080:8080 -u 0 --volume jenkins_volume:/var/jenkins_home --volume apps:/apps --name jenkins jenkins/jenkins
这是 sh 文件:
#!/bin/bash
#build docker container
docker build -t npt .
这是我得到的错误:
./deploy_prod.sh: line 6: docker: command not found
我尝试将 docker 套接字作为卷添加到容器 -v /var/run/docker.sock:/var/run/docker.sock
,但仍然出现同样的错误。
我在另一个项目上使用相同的配置,jenkins 运行 作为 VM 上的服务,没有问题...
您需要在 Jenkins docker 容器中添加 docker 客户端。查看 https://github.com/jenkinsci/docker/blob/master/README.md#installing-more-tools 了解如何做到这一点。您还可以使用 docker exec.
在容器中安装它
当脚本在容器内运行时,它会检查 PATH 变量以解析 docker
命令。 docker 客户端然后将指令写入 /var/run/docker.sock。 docker 服务器读取这些指令并相应地执行操作。
-v /var/run/docker.sock:/var/run/docker.sock
-> 这意味着 docker 容器中的 docker 客户端可以与 docker 引擎(server/VM)运行 在主机上。
我正在尝试使用 Jenkins 管道构建 docker 图像,Jenkins 运行 在 Docker 容器中。
这是我的 Jenkins 文件:
stage 'Deploy'
dir('/apps/npt'){
sh 'chmod +x deploy_prod.sh'
sh 'cat deploy_prod.sh'
sh './deploy_prod.sh'
}
这是我启动容器的方式:
docker run --detach --publish 8080:8080 -u 0 --volume jenkins_volume:/var/jenkins_home --volume apps:/apps --name jenkins jenkins/jenkins
这是 sh 文件:
#!/bin/bash
#build docker container
docker build -t npt .
这是我得到的错误:
./deploy_prod.sh: line 6: docker: command not found
我尝试将 docker 套接字作为卷添加到容器 -v /var/run/docker.sock:/var/run/docker.sock
,但仍然出现同样的错误。
我在另一个项目上使用相同的配置,jenkins 运行 作为 VM 上的服务,没有问题...
您需要在 Jenkins docker 容器中添加 docker 客户端。查看 https://github.com/jenkinsci/docker/blob/master/README.md#installing-more-tools 了解如何做到这一点。您还可以使用 docker exec.
在容器中安装它当脚本在容器内运行时,它会检查 PATH 变量以解析 docker
命令。 docker 客户端然后将指令写入 /var/run/docker.sock。 docker 服务器读取这些指令并相应地执行操作。
-v /var/run/docker.sock:/var/run/docker.sock
-> 这意味着 docker 容器中的 docker 客户端可以与 docker 引擎(server/VM)运行 在主机上。