在Jenkins中使用Jekyll Docker

3

我正在尝试通过我的Jenkins服务器(运行在容器内)构建一个jekyll网站,我在我的Jenkinsfile中有一个阶段,看起来像这样:

stage('Building Website') {

      agent {

        docker {
            image 'jekyll/jekyll:builder'
        }

      }

      steps {
        sh 'jekyll --version'
      }
}

我第一次运行我的任务时,它会拉取Jekyll Docker镜像并正常运行(尽管在运行Jekyll之前会获取一堆gem,但当我在Jenkins外部手动运行Docker时不会发生这种情况),但是接下来的任务失败并出现以下错误:

jekyll --version
/usr/jekyll/bin/jekyll: exec: line 15: /usr/local/bundle/bin/jekyll: not found

有什么想法我在这里做错了吗?
2个回答

4

从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
                '''
            }
        }
    }
}

0

补充另一个答案,注意容器化的Jenkins不包含docker二进制文件,因此docker命令仍将失败。

几个解决方案:

  1. 创建一个继承自Jenkins镜像并安装docker的dockerfile,创建一个新镜像。
  2. 在容器内手动安装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

完成!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接