blob: 2265a1a414b581d56f0a4f1d183c32c86dff8ac8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/usr/bin/env bash
set -e
#
# This script lists all available jobs
# then obtains XML definition for each job
# then modifies XML definition (adds periodic trigger)
# and at last pushes modified XML definition to Jenkins
#
# This may not be useful to you but it shows how to interact with Jenkins in automated way.
#
# dependency: apt install xmlstarlet
#
jenkinsUser="" # fill your username here or set via export JENKINS_USER
jenkinsToken="" # fill your token here or set via export JENKINS_TOKEN
jenkinsHost="172.17.17.17:8080"
workDir="/tmp/jenkins-cli-experiments"
mkdir -p "$workDir"
templatePath="jobTemplate.xml"
jenkinsUser=${jenkinsUser:-$JENKINS_USER}
jenkinsToken=${jenkinsToken:-$JENKINS_TOKEN}
jenkinsUrl="http://${jenkinsUser}:${jenkinsToken}@$jenkinsHost"
get() {
curl -sS -g "${jenkinsUrl}${1}"
}
push() {
curl -sS -g -X POST -d "@${2}" -H "Content-Type: text/xml" "${jenkinsUrl}${1}"
}
get "/api/xml?tree=jobs[name]" | xmlstarlet sel -t -v "//hudson/job/name" | while read jobName || [ -n "$jobName" ]; do
echo -n "$jobName:"
originalPath="$workDir/$jobName.xml"
get "/job/$jobName/config.xml" > "$originalPath"
updatedPath="$workDir/${jobName}_updated.xml"
project="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject"
trigger="com.cloudbees.hudson.plugins.folder.computed.PeriodicFolderTrigger"
plugin="cloudbees-folder@6.928.v7c780211d66e"
xmlstarlet ed --delete "//$project/triggers/$trigger" \
--subnode "//$project/triggers" --type elem --name "$trigger" \
--append "//$project/triggers/$trigger" --type attr --name plugin --value "$plugin" \
--subnode "//$project/triggers/$trigger" --type elem --name spec --value "H/15 * * * *" \
--subnode "//$project/triggers/$trigger" --type elem --name interval --value "3600000" \
"$originalPath" > "$updatedPath" 2>/dev/null
push "/job/$jobName/config.xml" "$updatedPath"
echo " ok"
done
|