-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathinstall_runner_unix.yml
181 lines (164 loc) · 6.65 KB
/
install_runner_unix.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
---
- name: Create directory
ansible.builtin.file:
path: "{{ runner_dir }}"
state: directory
mode: "0755"
owner: "{{ runner_user_id.stdout }}"
group: "{{ runner_user_group_id.stdout }}"
- name: Set runner_version variable (If latest)
ansible.builtin.set_fact:
runner_version: "{{ api_response.json.tag_name | regex_replace('^v', '') }}"
when: runner_version == "latest"
- name: Check if desired version already installed
ansible.builtin.command: "grep -i {{ runner_version }} {{ runner_dir }}/bin/Runner.Listener.deps.json"
register: runner_installed
check_mode: false
changed_when: false
ignore_errors: true
- name: Unarchive runner package
ansible.builtin.unarchive:
src: "https://github.com/{{ runner_download_repository }}/releases/download/v{{ runner_version }}/\
actions-runner-{{ github_actions_system }}-{{ github_actions_architecture }}-{{ runner_version }}.tar.gz"
dest: "{{ runner_dir }}/"
owner: "{{ runner_user_id.stdout }}"
group: "{{ runner_user_group_id.stdout }}"
remote_src: true
mode: "0755"
environment:
PATH: /usr/local/bin:/opt/homebrew/bin/:{{ ansible_facts.user_dir }}/bin:{{ ansible_facts.env.PATH }}
when: runner_version not in runner_installed.stdout or reinstall_runner
- name: Configure custom env file if required
ansible.builtin.blockinfile:
path: "{{ runner_dir }}/.env"
block: "{{ custom_env }}"
owner: "{{ runner_user }}"
create: true
mode: "0755"
marker_begin: "# BEGIN ANSIBLE MANAGED BLOCK"
marker_end: "# END ANSIBLE MANAGED BLOCK"
when: custom_env is defined
- name: Check if runner service name file exist
ansible.builtin.stat:
path: "{{ runner_dir }}/.service"
register: runner_service_file_path
- name: Set complete GitHub url for repo runner
ansible.builtin.set_fact:
github_full_url: "{{ github_url }}/{{ github_owner | default(github_account) }}/{{ github_repo }}"
when: not runner_org and github_enterprise is not defined
- name: Set complete GitHub url for org runner
ansible.builtin.set_fact:
github_full_url: "{{ github_url }}/{{ github_owner | default(github_account) }}"
when: runner_org | bool and github_enterprise is not defined
- name: Set complete GitHub url for enterprise runner
ansible.builtin.set_fact:
github_full_url: "{{ github_url }}/enterprises/{{ github_enterprise }}"
when: github_enterprise is defined
- name: Register runner # noqa no-changed-when
environment:
RUNNER_ALLOW_RUNASROOT: "1"
ansible.builtin.command:
"{{ runner_dir }}/./config.sh \
--url {{ github_full_url }} \
--token {{ registration.json.token }} \
--name '{{ runner_name }}' \
--labels {{ runner_labels | join(',') }} \
--runnergroup {{ runner_group }} \
--unattended \
{{ runner_extra_config_args }}"
args:
chdir: "{{ runner_dir }}"
changed_when: true
become_user: "{{ runner_user }}"
become: true
no_log: "{{ hide_sensitive_logs | bool }}"
when: runner_name not in registered_runners.json.runners|map(attribute='name')|list
- name: Update runner labels if changed
ansible.builtin.uri:
url: "{{ github_full_api_url }}/{{ (registered_runners.json.runners | selectattr('name', 'equalto', runner_name) | first).id }}/labels"
headers:
Authorization: "Bearer {{ access_token }}"
Accept: "application/vnd.github+json"
method: PUT
body_format: json
body:
labels: "{{ runner_labels }}"
status_code: 200
force_basic_auth: true
when:
- runner_name in registered_runners.json.runners|map(attribute='name')|list
- (runner_labels | sort) != (registered_runners.json.runners | selectattr('name', 'equalto', runner_name) | first).labels |
selectattr('type', 'equalto', 'custom') |
map(attribute='name') |
list
- name: Replace registered runner # noqa no-changed-when
environment:
RUNNER_ALLOW_RUNASROOT: "1"
ansible.builtin.command:
"{{ runner_dir }}/config.sh \
--url {{ github_full_url }} \
--token {{ registration.json.token }} \
--name '{{ runner_name }}' \
--labels {{ runner_labels | join(',') }} \
--unattended \
{{ runner_extra_config_args }} \
--replace"
args:
chdir: "{{ runner_dir }}"
changed_when: true
become_user: "{{ runner_user }}"
become: true
no_log: "{{ hide_sensitive_logs | bool }}"
when: >
runner_name in registered_runners.json.runners|map(attribute='name')|list and
reinstall_runner
- name: Install service # noqa no-changed-when
ansible.builtin.command: "./svc.sh install {{ runner_user }}"
args:
chdir: "{{ runner_dir }}"
changed_when: true
become: "{{ 'false' if ansible_facts.system == 'Darwin' else 'true' }}"
when: not runner_service_file_path.stat.exists
- name: Read service name from file
ansible.builtin.slurp:
src: "{{ runner_dir }}/.service"
register: runner_service
- name: START and enable Github Actions Runner service (Linux) # noqa no-changed-when
ansible.builtin.command: "./svc.sh start"
args:
chdir: "{{ runner_dir }}"
become: true
no_log: "{{ hide_sensitive_logs | bool }}"
ignore_errors: "{{ ansible_check_mode }}"
changed_when: true
when: >
ansible_facts.system != 'Darwin' and
runner_state|lower == "started" and
ansible_facts.services[(runner_service.content | b64decode) | trim ]['state'] | default('stopped') != 'running'
- name: START and enable Github Actions Runner service (macOS) # TODO: Idempotence
ansible.builtin.command: "./svc.sh start" # noqa no-changed-when
args:
chdir: "{{ runner_dir }}"
become: false
no_log: "{{ hide_sensitive_logs | bool }}"
ignore_errors: "{{ ansible_check_mode }}"
changed_when: true
when: ansible_facts.system == 'Darwin' and runner_state|lower
- name: STOP and disable Github Actions Runner service # noqa no-changed-when
ansible.builtin.command: "./svc.sh stop"
args:
chdir: "{{ runner_dir }}"
changed_when: true
become: "{{ 'false' if ansible_distribution == 'MacOSX' else 'true' }}"
no_log: "{{ hide_sensitive_logs | bool }}"
ignore_errors: "{{ ansible_check_mode }}"
when: runner_state|lower == "stopped"
- name: Version changed - RESTART Github Actions Runner service
ansible.builtin.shell: "./svc.sh stop && sleep 5 && ./svc.sh start"
args:
chdir: "{{ runner_dir }}"
changed_when: true
become: "{{ 'false' if ansible_facts.system == 'Darwin' else 'true' }}"
no_log: "{{ hide_sensitive_logs | bool }}"
ignore_errors: "{{ ansible_check_mode }}"
when: runner_version not in runner_installed.stdout and not runner_state|lower == "stopped"