在 Jenkins 中使用 Jekyll docker
Using Jekyll docker inside Jenkins
我正在尝试通过我的 Jenkins 服务器(运行在容器中)构建一个 jekyll 网站,我的 Jenkinsfile
中有一个如下所示的阶段:
stage('Building Website') {
agent {
docker {
image 'jekyll/jekyll:builder'
}
}
steps {
sh 'jekyll --version'
}
}
我第一次 运行 我的工作它拉动了 jekyll docker 图像并且 运行 很好(尽管它确实在 运行 之前获取了一堆宝石ning jekyll 当我在 jenkins 之外手动 运行 docker 时不会发生)但是接下来的工作失败给出这个错误:
jekyll --version
/usr/jekyll/bin/jekyll: exec: line 15: /usr/local/bundle/bin/jekyll: not found
知道我做错了什么吗?
正如您在 jenkins 日志文件中看到的那样,jenkins 使用 -u 1000:1000
参数运行 docker,因为该用户没有退出 jekyll/jekyll
图像,命令失败并显示错误 .../bin/jekyll: not found
这是一个示例 Jenkinsfile
:
pipeline {
agent
{
docker
{
image 'jekyll/jekyll:3.8'
args '''
-u root:root
-v "${WORKSPACE}:/srv/jekyll"
'''
}
}
stages {
stage('Test') {
steps {
sh '''
cd /srv/jekyll
jekyll --version
'''
}
}
}
}
要添加到另一个答案,请注意容器化的 Jenkins 不包含 docker 二进制文件,因此 docker 命令仍然会失败。
几个解决方案
- 创建一个继承自 jenkins 映像的 docker 文件并安装 docker,创建一个新映像。
- 在容器内手动安装 docker。这将一直有效,直到您拉出一个新图像,并且您必须重新做一遍。
在 jenkins 容器中打开一个交互式终端
docker container exec -it -u root <container id> bash
然后安装docker
curl https://get.docker.com/ > dockerinstall && chmod 777 dockerinstall && ./dockerinstall
退出容器并在 docker.sock
上设置权限
sudo chmod 666 /var/run/docker.sock
完成!
我正在尝试通过我的 Jenkins 服务器(运行在容器中)构建一个 jekyll 网站,我的 Jenkinsfile
中有一个如下所示的阶段:
stage('Building Website') {
agent {
docker {
image 'jekyll/jekyll:builder'
}
}
steps {
sh 'jekyll --version'
}
}
我第一次 运行 我的工作它拉动了 jekyll docker 图像并且 运行 很好(尽管它确实在 运行 之前获取了一堆宝石ning jekyll 当我在 jenkins 之外手动 运行 docker 时不会发生)但是接下来的工作失败给出这个错误:
jekyll --version
/usr/jekyll/bin/jekyll: exec: line 15: /usr/local/bundle/bin/jekyll: not found
知道我做错了什么吗?
正如您在 jenkins 日志文件中看到的那样,jenkins 使用 -u 1000:1000
参数运行 docker,因为该用户没有退出 jekyll/jekyll
图像,命令失败并显示错误 .../bin/jekyll: not found
这是一个示例 Jenkinsfile
:
pipeline {
agent
{
docker
{
image 'jekyll/jekyll:3.8'
args '''
-u root:root
-v "${WORKSPACE}:/srv/jekyll"
'''
}
}
stages {
stage('Test') {
steps {
sh '''
cd /srv/jekyll
jekyll --version
'''
}
}
}
}
要添加到另一个答案,请注意容器化的 Jenkins 不包含 docker 二进制文件,因此 docker 命令仍然会失败。
几个解决方案
- 创建一个继承自 jenkins 映像的 docker 文件并安装 docker,创建一个新映像。
- 在容器内手动安装 docker。这将一直有效,直到您拉出一个新图像,并且您必须重新做一遍。
在 jenkins 容器中打开一个交互式终端
docker container exec -it -u root <container id> bash
然后安装docker
curl https://get.docker.com/ > dockerinstall && chmod 777 dockerinstall && ./dockerinstall
退出容器并在 docker.sock
上设置权限sudo chmod 666 /var/run/docker.sock
完成!