Skip to content

Commit e32f3bc

Browse files
authored
fix: ensure a complete config.toml before starting the GitLab Agent (#574)
* fetch token as early as possible * move sentry_dsn init
1 parent 64b8594 commit e32f3bc

File tree

1 file changed

+36
-36
lines changed

1 file changed

+36
-36
lines changed

template/gitlab-runner.tpl

+36-36
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,42 @@ EOF
1616

1717
sed -i.bak s/__PARENT_TAG__/`echo $PARENT_TAG`/g /etc/gitlab-runner/config.toml
1818

19+
# fetch Runner token from SSM and validate it
20+
token=$(aws ssm get-parameters --names "${secure_parameter_store_runner_token_key}" --with-decryption --region "${secure_parameter_store_region}" | jq -r ".Parameters | .[0] | .Value")
21+
22+
valid_token=true
23+
if [[ `echo $token` != "null" ]]
24+
then
25+
valid_token_response=$(curl -s -o /dev/null -w "%%{response_code}" --request POST -L "${runners_gitlab_url}/api/v4/runners/verify" --form "token=$token" )
26+
[[ `echo $valid_token_response` != "200" ]] && valid_token=false
27+
fi
28+
29+
if [[ `echo ${runners_token}` == "__REPLACED_BY_USER_DATA__" && `echo $token` == "null" ]] || [[ `echo $valid_token` == "false" ]]
30+
then
31+
token=$(curl --request POST -L "${runners_gitlab_url}/api/v4/runners" \
32+
--form "token=${gitlab_runner_registration_token}" \
33+
--form "tag_list=${gitlab_runner_tag_list}" \
34+
--form "description=${giltab_runner_description}" \
35+
--form "locked=${gitlab_runner_locked_to_project}" \
36+
--form "run_untagged=${gitlab_runner_run_untagged}" \
37+
--form "maximum_timeout=${gitlab_runner_maximum_timeout}" \
38+
--form "access_level=${gitlab_runner_access_level}" \
39+
| jq -r .token)
40+
aws ssm put-parameter --overwrite --type SecureString --name "${secure_parameter_store_runner_token_key}" --value="$token" --region "${secure_parameter_store_region}"
41+
fi
42+
43+
sed -i.bak s/__REPLACED_BY_USER_DATA__/`echo $token`/g /etc/gitlab-runner/config.toml
44+
45+
ssm_sentry_dsn=$(aws ssm get-parameters --names "${secure_parameter_store_runner_sentry_dsn}" --with-decryption --region "${secure_parameter_store_region}" | jq -r ".Parameters | .[0] | .Value")
46+
if [[ `echo ${sentry_dsn}` == "__SENTRY_DSN_REPLACED_BY_USER_DATA__" && `echo $ssm_sentry_dsn` == "null" ]]
47+
then
48+
ssm_sentry_dsn=""
49+
fi
50+
51+
# For those of you wondering why commas are used in the sed below instead of forward slashes, see https://stackoverflow.com/a/16778711/13169919
52+
# It is because the Sentry DSN contains forward slashes as it is an URL so it would break out of the sed command with forward slashes as delimiters :)
53+
sed -i.bak s,__SENTRY_DSN_REPLACED_BY_USER_DATA__,`echo $ssm_sentry_dsn`,g /etc/gitlab-runner/config.toml
54+
1955
${pre_install}
2056

2157
if [[ `echo ${runners_executor}` == "docker" ]]
@@ -67,42 +103,6 @@ docker-machine rm -y dummy-machine
67103
unset HOME
68104
unset USER
69105

70-
# fetch Runner token from SSM and validate it
71-
token=$(aws ssm get-parameters --names "${secure_parameter_store_runner_token_key}" --with-decryption --region "${secure_parameter_store_region}" | jq -r ".Parameters | .[0] | .Value")
72-
73-
valid_token=true
74-
if [[ `echo $token` != "null" ]]
75-
then
76-
valid_token_response=$(curl -s -o /dev/null -w "%%{response_code}" --request POST -L "${runners_gitlab_url}/api/v4/runners/verify" --form "token=$token" )
77-
[[ `echo $valid_token_response` != "200" ]] && valid_token=false
78-
fi
79-
80-
if [[ `echo ${runners_token}` == "__REPLACED_BY_USER_DATA__" && `echo $token` == "null" ]] || [[ `echo $valid_token` == "false" ]]
81-
then
82-
token=$(curl --request POST -L "${runners_gitlab_url}/api/v4/runners" \
83-
--form "token=${gitlab_runner_registration_token}" \
84-
--form "tag_list=${gitlab_runner_tag_list}" \
85-
--form "description=${giltab_runner_description}" \
86-
--form "locked=${gitlab_runner_locked_to_project}" \
87-
--form "run_untagged=${gitlab_runner_run_untagged}" \
88-
--form "maximum_timeout=${gitlab_runner_maximum_timeout}" \
89-
--form "access_level=${gitlab_runner_access_level}" \
90-
| jq -r .token)
91-
aws ssm put-parameter --overwrite --type SecureString --name "${secure_parameter_store_runner_token_key}" --value="$token" --region "${secure_parameter_store_region}"
92-
fi
93-
94-
sed -i.bak s/__REPLACED_BY_USER_DATA__/`echo $token`/g /etc/gitlab-runner/config.toml
95-
96-
ssm_sentry_dsn=$(aws ssm get-parameters --names "${secure_parameter_store_runner_sentry_dsn}" --with-decryption --region "${secure_parameter_store_region}" | jq -r ".Parameters | .[0] | .Value")
97-
if [[ `echo ${sentry_dsn}` == "__SENTRY_DSN_REPLACED_BY_USER_DATA__" && `echo $ssm_sentry_dsn` == "null" ]]
98-
then
99-
ssm_sentry_dsn=""
100-
fi
101-
102-
# For those of you wondering why commas are used in the sed below instead of forward slashes, see https://stackoverflow.com/a/16778711/13169919
103-
# It is because the Sentry DSN contains forward slashes as it is an URL so it would break out of the sed command with forward slashes as delimiters :)
104-
sed -i.bak s,__SENTRY_DSN_REPLACED_BY_USER_DATA__,`echo $ssm_sentry_dsn`,g /etc/gitlab-runner/config.toml
105-
106106
# A small script to remove this runner from being registered with Gitlab.
107107
cat <<REM > /etc/rc.d/init.d/remove_gitlab_registration
108108
#!/bin/bash

0 commit comments

Comments
 (0)