summaryrefslogtreecommitdiff
path: root/extras/examples/setup-periodic-trigger-for-all-jobs.sh
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