【问题标题】:how source code is copied to image while building构建时如何将源代码复制到图像
【发布时间】:2019-10-16 15:44:21
【问题描述】:

我在 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中的?

【问题讨论】:

  • COPY . . 指令复制源代码。部署后看到容器里面的源码了吗?

标签: docker jenkins jenkins-pipeline dockerfile


【解决方案1】:

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

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

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

COPY package*.json ./
RUN npm install

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

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

这在您的 jenkins 盒子上的位置取决于您的 Jenkins 设置。

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

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

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多