我在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中复制?
答案 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。