File tree 5 files changed +122
-0
lines changed
5 files changed +122
-0
lines changed Original file line number Diff line number Diff line change @@ -125,6 +125,26 @@ RUN set -x \
125
125
&& rm -rf /tmp/k8s-sidecar \
126
126
;
127
127
128
+ # Install Image Triggers
129
+ ENV IMAGE_TRIGGERS_VERSION=0.0.4 \
130
+ IMAGE_TRIGGERS_CHECKSUM_X86_64=d48257a84ca50a9d955a5e41ba954e68724ad0a6baf5ecf4fab8120262925efc \
131
+ IMAGE_TRIGGERS_CHECKSUM_AARCH64=b242e58d4502e11542d64e5d4905c7f480a0444a3081b03ba9f3d6d7256ef298
132
+ RUN set -x \
133
+ && if [ "$(uname -m)" = "x86_64" ] ; then \
134
+ IMAGE_TRIGGERS_CHECKSUM="${IMAGE_TRIGGERS_CHECKSUM_X86_64}" ; \
135
+ ARCH="linux_amd64" ; \
136
+ elif [ "$(uname -m)" = "aarch64" ]; then \
137
+ IMAGE_TRIGGERS_CHECKSUM="${IMAGE_TRIGGERS_CHECKSUM_AARCH64}" ; \
138
+ ARCH="linux_arm64" ; \
139
+ fi \
140
+ && wget --no-verbose https://github.com/panubo/image-triggers/releases/download/v${IMAGE_TRIGGERS_VERSION}/image-triggers_${IMAGE_TRIGGERS_VERSION}_${ARCH}.tar.gz -O /tmp/image-triggers.tar.gz \
141
+ && echo "${IMAGE_TRIGGERS_CHECKSUM} image-triggers.tar.gz" > /tmp/SHA256SUM \
142
+ && ( cd /tmp; sha256sum -c SHA256SUM || ( echo "Expected $(sha256sum image-triggers.tar.gz)" ; exit 1; )) \
143
+ && tar -C /usr/local/bin -zxf /tmp/image-triggers.tar.gz \
144
+ && chmod +x /usr/local/bin/image-triggers \
145
+ && rm -f /tmp/image-triggers.tar.gz /tmp/SHA256SUM \
146
+ ;
147
+
128
148
# Download plugins
129
149
COPY install-plugins.sh /
130
150
RUN /install-plugins.sh
Original file line number Diff line number Diff line change 5
5
6
6
vars :
7
7
- rundeck_tokens : []
8
+ - rundeck_triggers_registry_rules : []
8
9
9
10
tasks :
10
11
- include_tasks : scripts.yml
Original file line number Diff line number Diff line change 27
27
mode : " 0700"
28
28
owner : root
29
29
group : root
30
+
31
+ - name : Write trigger_rundeck_job.sh
32
+ template :
33
+ dest : " /scripts/trigger_rundeck_job.sh"
34
+ src : " templates/trigger_rundeck_job.sh.j2"
35
+ mode : " 0700"
36
+ owner : root
37
+ group : root
38
+
39
+ - name : Write trigger_registry_rules.sh
40
+ template :
41
+ dest : " /scripts/trigger_registry_rules.sh"
42
+ src : " templates/trigger_registry_rules.sh.j2"
43
+ mode : " 0700"
44
+ owner : root
45
+ group : root
Original file line number Diff line number Diff line change
1
+ #! /usr/bin/env bash
2
+ #
3
+ # LICENSE: MIT License, Copyright (C) 2020-2025 Volt Grid Pty Ltd
4
+ #
5
+ # This triggers Rundeck jobs in response to registry events. Acts as a
6
+ # filter on which images/tags trigger a corresponding action.
7
+ # This is used by image-triggers.
8
+
9
+ set -euo pipefail
10
+ IFS=$' \n\t '
11
+
12
+ image_name=" ${1} "
13
+ image_tag=" ${2} "
14
+
15
+ rundeck () {
16
+ echo " >> Running: trigger_rundeck_job.sh ${@ } "
17
+ /scripts/trigger_rundeck_job.sh " ${@ } "
18
+ }
19
+
20
+ {% for rule in rundeck_triggers_registry_rules %}
21
+ {% if loop.first %}if{% else %}elif{% endif %} [[ " ${image_name} " =~ {{ rule.rule.name }} ]] && [[ " ${image_tag} " =~ {{ rule.rule.tag }} ]]; then
22
+ {% for action in rule.actions %}
23
+ echo " >> Matched ${image_name} :${image_tag} "
24
+ {{ action }}
25
+ {% endfor %}
26
+ {% endfor %}
27
+ else
28
+ echo " >> No matching rules for ${image_name} :${image_tag} "
29
+ fi
Original file line number Diff line number Diff line change
1
+ #! /usr/bin/env bash
2
+ #
3
+ # LICENSE: MIT License, Copyright (C) 2020-2025 Volt Grid Pty Ltd
4
+ #
5
+ # Triggers a Rundeck Job using the API
6
+ # Used by image triggers to trigger a job in response to a registry event
7
+
8
+ set -euo pipefail
9
+ IFS=$' \n\t '
10
+
11
+ echo " >> Running $( basename " $0 " ) "
12
+
13
+ RD_TOKEN=" {{ rundeck_token_configuresh }}"
14
+ CONFIG_DIR=" ${CONFIG_DIR:-/ config} "
15
+
16
+ project=" ${1} "
17
+ job=" ${2} "
18
+ shift 2
19
+
20
+ # wait_http URL [TIMEOUT] [HTTP TIMEOUT]
21
+ wait_http () {
22
+ # Wait for http service to be available
23
+ command -v curl > /dev/null 2>&1 || { error " This function requires curl to be installed." ; return 1; }
24
+ local url=" ${1:- ' http://localhost' } "
25
+ local timeout=" ${2:- 30} "
26
+ local http_timeout=" ${3:- 2} "
27
+ echo -n " Connecting to HTTP at ${url} "
28
+ for (( i= 0 ;; i++ )) ; do
29
+ if [[ " ${i} " -eq " ${timeout} " ]]; then
30
+ echo " timeout!"
31
+ return 99
32
+ fi
33
+ sleep 1
34
+ (curl --max-time " ${http_timeout} " " ${url} " ) & > /dev/null && break
35
+ echo -n " ."
36
+ done
37
+ echo " connected."
38
+ exec 3>& -
39
+ exec 3< & -
40
+ }
41
+
42
+ wait_http " ${RD_URL} " 300
43
+
44
+ data=()
45
+
46
+ for item in " ${@ } " ; do
47
+ data+=(" -d" " option.${item} " )
48
+ done
49
+
50
+ get_job_id () {
51
+ curl " ${RD_URL} /api/14/project/${project} /jobs?jobExactFilter=${job} " -H " Accept: application/json" -H " X-Rundeck-Auth-Token: ${RD_TOKEN} " -sSf | jq -r ' .[0].id'
52
+ }
53
+
54
+ curl -XPOST " ${RD_URL} /api/18/job/$( get_job_id) /run" -H " Accept: application/json" -H " X-Rundeck-Auth-Token: ${RD_TOKEN} " -sSf " ${data[@]} " | jq .
55
+
56
+ echo " >> Finished $( basename " $0 " ) "
You can’t perform that action at this time.
0 commit comments