我有一个自定义的Jenkins容器,在其中安装了docker-compose。 我也有一个尝试在管道中部署的应用程序。使用docker进行应用程序的初始构建工作正常,运行单元测试也是如此。但是,要运行集成测试,我需要同时启动应用程序和mysql(也在容器中运行)。这是 docker-compose 输入图片的地方。它可以正常启动,启动mysql,但是在尝试构建应用映像时会失败并显示错误:
path /code/package.json
errno -2
syscall open
enoent ENOENT: no such file or directory, open '/code/package.json'
但是docker-compose在我的机器上可以正常工作(更不用说docker文件如何在我的机器和Jenkins容器中运行的Jenkins Pipeline上都可以正常构建了
这是docker文件:
FROM node
WORKDIR /code
COPY package.json /code
RUN npm install mysql2
RUN npm install express
COPY . /code
RUN npm install
EXPOSE 3000
CMD ["npm","start"]
docker-compose文件的相关部分:
myapp:
build: ./app
depends_on:
- mysqlc
container_name: myappc
volumes:
- ./app:/code
ports:
- "3000:3000"
在Jenkins文件中,相关代码:
...
stage('Build image') {
dir('app') {
app = docker.build("myimage")
}
}
stage('test'){
sh 'docker-compose up --abort-on-container-exit'
...
}
...
任何见解都会得到深深的赞赏
更新:将jenkins文件更改为可以进行测试:
node {
def app
stage('Clone repository') {
checkout scm
}
stage('Build image') {
dir('app') {
/* Build the docker image */
app = docker.build("myimage")
}
}
stage('test'){
sh 'docker-compose up --abort-on-container-exit'
sh 'docker-comopse down -v'
}
}
它仍然失败
这是我运行Jenkins容器的方式:
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 --name jenkcont -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenk
这就是我使用docker compose创建自定义映像的方式
FROM jenkinsci/blueocean
USER root
RUN curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
RUN apk add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
GLIBC_VERSION='2.27-r0' && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk && apk add glibc-${GLIBC_VERSION}.apk && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk && apk add glibc-bin-${GLIBC_VERSION}.apk