如何让 docker-compose 在 Windows 上的 docker 生成的 jenkins 管道中工作?

Ste*_*lin 3 jenkins docker docker-compose

我正在运行此代码来启动 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
Run Code Online (Sandbox Code Playgroud)

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

pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        echo 'Building...'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我添加到我的 Jenkinsfile 中

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

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

docker-compose: not found
Run Code Online (Sandbox Code Playgroud)

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

And*_*ann 6

您必须安装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
Run Code Online (Sandbox Code Playgroud)

现在从该目录中构建新图像,我们将其命名为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
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式列出它docker image ls

docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
myjenkins                  latest              841b3adbfe94        10 minutes ago      585MB
...
Run Code Online (Sandbox Code Playgroud)

现在启动你的容器。使用您的命令,您只需将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
Run Code Online (Sandbox Code Playgroud)

输入您的容器并检查是否docker-compose已安装:

docker exec -it myjenkins bash
jenkins@43b74c8f602b:/$ docker-compose --version
docker-compose version 1.25.3, build d4d1b42b
jenkins@43b74c8f602b:/$ 
Run Code Online (Sandbox Code Playgroud)