Н
Size: a a a
Н
VD
import jenkins.branch.NameManglerЭто положите в шаред либу в файл
import groovy.transform.Field
@Field def keyString = 'Run TESTENV=TestEnv'
def getLogMap() {
def tokens = "${env.JOB_NAME}".tokenize('/')
def repo = tokens[tokens.size()-2]
try {
def i
def result=[:]
exec = """
set +x
LOG_FILE="\$JENKINS_HOME/jobs/${repo}/branches/${NameMangler.apply(env.BRANCH_NAME)}/builds/\$BUILD_ID/log"
LOG_INDEX_FILE="\$JENKINS_HOME/jobs/${repo}/branches/${NameMangler.apply(env.BRANCH_NAME)}/builds/\$BUILD_ID/log-index"
LOG_LINES=\$(grep --byte-offset --text "${keyString}" "\$LOG_FILE"| sed "s/[^[:print:]\t]//g; s/\\(^[0-9]*:\\).*=\\(.*\\)/\\1 \\2/g; s/'\$//g")
LOG_INDEX=\$(grep '.* .*' "\$LOG_INDEX_FILE")
while read -r line ; do
offset=\$(echo \$line | cut -d ":" -f1)
str=\$(echo \$line | cut -d " " -f2)
if [[ "X\$offset" == "X" ]]; then
echo "Offset if empty in line=\$line"
continue
fi
index=\$(echo "\$LOG_INDEX" | awk '\$1 > '\$offset' { print prev; exit; } { prev = \$2 }')
echo "\$str \$index"
done <<< "\$LOG_LINES" | uniq
"""
return sh(script: exec, returnStdout: true).trim().tokenize('\n')
} catch (error) {
throw (error)
}
}
def getURL(logIndex, findString) {
findString=findString.replaceAll(".*=", "")
resultStr=logIndex.findAll { it.contains(findString) }
def result=''
for (s in resultStr){
i=s.tokenize()
result = result + "[log|${env.BUILD_URL}execution/node/" + i[1] + '/log/] '
}
return result.trim()
}
var/getResults.groovy
. Вызывать из пайплайна так:node ('master') {
logIndex=getResults.getLogMap()
stepURL=getResults.getURL(logIndex, "Run TESTENV=TestEnv")
}
Для генерации индекса, logIndex=getResults.getLogMap()
только 1 раз запускаете. А getURL с текстом на который нужна ссылка можно много раз дергать. Ну и затем его можно отправлять в письме. Задача не совсем про то что вы спрашивали, но надеюсь идея понятна.T
VD
VD
E
VD
E
E
VD
E
E
E
E
E
VD
E
II
parameters {
booleanParam (name: 'deploy-all', defaultValue: false, description: '')
string (name: 'ModuleBranch', defaultValue: '*/release/1.0.1', description: 'Ветка в проекте раскатки')
booleanParam (name: 'deploy-app-back', defaultValue: false, description: '')
booleanParam (name: 'deploy-app-front', defaultValue: false, description: '')
}
V