在gitlab-ci作业中,我想创建一个具有作业ID的目录(在远程服务器上),并且或多或少地执行一些操作,如下所示:
- ssh user@server mkdir -p /user/$CI_JOB_ID
- ssh user@server <perform_some_action_that_creates_several_zip_files>
- LAST_MODIFIED_FILE=$(ssh user@server bash -c 'find /user/$CI_JOB_ID -iname "*.zip" | tail -n 1 | xargs readlink -f')
目录确实已创建,并且创建多个拉链的操作也可以解决。
但是,我用于获取上次修改/创建的.zip
的最后一个命令不起作用,因为$CI_JOB_ID
似乎没有扩展。
有什么建议吗?
答案 0 :(得分:1)
此问题是由于您的ssh调用造成的。你现在这样做的方式是混合上下文:
bash -c 'my_commands'
my_commands
:您使用简单的引号,因此ssh将执行完全指令$CI_JOB_ID
。在您的情况下,它会尝试找到ssh user@server bash -c "my_commands"
的远程值,而不是使用本地值。
ssh
:使用"bash -c find ... | tail ... | xargs ..."
,在远程shell上执行的命令将作为单个字符串发送。因此,如果您使用此引号运行ssh,它将尝试运行find
。此处,bash -c
仅运行ssh user@server "find /user/$CI_JOB_ID -iname '*.zip' | tail -n 1 | xargs readlink -f"
。
在你的情况下,只需直接写下面的语句即可:
bash -c
否则,如果您想继续使用ssh user@server bash -c \"find /user/$CI_JOB_ID -iname '*.zip' | tail -n 1 | xargs readlink -f\"
语法,则必须转义引号,以便将其传播到远程计算机:
--testlist: