docker - 如何让 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 以及如何让它识别该方法?谢谢
解决方案
您必须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:/$
推荐阅读
- java - 如何从第二个活动获取数据到第一个活动
- javascript - 在选项卡完全关闭时保持 setInterval 运行
- haskell - 你可以在haskell中更改cons(:)的类型吗
- javascript - Javascript根据另一个索引重新索引数组
- javascript - 如何登录gmail帐户并在不使用浏览器的量角器中阅读邮件
- regex - Jupyter Notebook 的搜索和替换不像 regex101 的 javascript 那样贪婪
- javascript - 如何阻止 Firefox 控制台日志切断日志输出的开头?
- python-3.x - 或者 & 和 if 语句在一行中没有按预期工作
- tensorflow - 如何喂养本地占位符?
- react-native - React Native [NativeBase] - 为什么内容内没有显示任何内容?