Kicking off Jenkins from terminal » History » Version 1
Tom Clegg, 10/26/2022 03:18 PM
1 | 1 | Tom Clegg | h1. Kicking off Jenkins from terminal |
---|---|---|---|
2 | |||
3 | I have the following awful script in @~/bin/buildit@, and a Jenkins API token in @~/.jenkins-token.buildit@. |
||
4 | * leave @buildit sync@ running in a screen window somewhere |
||
5 | * @~/arvados$ buildit submit@ pushes the current branch and starts a developer-run-tests job to test it |
||
6 | * switch to the window where @buildit sync@ is running and wait for it to print a line like <pre> |
||
7 | 19563-log-cr-mem @ commit:8860ada0a6afd6adb2b26d5b0ab161bfe66c6019 -- https://ci.arvados.org/job/developer-run-tests/3339/ |
||
8 | </pre> |
||
9 | * paste that into a note on the relevant issue |
||
10 | |||
11 | <pre><code class="bash"> |
||
12 | #!/bin/bash |
||
13 | |||
14 | set -e |
||
15 | |||
16 | if [[ -z "$1" ]]; then |
||
17 | echo >&2 "usage: $0 { sync | sync1 | submit }" |
||
18 | exit 2 |
||
19 | fi |
||
20 | |||
21 | setup() { |
||
22 | cache=~/.cache/buildit |
||
23 | mkdir -p "${cache}" |
||
24 | |||
25 | user="$(whoami)" |
||
26 | if ! read token <~/.jenkins-token.buildit; then |
||
27 | echo >&2 cannot read token |
||
28 | exit $? |
||
29 | fi |
||
30 | } |
||
31 | |||
32 | sync() { |
||
33 | while : ; do |
||
34 | sync1 || echo >&2 "sync: error: $?" |
||
35 | sleep 30 |
||
36 | done |
||
37 | } |
||
38 | |||
39 | sync1() { |
||
40 | for cachefile in $(find "${cache}" -type f); do |
||
41 | read timestamp sha1 abbrev branch < ${cachefile} |
||
42 | echo "TODO: $timestamp $sha1 $abbrev $branch" |
||
43 | curl -fgLsS \ |
||
44 | -X GET \ |
||
45 | --user "$user:$token" \ |
||
46 | "https://ci.arvados.org/api/json?tree=jobs[name,number,builds[number,id,timestamp,result,displayName,description,actions[parameters[name,value]]]]" \ |
||
47 | | tee /tmp/jenkins-builds.json \ |
||
48 | | jq -r '.jobs |
||
49 | | map(select(.name == "developer-run-tests")) |
||
50 | | .[].builds |
||
51 | | map(select(.actions[].parameters[0].name == "git_hash" and |
||
52 | .actions[].parameters[0].value == "'"${sha1}"'" and |
||
53 | .timestamp > '"${timestamp}"' - 60000 and |
||
54 | .timestamp < '"${timestamp}"' + 3600000)) |
||
55 | | .[] |
||
56 | | ((.number | tostring) + " " + (.displayName | tostring)) |
||
57 | ' | tee /tmp/jenkins-id-name \ |
||
58 | | while read b displayName; do |
||
59 | if [[ "$displayName" != "$abbrev" ]]; then |
||
60 | echo -e "$cachefile: build $b => $abbrev $branch\n\n$branch @ commit:$sha1 -- https://ci.arvados.org/job/developer-run-tests/$b/\n" |
||
61 | curl -fgLsS \ |
||
62 | -X POST \ |
||
63 | --user "$user:$token" \ |
||
64 | --data-urlencode submit=Save \ |
||
65 | --data-urlencode json='{"displayName":"'$abbrev'","description":"'$branch'"}' \ |
||
66 | "https://ci.arvados.org/job/developer-run-tests/$b/configSubmit" >/dev/null |
||
67 | else |
||
68 | echo "$cachefile: build $b => $abbrev $branch => done" |
||
69 | rm -v "${cachefile}" || true |
||
70 | fi |
||
71 | done |
||
72 | done |
||
73 | } |
||
74 | |||
75 | submit() { |
||
76 | if [[ -n "$(git diff; git diff --cached)" ]]; then |
||
77 | echo >&2 NOPE, uncommitted stuff |
||
78 | exit 1 |
||
79 | fi |
||
80 | |||
81 | git push >&2 |
||
82 | sha1="$(git log -n1 --format=%H)" |
||
83 | branch="$(git describe --contains --all HEAD)" |
||
84 | abbrev="$(git log -n1 --format=%h)" |
||
85 | echo >&2 "$branch $abbrev $sha1 $token" |
||
86 | |||
87 | timestamp="$(printf %.03f $(date +%s.%N) | tr -d .)" |
||
88 | curl -fgLsS \ |
||
89 | -X POST \ |
||
90 | --user "$user:$token" \ |
||
91 | --data-urlencode json='{"parameter":[{"name":"git_hash","value":"'$sha1'"}]}' \ |
||
92 | "https://ci.arvados.org/job/developer-run-tests/build" |
||
93 | echo $timestamp $sha1 $abbrev $branch | tee ${cache}/${timestamp} |
||
94 | } |
||
95 | |||
96 | setup |
||
97 | ${@} |
||
98 | </code></pre> |