【问题标题】:How to get docker-compose to work in docker generated jenkins pipeline on windows?如何让 docker-compose 在 windows 上 docker 生成的 jenkins 管道中工作?
【发布时间】:2020-01-31 10:16:51
【问题描述】:

我正在运行这段代码来启动一个 dockerized jenkins。这行得通。

docker run -p 81:8080 -p 50000:50000 --name myjenkins --privileged -v %cd%/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

每次推送时,我都使用 bitbucket、webhooks 并通过防火墙连接到我的本地 jenkins 成功签出 scm。 以前的 Jenkinsfile 示例有效:

pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        echo 'Building...'
      }
    }
  }
}

然后我已将其添加到我的 Jenkinsfile 中

pipeline {
  agent any
  stages {
      stage('Test') {
        steps {
          echo 'Testing...'
        }
      }
      stage('docker-compose') {
          steps {
             sh "./dockcompose.sh"
          }
      }
  }
  post {
     always {
        sh "./dockcompose-down.sh"
     }
  }
}

我有一个本地 docker-compose.yml 文件,我已经在本地进行了全面测试并且可以正常工作。 在我得到的管道错误中:

docker-compose: not found

有什么建议为什么它找不到 docker-compose 以及如何让它识别该方法? 谢谢

【问题讨论】:

    标签: docker jenkins docker-compose


    【解决方案1】:

    您必须在容器内安装docker-compose,因为jenkins/jenkins 映像不附带docker-compose。我建议通过创建自己的 Dockerfile 来扩展原始图像。例如。在任意目录中,创建以下名为Dockerfile的文件:

    FROM jenkins/jenkins
    
    USER root
    
    # see https://docs.docker.com/compose/install/
    RUN curl -L \
      "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" \
      -o /usr/local/bin/docker-compose \
      && chmod +x /usr/local/bin/docker-compose
    
    USER jenkins
    

    现在从该目录中构建新映像,我们将其命名为myjenkins

    docker build -t myjenkins .
    Sending build context to Docker daemon  4.096kB
    Step 1/4 : FROM jenkins/jenkins
     ---> 57f9f0b056cc
    Step 2/4 : USER root
     ---> Using cache
     ---> f6dfbc759063
    Step 3/4 : RUN curl -L   "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)"   -o /usr/local/bin/docker-compose   && chmod +x /usr/local/bin/docker-compose
     ---> Running in 36c8c22c01fb
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   617    0   617    0     0   1944      0 --:--:-- --:--:-- --:--:--  1946
    100 16.4M  100 16.4M    0     0  2404k      0  0:00:06  0:00:06 --:--:-- 3423k
    Removing intermediate container 36c8c22c01fb
     ---> ca119efd5ea6
    Step 4/4 : USER jenkins
     ---> Running in 5d1149b328b5
    Removing intermediate container 5d1149b328b5
     ---> 841b3adbfe94
    Successfully built 841b3adbfe94
    Successfully tagged myjenkins:latest
    

    你可以用docker image ls列出它:

    docker image ls
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    myjenkins                  latest              841b3adbfe94        10 minutes ago      585MB
    ...
    

    现在启动您的容器。使用您的命令,您只需将命令末尾的图像名称jenkins/jenkins 替换为myjenkins(注意在我的mac PC 上进行测试,我删除了/var/jenkins_home 的绑定安装,但您应该能够保留它)。此外,如有必要,请删除以前启动的容器:

    docker run --rm -p 81:8080 -p 50000:50000 --name myjenkins  -v /var/run/docker.sock:/var/run/docker.sock myjenkins
    

    输入你的容器并检查是否安装了docker-compose

    docker exec -it myjenkins bash
    jenkins@43b74c8f602b:/$ docker-compose --version
    docker-compose version 1.25.3, build d4d1b42b
    jenkins@43b74c8f602b:/$ 
    

    【讨论】:

      【解决方案2】:

      显然 docker-compose 可执行文件不在运行 Jenkins 的用户的 PATH 环境变量中..

      然而,最好的解决方案不是使用 docker compose,而是使用简单的 docker build 或 kubernetes 插件

      【讨论】:

      • 我尝试添加到 Jenkins > 配置系统 > 全局变量 - 添加 > usr\local\bin。然后这打破了来自 bitbucket 的 scm 结帐。请注意,我使用的是 Windows 10。我有 jenkins 文件夹的卷构建,但仍然不确定在哪里或进入那里的路径。
      【解决方案3】:

      docker-compose 文件中的 Jenkins 容器:

      您应该在 docker-compose 文件中添加这些行。

      不要忘记 /usr/local/bin/docker-compose 文件在您的服务器机器中不能为空。

      Jenkins 执行结果:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 2018-06-21
        • 1970-01-01
        • 2021-06-16
        • 2017-07-16
        相关资源
        最近更新 更多