我正在尝试使用Jenkins Pipelines设置自动化的构建器/部署器作业。
我已经设置了一个Docker容器,用于安装NodeJS和Gulp依赖项:
Dockerfile
# Node 8.9 running on lean version of alpine Linux
FROM node:8.9-alpine
# Commented out setting production since
# we need devDependencies to build
# ENV NODE_ENV production
# Set working directory to root of container
WORKDIR /
# Copy package.json and install dependencies first
# These can be cached as a step so long as they haven't changed
COPY ["./package.json", "./package-lock.json*", "/"]
RUN npm install --no-audit --silent
RUN npm install node-sass --silent
RUN npm install gulp-cli --silent
RUN npm install gulp@3.9 --silent
# Copy code to root, thise is a separate step from
# dependencies as this step will not be cached since code
# will always be different
COPY . .
# Debugging information
RUN ls
RUN pwd
RUN ./node_modules/.bin/gulp --version
Dockerfile的目标是缓存依赖项的安装,以便构建作业可以更快地运行。
Jenkinsfile使用Dockerfile,然后尝试运行npm构建脚本
Jenkinsfile
pipeline {
agent {
dockerfile true
}
stages {
stage('Compile static assets') {
steps {
sh 'node --version'
sh 'npm --version'
sh 'pwd'
sh 'ls'
sh 'npm run build'
}
}
}
}
运行Jenkins Pipeline时,初始化(使用并运行Dockerfile的位置)似乎与这些步骤不匹配。 分别参见pwd和ls:
设置容器的第一步的输出
Step 9/10 : RUN ls
---> Running in 74b7483a2467
AO18_core
Jenkinsfile
bin
dev
dev_testing
etc
gulpfile.js
home
lib
media
mnt
node_modules
opt
package-lock.json
package.json
proc
root
run
sbin
srv
sys
tmp
usr
var
Removing intermediate container 74b7483a2467
---> e68a07c2bb45
Step 10/10 : RUN pwd
---> Running in 60a3a09573bc
/
阶段编译静态资产的输出
[ao_test-jenkins-YCGQYCUVORUBPWSQX4EDIRIKDJ72CXV3G5KXEDIGIY6BIVFNNVWQ] Running shell script
+ pwd
/var/lib/jenkins/workspace/ao_test-jenkins-YCGQYCUVORUBPWSQX4EDIRIKDJ72CXV3G5KXEDIGIY6BIVFNNVWQ
[ao_test-jenkins-YCGQYCUVORUBPWSQX4EDIRIKDJ72CXV3G5KXEDIGIY6BIVFNNVWQ] Running shell script
+ ls
AO18_core
Dockerfile
Jenkinsfile
README.md
dev_testing
docker-compose.debug.yml
docker-compose.yml
gulpfile.js
jsconfig.json
package.json
因此,关于执行上下文,似乎有些不清楚。我的假设是,一旦初始化Docker容器,整个管道就会在该现有上下文中执行。似乎并非如此。
目前,我只有一个阶段,但最终将有多个阶段,可以进行lint,测试和部署。希望所有这些阶段都将在相同的上下文中执行。
答案 0 :(得分:0)
即使您在Dockerfile中更改了//span[@title='Sent Items']
,就像您在常规代理中运行构建时一样,Jenkins也会在容器内使用分配的工作区。
您可以使用代理程序定义内的WORKDIR
选项来更改它:
customWorkspace
此外,您可以在管道作业的“管道语法”部分中使用“指令生成器”来获取pipeline {
agent {
dockerfile {
customWorkspace '/test'
filename 'Dockerfile'
}
}
stages {
stage('Compile static assets') {
steps {
sh 'node --version'
sh 'npm --version'
sh 'pwd'
sh 'ls'
sh 'npm run build'
}
}
}
}
配置。
更多信息:https://jenkins.io/doc/book/pipeline/syntax/#common-options