summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordd <dd@wx.tnyzeq.icu>2024-05-25 19:33:48 +0200
committerdd <dd@wx.tnyzeq.icu>2024-05-25 19:33:48 +0200
commit719af0bf312c01f97af59db8f0cc46d9c2a99995 (patch)
tree8f2bf3ea8cb71d5f17678bfc70d9d8e418e10fae
parentebe6193a5b8cef88a418d73d728d18beac56ac70 (diff)
downloadvyos-jenkins-719af0bf312c01f97af59db8f0cc46d9c2a99995.tar.gz
vyos-jenkins-719af0bf312c01f97af59db8f0cc46d9c2a99995.zip
added example jenkins script
-rw-r--r--jenkins-scripts/readme.md16
-rwxr-xr-xjenkins-scripts/setup-periodic-trigger-for-all-jobs.sh52
-rw-r--r--readme.md5
3 files changed, 73 insertions, 0 deletions
diff --git a/jenkins-scripts/readme.md b/jenkins-scripts/readme.md
new file mode 100644
index 0000000..cad1136
--- /dev/null
+++ b/jenkins-scripts/readme.md
@@ -0,0 +1,16 @@
+Here I post some scripts as example how to manage Jenkins automatically.
+
+In order to make scripts work you need to create API token update script to use your credentials.
+
+Jenkins setup
+--
+
+**User account (click on your username - top-right corner) -> Configure**
+
+**API Token -> Current token(s) -> Add new Token**
+
+```
+Name: CLI
+```
+
+-> Generate -> [copy generated key and save it for later use]
diff --git a/jenkins-scripts/setup-periodic-trigger-for-all-jobs.sh b/jenkins-scripts/setup-periodic-trigger-for-all-jobs.sh
new file mode 100755
index 0000000..eda5be1
--- /dev/null
+++ b/jenkins-scripts/setup-periodic-trigger-for-all-jobs.sh
@@ -0,0 +1,52 @@
+#!/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
+#
+
+user="YOUR_JENKINS_USERNAME"
+token="YOUR_JENKINS_TOKEN"
+jenkinsUrl="http://${user}:${token}@172.17.17.17:8080"
+workingDir="/opt/jenkins-cli"
+
+mkdir -p "$workingDir"
+
+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 projectName; do
+
+ echo -n "$projectName:"
+
+ originalPath="$workingDir/$projectName.xml"
+ get "/job/$projectName/config.xml" > "$originalPath"
+
+ updatedPath="$workingDir/${projectName}_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/$projectName/config.xml" "$updatedPath"
+
+ echo " ok"
+
+done
diff --git a/readme.md b/readme.md
index a8a5e46..4972a55 100644
--- a/readme.md
+++ b/readme.md
@@ -1005,3 +1005,8 @@ How to use your mirror:
`--vyos-mirror http://172.17.17.17/equuleus` or `--vyos-mirror http://172.17.17.17/sagitta` and your singing key
` --custom-apt-key /opt/apt.gpg.key`.
4) Now the builder uses your mirror instead of `http://dev.packages.vyos.net/`.
+
+Smoketest
+--
+
+TODO: include instructions how to run standalone smoketest