docker-compose не может создать изображение только внутри контейнера Jenkins - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть пользовательский контейнер 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)

Вот файл 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"

А в Jenkinsfile соответствующий код:

...
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...