как исходный код копируется в изображение при сборке - PullRequest
0 голосов
/ 16 октября 2019

У меня есть Jenkins на сервере Centos, а также развернут Docker на том же сервере и установлено соединение. Я пытаюсь развернуть образ Docker на другом рабочем сервере, используя конвейер Jenkins.

У меня уже есть исходный код на github со всеми требованиями для развертывания.

JENKINFILE (ниже только небольшая часть)

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Running build automation'
                sh './gradlew build --no-daemon'
                archiveArtifacts artifacts: 'dist/trainSchedule.zip'
            }
        }
        stage('Build Docker Image') {
            when {
                branch 'master'
            }
            steps {
                script {
                    app = docker.build("willbla/train-schedule")
                    app.inside {
                        sh 'echo $(curl localhost:8080)'
                    }
                }
            }
        }
        stage('Push Docker Image') {
            when {
                branch 'master'
            }
            steps {
                script {
                    docker.withRegistry('https://registry.hub.docker.com', 'docker_hub_login') {
                        app.push("${env.BUILD_NUMBER}")
                        app.push("latest")

ФАЙЛ DOCKER

FROM node:carbon
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]

Я могу создать образ и развернуть, но я не понимаю, как мы создавали образ Docker с исходным кодом COPY package*.json ./ .. Для этого он должен находиться локально на сервере Jenkins, где находится мой Docker. Я нашел изображения, созданные командой docker image ls, а также обнаружил артефакты сборки в /var/lib/jenkins/jobs/<my-job-name>-build/builds/8/archive/target, но где находится исходный код и как он копируется в Dockerfile?

1 Ответ

0 голосов
/ 16 октября 2019

При запуске Jenkins ваш код извлекается в рабочий каталог на вашем компьютере jenkins. Таким образом, все ваши исходные файлы находятся на вашей коробке jenkins.

Когда вызывается сборка docker, каталог сборки является каталогом файла docker. Этот каталог изменяется с помощью WORKDIR /usr/src/app

Ваш файл Docker выполняет два действия копирования.

COPY package*.json ./
RUN npm install

Это скопирует файл package.json в образ сборки Docker, а npm установит всезависимости (так же, как на локальном компьютере после проверки).

затем COPY . . скопирует все файлы в текущем каталоге (/ usr / src / app) в создаваемый образ вашего докера. Это вызов, который на самом деле копирует ваш исходный код.

От того, где это находится, будет зависеть ваша настройка Jenkins.

Есть некоторые сведения о том, как это установить здесь Как изменить рабочее пространство и создать запись корневого каталога в Jenkins?

tldr;Исходя из приведенных выше фрагментов, исходный код, который Docker вытягивает в ваше изображение, является {JENKINS_WORKSPACE} / usr / src / app.

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