Skip to content

Commit 6f5a3dc

Browse files
authored
ci: download the latest github runner on a VM start (#7987)
1 parent b13ee2c commit 6f5a3dc

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

ydb/ci/gh-runner-controller/src/scaler/cloud_config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import yaml
44

55

6-
def create_userdata(repo_url, gh_token, runner_name, runner_labels, ssh_keys):
6+
def create_userdata(repo_url, gh_token, runner_name, runner_labels, ssh_keys, agent_mirror_url_prefix):
77
runner_username = "runner"
88

99
install_script = pkgutil.get_data(__name__, "scripts/install_runner.sh")
@@ -16,6 +16,7 @@ def create_userdata(repo_url, gh_token, runner_name, runner_labels, ssh_keys):
1616
GITHUB_TOKEN="{gh_token}"
1717
RUNNER_NAME="{runner_name}"
1818
RUNNER_LABELS="{runner_labels}"
19+
AGENT_MIRROR_URL_PREFIX="{agent_mirror_url_prefix}"
1920
""".strip().encode(
2021
"utf8"
2122
)

ydb/ci/gh-runner-controller/src/scaler/controller.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ def start_runner(self, preset_name: str):
189189
labels.extend(preset['additional_labels'])
190190

191191
vm_labels = {self.prefix: runner_name}
192-
user_data = create_userdata(self.gh.html_url, new_runner_token, runner_name, labels, self.cfg.ssh_keys)
192+
user_data = create_userdata(self.gh.html_url, new_runner_token, runner_name, labels, self.cfg.ssh_keys,
193+
self.cfg.agent_mirror_url_prefix)
193194

194195
placement = random.choice(self.cfg.yc_zones)
195196
zone_id = placement['zone_id']
@@ -198,15 +199,15 @@ def start_runner(self, preset_name: str):
198199
self.logger.info("start runner %s in %s (%s)", runner_name, zone_id, labels)
199200

200201
try:
201-
instance = self.yc.start_vm(zone_id, subnet_id, runner_name, preset_name, user_data, vm_labels)
202+
response = self.yc.start_vm(zone_id, subnet_id, runner_name, preset_name, user_data, vm_labels)
202203
except grpc.RpcError as rpc_error:
203204
# noinspection PyUnresolvedReferences
204205
if rpc_error.code() == grpc.StatusCode.RESOURCE_EXHAUSTED:
205206
raise VMQuotaError()
206207
else:
207208
raise
208209

209-
self.logger.info("instance %s started", instance.id)
210+
self.logger.info("starting, operation_id=%s", response.id)
210211
return runner_name
211212

212213
def delete_runner(self, runner):

ydb/ci/gh-runner-controller/src/scaler/scripts/install_runner.sh

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function fail() {
1111
}
1212

1313
function get_instance_id {
14-
curl -H Metadata-Flavor:Google 169.254.169.254/computeMetadata/v1/instance/vendor/identity/document | jq -r '.instanceId'
14+
curl -sS --retry 8 -H Metadata-Flavor:Google 169.254.169.254/computeMetadata/v1/instance/vendor/identity/document | jq -r '.instanceId'
1515
}
1616

1717
vars_to_check=("REPO_URL" "GITHUB_TOKEN" "RUNNER_NAME" "RUNNER_LABELS" "RUNNER_USERNAME")
@@ -24,15 +24,23 @@ done
2424

2525

2626
H=/home/$RUNNER_USERNAME
27+
mkdir "$H"/actions_runner
28+
cd "$_"
29+
30+
{
31+
agent_latest_version=$(curl -sS --retry 8 "$AGENT_MIRROR_URL_PREFIX/latest") && \
32+
agent_download_url="$AGENT_MIRROR_URL_PREFIX/$agent_latest_version" && \
33+
curl -sS --retry 8 "$agent_download_url" | tar -xz
34+
} || {
35+
# use bundled agent
36+
cp -rT /opt/cache/actions-runner/latest/ "$H"/actions_runner
37+
}
2738

28-
cp -r /opt/cache/actions-runner/latest "$H"/actions_runner
29-
chown "$RUNNER_USERNAME":"$RUNNER_USERNAME" "$H"/actions_runner
30-
31-
cd "$H"/actions_runner
39+
chown -R "$RUNNER_USERNAME":"$RUNNER_USERNAME" "$H"/actions_runner
3240

3341
instance_id=$(get_instance_id)
3442

35-
sudo -u "$RUNNER_USERNAME" ./config.sh --unattended --url "${REPO_URL}" --token "${GITHUB_TOKEN}" --name "${RUNNER_NAME}" --labels "${RUNNER_LABELS},instance:${instance_id}"
43+
sudo -u "$RUNNER_USERNAME" ./config.sh --unattended --disableupdate --url "${REPO_URL}" --token "${GITHUB_TOKEN}" --name "${RUNNER_NAME}" --labels "${RUNNER_LABELS},instance:${instance_id}"
3644

3745
./svc.sh install "${RUNNER_USERNAME}" || fail "failed to install service"
3846

0 commit comments

Comments
 (0)