构建时如何将源代码复制到图像

时间:2019-10-16 15:44:21

标签: docker jenkins jenkins-pipeline dockerfile

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

DOCKER文件

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

COPY package*.json ./
RUN npm install

这会将package.json复制到docker build映像中,并npm安装所有依赖项(与签出后在本地计算机上使用的方式相同)。

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

詹金斯盒子上的位置取决于詹金斯的设置。

这里有一些关于如何设置的内容 How to change workspace and build record Root Directory on Jenkins?

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

相关问题