我们正在从使用Unix构建脚本过渡到Jenkins。事情进展顺利,但是当我尝试在构建主机上复制并重命名2个“工件”时,我陷入了困境。
我在远程外壳程序中的命令是:
#!/usr/bin/ksh
cd /tmp
for f in "ns_a*Z"; do cp -p $f /ci/${f}_$BUILD_ID; done
Jenkins运行时,它将控制台输出显示为:
##################################################################################
##################################################################################
Last unsuccessful login: Tue May 19 21:18:38 2015 on ssh from mgt04.n.com
Last login: Fri May 22 18:47:50 2015 on /dev/pts/2 from ndev.n.com
*******************************************************************************
* Welcome to AIX Version 5.3! *
* *
*******************************************************************************
#!/usr/bin/ksh
cd /tmp
echo $BUILD_ID
for f in "ns_a*Z"; do cp -p $f /ci/${f}_$BUILD_ID; done
exit $?
b@dev02:/home/b> #!/usr/bin/ksh
b@dev02:/home/b>
b@dev02:/home/b> cd /tmp
b@dev02:/tmp>
b@dev02:/tmp> echo $BUILD _ID
b@dev02:/tmp>
b@dev02:/tmp> for f in "ns _a*Z"; do cp -p $f /c
b@dev02:/tmp> p -p $f /c <i/${f} _$B
b@dev02:/tmp> i/${f} _$BUILD _ID; done
cp: /ci/ns_a_3.1NS0.0-A-testb_bin.tar.Z_: not a directory.
b@dev02:/tmp>
b@dev02:/tmp>
b@dev02:/tmp> exit $?
#################################################################################
execute command exit status -->1
#################################################################################
Build step 'Remote Shell' marked build as failure
Finished: FAILURE
输出看起来有点乱,但这就是我屏幕上的样子。当然,如果我在主机上以b用户身份运行此脚本,则脚本运行良好。
/ tmp的清单如下:
b@dev02:/tmp> ll
+ ls -al
total 36880
drwxr-xr-x 3 b staff 256 May 22 14:20 .
drwxrwxrwx 11 bin bin 12288 May 22 14:20 ..
drwxr-xr-x 3 b staff 256 May 22 14:20 ns_a.pkg
drwxr-xr-x 3 b staff 125256 May 22 14:20 ns_a_3.1NS0.0-A-testb_bin.tar.Z
drwxr-xr-x 3 b staff 125388 May 22 14:20 ns_a_3.1NS0.0-A-testf_bin.tar.Z
b@dev02:/tmp>
现在,我正在写这篇文章,我看到BUILD_ID并没有写给shell,但是我猜我以后可以找到它。现在看来,复制命令正在扩展到:
cp -p ns_a_3.1NS0.0-A-testb_bin.tar.Z ns_a_3.1NS0.0-A-testf_bin.tar.Z /ci/ns_a_3.1NS0.0-A-testf_bin.tar.Z_
我在Windows 7上使用Jenkins 1.613,我的构建主机是AIX 5.3.8.2。
我真的不认为这是一个复杂的脚本,但是我想我会将其分解成较小的部分,然后也许可以使它起作用。
如果您对我要去哪里有任何想法,请先谢谢您。
这总是错误的,因为它只执行一次-使for
循环无效-扩展该循环参数中的glob:
for f in "ns_a*Z"; do cp -p $f /ci/${f}_$BUILD_ID; done
相反,请在进入循环之前扩展glob (通过使glob表达式不加引号),并引用其中的所有扩展:
for f in ns_a*Z; do cp -p "$f" /ci/"${f}_$BUILD_ID"; done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句