Jenkins Pipeline создает Dockerfile, но не может выполнять шаги внутри контейнера - PullRequest
0 голосов
/ 06 июля 2019

Я создаю веб-приложение FreePascal и использую конвейер Jenkins для CI / CD.

У меня есть следующий Dockerfile (не самая эффективная вещь в мире, но пока все нормально):

FROM ubuntu as builder

RUN apt-get update -y
RUN apt-get install -y libcurl4-openssl-dev
RUN apt-get install -y fpc

ARG BUILD_TYPE=prod
ENV BUILD_TYPE=${BUILD_TYPE}

COPY . /var/www/app
WORKDIR /var/www/app

RUN make build
RUN make build-tests

FROM actilis/httpd-cgi

RUN yum -y install postgresql

ENV HTTPD_ENABLE_CGI=true

COPY ./httpd.conf  /etc/httpd/conf.d/000-default.conf

COPY --from=builder /var/www/app/public/app.cgi /var/www/app/
COPY --from=builder /var/www/app/bin/unit/TestRunner /var/www/app/

Когда я sh в этот контейнер и cd в /var/www/app, я вижу ./TestRunner и app.cgi;это мои юнит-тесты и исполняемые файлы приложения cgi соответственно.Я могу запустить:

./TestRunner --format=xml --all

и все тесты будут запущены.Пока все хорошо.

Проблема в том, что я пытаюсь воссоздать ту же самую настройку на Jenkins.Я использую следующий файл Jenkinsfile:

pipeline {
    agent none
    stages {
        stage('Back-end') {
            agent {
                dockerfile {
                    filename 'Dockerfile'
                    dir 'backend'
                }
            }
            steps {
                sh './TestRunner --format=xml --all'
            }
        }
        stage('Front-end') {
            agent {
                docker { image 'node:7-alpine' }
            }
            steps {
                sh 'node --version'
            }
        }
    }
}

В Jenkins не удается найти файл ./TestRunner.Вывод:

+ docker build -t 181ef0bcb3bf204f1879365a51eb4f056599fcbc -f backend/Dockerfile backend
Sending build context to Docker daemon  1.405MB

Step 1/16 : FROM ubuntu as builder
 ---> 4c108a37151f
Step 2/16 : RUN apt-get update -y
 ---> Using cache
 ---> 23006844dbe3
Step 3/16 : RUN apt-get install -y libcurl4-openssl-dev
 ---> Using cache
 ---> 85f33caeb6fa
Step 4/16 : RUN apt-get install -y fpc
 ---> Using cache
 ---> 4179833a6dc6
Step 5/16 : ARG BUILD_TYPE=prod
 ---> Using cache
 ---> 175016eb89cd
Step 6/16 : ENV BUILD_TYPE=${BUILD_TYPE}
 ---> Using cache
 ---> 93f40d4821b4
Step 7/16 : COPY . /var/www/app
 ---> Using cache
 ---> ba927c86c8f0
Step 8/16 : WORKDIR /var/www/app
 ---> Using cache
 ---> ad053831767b
Step 9/16 : RUN make build
 ---> Using cache
 ---> 7cee4fa21f10
Step 10/16 : RUN make build-tests
 ---> Using cache
 ---> 1d7db41bc613
Step 11/16 : FROM actilis/httpd-cgi
 ---> 98b08d011dc9
Step 12/16 : RUN yum -y install postgresql
 ---> Using cache
 ---> 2dd8ccfec261
Step 13/16 : ENV HTTPD_ENABLE_CGI=true
 ---> Using cache
 ---> 1a78db6d4788
Step 14/16 : COPY ./httpd.conf  /etc/httpd/conf.d/000-default.conf
 ---> Using cache
 ---> 4147b79edb69
Step 15/16 : COPY --from=builder /var/www/app/public/app.cgi /var/www/app/
 ---> Using cache
 ---> 41f28ebd3602
Step 16/16 : COPY --from=builder /var/www/app/bin/unit/TestRunner /var/www/app/
 ---> Using cache
 ---> f897e3055e8b
Successfully built f897e3055e8b
Successfully tagged 181ef0bcb3bf204f1879365a51eb4f056599fcbc:latest
[Pipeline] dockerFingerprintFrom
[Pipeline] sh
+ docker inspect -f . 181ef0bcb3bf204f1879365a51eb4f056599fcbc
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 111:115 -w /home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline -v /home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline:/home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline:rw,z -v /home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline@tmp:/home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** 181ef0bcb3bf204f1879365a51eb4f056599fcbc cat
$ docker top c669acb2b4a88c4ea0cfc1f5682f2cfd2a41052235767ac330800f7bcd6b35b4 -eo pid,comm
[Pipeline] {
[Pipeline] sh
+ find . -name '*TestRunner*'
./backend/tests/TestRunner.pas
[Pipeline] sh
+ ./TestRunner --format=xml --all
/home/jenkins/workspace/ipeline-2_chore_jenkins-pipeline@tmp/durable-43156271/script.sh: line 1: ./TestRunner: No such file or directory
[Pipeline] }
$ docker stop --time=1 c669acb2b4a88c4ea0cfc1f5682f2cfd2a41052235767ac330800f7bcd6b35b4
$ docker rm -f c669acb2b4a88c4ea0cfc1f5682f2cfd2a41052235767ac330800f7bcd6b35b4
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Front-end)
Stage "Front-end" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline

Я исследовал, что находится внутри контейнера, и все, что я нашел, это исходные файлы с Github.Хотя вывод журнала показывает, что Docker запустился успешно, исполняемых файлов там нет.

Может кто-нибудь объяснить, что происходит и как это исправить?Я новичок в Дженкинс, поэтому я могу сделать элементарную ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...