我正在尝试创建一个Jenkins管道,我需要执行多个shell命令并在下一个命令中使用一个命令的结果。我发现将命令包装在一对三个单引号'''
中可以完成相同的操作。但是,在使用管道将一个命令的输出提供给另一个命令时,我遇到了问题。例如
stage('Test') {
sh '''
echo "Executing Tests"
URL=`curl -s "http://localhost:4040/api/tunnels/command_line" | jq -r '.public_url'`
echo $URL
RESULT=`curl -sPOST "https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=$URL" | jq -r '.code'`
echo $RESULT
'''
}
带管道的命令无法正常工作。这是jenkins控制台输出:
+ echo Executing Tests
Executing Tests
+ curl -s http://localhost:4040/api/tunnels/command_line
+ jq -r .public_url
+ URL=null
+ echo null
null
+ curl -sPOST https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=null
答案 0 :(得分:9)
我尝试在jenkins片段生成器中为管道输入所有这些命令,它给出了以下输出:
sh ''' echo "Executing Tests"
URL=`curl -s "http://localhost:4040/api/tunnels/command_line" | jq -r \'.public_url\'`
echo $URL
RESULT=`curl -sPOST "https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=$URL" | jq -r \'.code\'`
echo $RESULT
'''
请注意命令jq -r \'.public_url\'
和jq -r \'.code\'
中的转义单引号。这种方式使用代码解决了问题
更新::过了一段时间,甚至开始出现问题。在这些命令之前执行某些命令。其中一个是grunt serve
,另一个是./ngrok http 9000
。我在每个命令之后添加了一些延迟,它现在解决了问题。
答案 1 :(得分:1)
我用&&
拆分命令 nav {
width: 75%;
margin: auto
}
#menu {background-color: #98bf21}
.container{padding: 0.10em}
.cell-row {display:table; width:100%}
.cell {display: table-cell}
.cell-middle {vertical-align: middle}
a:link, a:visited {
font-weight: bold;
color: black;
text-align: center;
padding: 4px;
text-decoration: none;
text-transform: uppercase;
}
a:hover, a:active {background-color: #7A991A}
@media (max-width: 500px) {
.mobile {
display: block;
width: 100%;
text-align: center
}
nav {
width: 100%;
margin: auto
}
}
示例输出: - ls -a(工作区中的文件 - pwd(位置工作区) - 回声世界
答案 2 :(得分:0)
以下情形显示了一个实际的示例,可能需要使用多行shell命令。也就是说,假设您正在使用Publish Over SSH
之类的插件,并且需要在单个SSH会话中的目标主机中执行一组命令:
stage ('Prepare destination host') {
sh '''
ssh -t -t user@host 'bash -s << 'ENDSSH'
if [[ -d "/path/to/some/directory/" ]];
then
rm -f /path/to/some/directory/*.jar
else
sudo mkdir -p /path/to/some/directory/
sudo chmod -R 755 /path/to/some/directory/
sudo chown -R user:user /path/to/some/directory/
fi
ENDSSH'
'''
}
特殊说明:
ENDSSH'
之前不能包含任何字符。所以
应该在新行的开始位置。ssh -t -t
,请使用sudo