shell - 如何将 shell 脚本回显到 Jenkinsfile 等 groovy 界面中的文件
问题描述
我有下面的 shell 脚本,我需要回显到文件让我们说 script.sh 从像 Jenkinsfile 这样的 groovy 界面,但不断收到编译错误。
#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
if [[ ! -z $p ]]
then
echo "merged branch is master"
exit 0
else
echo "merged branch is anything but master"
exit 2
fi
else
echo "no branch merged"
exit 1
fi
我尝试了以下方法:-
sh '''echo '#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
if [[ ! -z $p ]]
then
echo "merged branch is master"
exit 0
else
echo "merged branch is anything but master"
exit 2
fi
else
echo "no branch merged"
exit 1
fi' > script.sh'''
解决方案
您可以尝试使用 writeFile 选项将内容写入文件,但在您的情况下,您必须在脚本中单独转义反斜杠。下面应该工作。
pipeline {
agent any
stages {
stage ("Test") {
steps{
writeFile file:'test.txt', text: '''#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\\S\\+ master$'`
if [[ ! -z $p ]]
then
echo "merged branch is master"
exit 0
else
echo "merged branch is anything but master"
exit 2
fi
else
echo "no branch merged"
exit 1
fi'''
}
}
}
}
推荐阅读
- python - 这段代码可以加快查找字符串邻域的速度吗?
- haskell - 从映射到其关联对的光学
- json - Spring Boot:防止 Jackson 在 JSON 序列化时“重新格式化”XMLGregorianCalendar
- sql-server - 带有 Invoke-Webrequest SQL 和 Powershell 的顽固 & 符号
- docker - 在 Dockerfile 中暴露端口
- python - 无法在python中序列化列表
- reactjs - 未捕获的错误:重新渲染过多。React 限制了渲染的数量以防止无限循环。React Hooks,承诺
- sql - SQL Inner 连接两个表并根据条件从第二列中提取一个布尔值
- altair - 选择数据会切断 Altair 图中的标签
- docker - 如何在 yml 配置文件中替换字符串中的单词