首页 > 解决方案 > 构建时如何将源代码复制到图像

问题描述

我在 Centos 服务器上有 Jenkins,还在同一台服务器上部署了 Docker 并建立了连接。我正在尝试使用 Jenkins 管道将 Docker 映像部署到不同的生产服务器。

我已经在 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")

码头工人文件

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

我能够构建映像并进行部署,但我对 Docker 如何使用源代码构建映像感到困惑COPY package*.json ./ .。为此,它必须在我的 Docker 所在的 Jenkins 服务器上本地。我找到了通过命令构建的图像,docker image ls并且还在 中找到了构建工件/var/lib/jenkins/jobs/<my-job-name>-build/builds/8/archive/target,但是源代码在哪里以及它是如何在 Dockerfile 中复制的?

标签: dockerjenkinsjenkins-pipelinedockerfile

解决方案


当 Jenkins 运行时,您的代码将被检出到您的 jenkins 机器上的工作目录中。所以你所有的源文件都位于你的詹金斯盒子上。

调用 docker build 时,build 目录就是 docker 文件所在的目录。该目录更改为 WORKDIR /usr/src/app

您的 docker 文件正在执行两个复制操作。

COPY package*.json ./
RUN npm install

这会将 package.json 复制到 docker build 映像中,然后 npm install 所有依赖项(与结帐后在本地计算机上的方式相同)。

然后 COPY . . 将当前目录(/usr/src/app)中的所有文件复制到正在构建的 docker 映像中。这是实际复制您的源代码的调用。

这在您的詹金斯盒子上的位置将取决于您的詹金斯设置。

这里有一些关于如何设置的阅读如何 在 Jenkins 上更改工作区和构建记录根目录?

tldr; 根据上面的代码片段,docker 拉入镜像的源代码是 {JENKINS_WORKSPACE}/usr/src/app。


推荐阅读