Jenkins 中的 Remote shell 似乎在运行时更改了我的脚本

Remote shell in Jenkins seems to change my script when it runs

我们正在从使用 Unix 构建脚本过渡到 Jenkins。 事情进展顺利,但当我尝试在构建主机上复制和重命名 2 'artifacts' 时,我卡住了。

我在远程 shell 中的命令是:

#!/usr/bin/ksh
cd /tmp
for f in "ns_a*Z"; do cp -p $f /ci/${f}_$BUILD_ID; done

当 Jenkins 运行s 它显示控制台输出为:

##################################################################################
##################################################################################
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 循环无用——扩展该循环参数中的 globs:

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