|
| 1 | +--- |
| 2 | +- name: Create directory |
| 3 | + ansible.windows.win_file: |
| 4 | + path: "{{ runner_dir }}" |
| 5 | + state: directory |
| 6 | + |
| 7 | +- name: Set owner of directory |
| 8 | + ansible.windows.win_owner: |
| 9 | + path: "{{ runner_dir }}" |
| 10 | + user: "{{ runner_user }}" |
| 11 | + |
| 12 | +- name: Set runner_version variable (If latest) |
| 13 | + ansible.builtin.set_fact: |
| 14 | + runner_version: "{{ api_response.json.tag_name | regex_replace('^v', '') }}" |
| 15 | + when: runner_version == "latest" |
| 16 | + |
| 17 | +- name: Check if desired version already installed |
| 18 | + ansible.windows.win_command: "grep -i {{ runner_version }} {{ runner_dir }}\\bin\\Runner.Listener.deps.json" |
| 19 | + register: runner_installed |
| 20 | + check_mode: false |
| 21 | + changed_when: false |
| 22 | + ignore_errors: true |
| 23 | + |
| 24 | +- name: Download runner package |
| 25 | + ansible.windows.win_get_url: |
| 26 | + url: "https://github.com/{{ runner_download_repository }}/releases/download/v{{ runner_version }}/\ |
| 27 | + actions-runner-{{ github_actions_system }}-{{ github_actions_architecture }}-{{ runner_version }}.zip" |
| 28 | + dest: "%TEMP%\\actions-runner-{{ github_actions_system }}-{{ github_actions_architecture }}-{{ runner_version }}.zip" |
| 29 | + when: runner_version not in runner_installed.stdout or reinstall_runner |
| 30 | + |
| 31 | +- name: Unarchive runner package |
| 32 | + community.windows.win_unzip: |
| 33 | + src: "%TEMP%\\actions-runner-{{ github_actions_system }}-{{ github_actions_architecture }}-{{ runner_version }}.zip" |
| 34 | + dest: "{{ runner_dir }}\\" |
| 35 | + delete_archive: yes |
| 36 | + when: runner_version not in runner_installed.stdout or reinstall_runner |
| 37 | + |
| 38 | +- name: Configure custom env file if required |
| 39 | + randrej.windows.win_blockinfile: |
| 40 | + path: "{{ runner_dir }}\\.env" |
| 41 | + block: "{{ custom_env }}" |
| 42 | + create: true |
| 43 | + marker: "# {mark} ANSIBLE MANAGED BLOCK" |
| 44 | + marker_begin: BEGIN |
| 45 | + marker_end: END |
| 46 | + when: custom_env is defined |
| 47 | + |
| 48 | +- name: Check if runner service name file exist |
| 49 | + ansible.windows.win_stat: |
| 50 | + path: "{{ runner_dir }}/.service" |
| 51 | + register: runner_service_file_path |
| 52 | + |
| 53 | +- name: Set complete GitHub url for repo runner |
| 54 | + ansible.builtin.set_fact: |
| 55 | + github_full_url: "{{ github_url }}/{{ github_owner | default(github_account) }}/{{ github_repo }}" |
| 56 | + when: not runner_org and github_enterprise is not defined |
| 57 | + |
| 58 | +- name: Set complete GitHub url for org runner |
| 59 | + ansible.builtin.set_fact: |
| 60 | + github_full_url: "{{ github_url }}/{{ github_owner | default(github_account) }}" |
| 61 | + when: runner_org | bool and github_enterprise is not defined |
| 62 | + |
| 63 | +- name: Set complete GitHub url for enterprise runner |
| 64 | + ansible.builtin.set_fact: |
| 65 | + github_full_url: "{{ github_url }}/enterprises/{{ github_enterprise }}" |
| 66 | + when: github_enterprise is defined |
| 67 | + |
| 68 | +- name: Register runner # noqa no-changed-when |
| 69 | + environment: |
| 70 | + RUNNER_ALLOW_RUNASROOT: "1" |
| 71 | + ansible.windows.win_command: |
| 72 | + "{{ runner_dir }}\\config.cmd \ |
| 73 | + --url {{ github_full_url }} \ |
| 74 | + --token {{ registration.json.token }} \ |
| 75 | + --name {{ runner_name }} \ |
| 76 | + --labels {{ runner_labels | join(',') }} \ |
| 77 | + --runnergroup {{ runner_group }} \ |
| 78 | + --runasservice \ |
| 79 | + --windowslogonaccount {{ runner_user }} \ |
| 80 | + --windowslogonpassword {{ runner_user_win_password }} \ |
| 81 | + --unattended \ |
| 82 | + {{ runner_extra_config_args }}" |
| 83 | + args: |
| 84 | + chdir: "{{ runner_dir }}" |
| 85 | + changed_when: true |
| 86 | + become_method: ansible.builtin.runas |
| 87 | + become_user: "{{ runner_user }}" |
| 88 | + become: true |
| 89 | + no_log: "{{ hide_sensitive_logs | bool }}" |
| 90 | + when: runner_name not in registered_runners.json.runners|map(attribute='name')|list |
| 91 | + |
| 92 | +- name: Replace registered runner # noqa no-changed-when |
| 93 | + environment: |
| 94 | + RUNNER_ALLOW_RUNASROOT: "1" |
| 95 | + ansible.windows.win_command: |
| 96 | + "{{ runner_dir }}\\config.cmd \ |
| 97 | + --url {{ github_full_url }} \ |
| 98 | + --token {{ registration.json.token }} \ |
| 99 | + --name {{ runner_name }} \ |
| 100 | + --labels {{ runner_labels | join(',') }} \ |
| 101 | + --runasservice \ |
| 102 | + --windowslogonaccount {{ runner_user }} \ |
| 103 | + --windowslogonpassword {{ runner_user_win_password }} \ |
| 104 | + --unattended \ |
| 105 | + {{ runner_extra_config_args }} \ |
| 106 | + --replace" |
| 107 | + args: |
| 108 | + chdir: "{{ runner_dir }}" |
| 109 | + changed_when: true |
| 110 | + become_method: ansible.builtin.runas |
| 111 | + become_user: "{{ runner_user }}" |
| 112 | + become: true |
| 113 | + no_log: "{{ hide_sensitive_logs | bool }}" |
| 114 | + when: > |
| 115 | + runner_name in registered_runners.json.runners|map(attribute='name')|list and |
| 116 | + reinstall_runner |
| 117 | +
|
| 118 | +- name: Read service name from file |
| 119 | + ansible.windows.win_command: "cat {{ runner_dir }}\\.service" |
| 120 | + register: runner_service |
| 121 | + changed_when: false |
| 122 | + |
| 123 | +- name: START and enable Github Actions Runner service |
| 124 | + ansible.windows.win_service: |
| 125 | + name: "{{ runner_service.stdout }}" |
| 126 | + start_mode: auto |
| 127 | + state: started |
| 128 | + when: runner_state|lower == "started" |
| 129 | + |
| 130 | +- name: STOP and disable Github Actions Runner service |
| 131 | + ansible.windows.win_service: |
| 132 | + name: "{{ runner_service.stdout }}" |
| 133 | + start_mode: manual |
| 134 | + state: stopped |
| 135 | + when: runner_state|lower == "stopped" |
| 136 | + |
| 137 | +- name: Version changed - RESTART Github Actions Runner service |
| 138 | + ansible.windows.win_service: |
| 139 | + name: "{{ runner_service.stdout }}" |
| 140 | + start_mode: auto |
| 141 | + state: restarted |
| 142 | + when: runner_version not in runner_installed.stdout and not runner_state|lower == "stopped" |
0 commit comments