我有一个Perl项目,包括cpanfile
。
REPO/
Jenkinsfile
PROJECT1/
cpanfile
local/
PROJECT2/
cpanfile -> ../PROJECT1/cpanfile
local/ -> ../PROJECT1/local
...
我在jenkinsci/blueocean
图片的Docker容器中运行Jenkins。
现在我想使用Jenkins构建,测试和部署这个Perl项目。
起初,我尝试使用自由式构建。这是我的构建脚本:
docker run -t --rm \
-v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1 \
localhost:20000/perl-carton:5.26 \
carton install
localhost:20000/perl-carton:5.26
是我从perl:5.26
构建的Docker镜像。我在这个图像中添加了一些Perl模块,比如Carton和一些依赖项,比如libgd-dev,用于我的项目。/usr/src/myapp
并将容器的工作目录设置为工作区下方的PROJECT1
,因为cpanfile
就在那里。此docker run ...
命令在我的主机中运行良好(将$WORKSPACE
替换为$PWD
)。
此命令也适用于Jenkins容器。
然后,我尝试使用Jenkins Pipeline。我这样做Jenkinsfile
:
// Jenkinsfile
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'localhost:20000/perl-carton:5.26'
// args '-v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1'
}
}
steps {
sh 'cd PROJECT1 && carton install'
}
...
}
-v ... -w ...
,因为我从输出中发现Jenkins安装了它的工作区并通过强制将工作目录设置为该工作区:docker run ... -w /var/jenkins_home/workspace/JOBNAME --volumes-from DOCKER_CONTAINER_ID ...
。所以我的-w ...
选项被覆盖了。我希望这条管道可以做同样的工作。但是当我运行这个管道时,它无法安装一些模块。
[AppStore(pipeline)] Running shell script
+ cd PROJECT1
+ carton install
Installing modules using /var/jenkins_home/workspace/JOBNAME/PROJECT1/cpanfile
! Installing DBD::SQLite failed. See /root/.cpanm/work/1519351987.18/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Module 'DBD::SQLite' is not installed
! Bailing out the installation for DBIx-Class-0.082840.
...
Installing modules failed
最后,我尝试修改Jenkinsfile而不是使用agent docker
并让它在shell命令中运行docker:
agent any
steps {
sh 'docker run -t --rm -v $WORKSPACE:/usr/src/myapp -w /usr/src/myapp/PROJECT1 localhost:20000/perl-carton:5.26 carton install'
}
这是我所期待的成功。
我不知道造成这种差异的原因。
答案 0 :(得分:4)
我找到了答案。
我在Jenkins中命名了管道作业TestProject(pipeline)
。
作业名称包含括号, 工作区目录的名称也是如此, 和shell命令中的BOOM ......
cc -c -I/Users/gypark/temp/b(test)/local/..omitted../Install
-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -O3
-DVERSION=\"0.005\" -DXS_VERSION=\"0.005\"
"-I/Users/gypark/perl5/perlbrew/perls/perl-5.18/lib/5.18.1/darwin-thread-multi-2level/CORE" filehandles.c
/bin/sh: -c: line 0: syntax error near unexpected token `(
我创建了一个新的管道项目,名称中没有括号。一切都成功。