首页 > 解决方案 > 如何让 docker-compose 在 windows 上 docker 生成的 jenkins 管道中工作?

问题描述

我正在运行这段代码来启动一个 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 以及如何让它识别该方法?谢谢

标签: dockerjenkinsdocker-compose

解决方案


您必须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:/$ 

推荐阅读