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
我们正在从使用 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