我编写了一个Shell脚本来替换大量repos中Jenkinsfile中的文本。我用它来将参数添加到一行文本中。但是,现在我需要在Jenkinsfiles中的现有命令之前和之后插入一行文本。我没有太多的贝壳经验,可能需要一些帮助。
以下是之前的Jenkinsfile文本:
sh "chmod +x increment.sh"
def result = sh returnstdout:true, script: "./increment.sh '${Version}' '${ReleaseVersion}' '${GitRepoURL}' '${CutRelease}' '${Branch}' '${JiraID}'"
//echo "$result"
我需要在"def结果“行之前添加以下内容:
sshagent(['gitssh']) {
然后在"def结果“行后面添加一个结束的卷曲括号:
}
我需要的最终结果是:
sh "chmod +x increment.sh"
sshagent(['gitssh']) {
def result = sh returnstdout:true, script: "./increment.sh '${Version}' '${ReleaseVersion}' '${GitRepoURL}' '${CutRelease}' '${Branch}' '${JiraID}'"
}
//echo "$result"
实际上,如果这样做更困难,我并不关心是否保留注释掉的echo命令,但这只是为了显示围绕"def结果“行的内容。
我如何才能完成这个最终的结果?
如果有帮助,我以前在"def结果“行的末尾添加了新的参数,代码如下:
if [ -e Jenkinsfile ]
then
sed -i -e "s/\${Branch}/\${Branch}\' \'\${JiraID}/g" Jenkinsfile
fi
注意:我在Mac上。
目前为止的代码:
file=repos_remaining.txt
while IFS="," read -r repoURL repoName; do
echo $repoURL
cd ..
echo $repoName
cd $(echo $repoName | tr -d '\r')
file=repos_remaining.txt
if [ -e Jenkinsfile ]
then
# sed -i -e $"s/def result/sshagent([\'gitssh\']) {\
# def result/g" Jenkinsfile
fi
# git add "Jenkinsfile"
# git commit -m "Added JiraID parameter to Jenkinsfile"
# git push origin master
done < "$file"
发布于 2020-04-20 07:47:35
与大多数希望自动编辑文件的情况一样,我建议使用ed
ed -s Jenkinsfile <<'EOF'
/^def result/i
sshagent(['gitssh']) {
.
.+1a
}
.
w
EOF
下面文件中的命令告诉ed
将光标移动到以def result
开头的第一行,i在其上方插入一行,a接上一行,最后w将修改后的文件记录回磁盘。
https://stackoverflow.com/questions/61325979
复制相似问题