This Terraform module will create a self-hosted GitHub runner hosted on an Azure VM. The module will configure a Managed Identity for the VM. See examples for recommended terraform implementation.
- Supports Linux or Windows os runner type.
- Assigns a managed identity to allow access to Azure API.
- Supports repository or organization scoped runners.
- Both images install the following: Azure CLI, Terraform, and Git.
In order for the runner to access GitHub resources, the module requires supplying a runner token.
You can add self-hosted runners to a single repository. To add a self-hosted runner to a user repository, you must be the repository owner. For an organization repository, you must be an organization owner or have admin access to the repository.
- To generate a repository scoped runner token, from the repository go to Settings > Actions > Self-hosted runners section, clicking on “Add runner” button. Look for the token in the configuration steps:
$ ./config.cmd --url https://github.com/LexisNexis-RBA/terraform-azure-vm-github-runner --token {RUNNER_TOKEN} Run it! $ ./run.cmd
- Copy the token value. This will be used for the 'github_runner_token' variable.
You can add self-hosted runners at the organization level, where they can be used to process jobs for multiple repositories in an organization. To add a self-hosted runner to an organization, you must be an organization owner.
Name | Version |
---|---|
azurerm | >= 2.72, < 3.0 |
null | >= 3.0.0 |
tls | >= 3.1.0 |
Name | Version |
---|---|
azurerm | >= 2.72, < 3.0 |
random | n/a |
template | n/a |
tls | >= 3.1.0 |
No modules.
Name | Type |
---|---|
azurerm_linux_virtual_machine.vm | resource |
azurerm_network_interface.dynamic | resource |
azurerm_virtual_machine_extension.ext | resource |
azurerm_windows_virtual_machine.vm | resource |
random_password.password | resource |
tls_private_key.ssh_key | resource |
template_file.linux_script | data source |
Name | Description | Type | Default | Required |
---|---|---|---|---|
admin_password | the admin password. leave blank to assign a random password | string |
null |
no |
admin_username | the admin user | string |
"adminuser" |
no |
custom_ubuntu_image_id | the custom vm image to use | string |
null |
no |
diagnostics_storage_account_uri | The Endpoint for the Azure Storage Account which should be used to store Boot Diagnostics, including Console Output and Screenshots from the Hypervisor. | string |
null |
no |
enable_boot_diagnostics | Whether to enable boot diagnostics on the runner which enables the serial console | bool |
false |
no |
github_org_name | The GitHub organization. | string |
n/a | yes |
github_repo_name | The GitHub repository. | string |
null |
no |
github_runner_token | The GitHub runner token. | string |
n/a | yes |
identity_ids | Specifies a list of user assigned managed identity ids to be assigned to the VM. | list(string) |
[] |
no |
identity_type | The Managed Service Identity Type of this Virtual Machine. Possible values are SystemAssigned (where Azure will generate a Service Principal for you), UserAssigned (where you can specify the Service Principal ID's). | string |
"SystemAssigned" |
no |
location | Azure region | string |
n/a | yes |
name | The name of the created resources. | string |
n/a | yes |
resource_group_name | Resource group name | string |
n/a | yes |
runner_group | the group this runner belongs to. required if runner-scope is "org" | string |
"" |
no |
runner_labels | list of labels to associate to the runner | list(string) |
n/a | yes |
runner_os | The runner operating system. Allowed values are "linux" or "windows" | string |
"linux" |
no |
runner_scope | The scope of the runner. Choices are "Org" or "Repo". | string |
"repo" |
no |
subnet_id | Virtual network subnet ID | string |
n/a | yes |
tags | Tags to be applied to resources | map(string) |
{} |
no |
ubuntu_source_image_reference | The linux Ubuntu publisher image to use. | object({ |
{ |
no |
virtual_machine_size | Virtual machine instance size | string |
"Standard_D2s_v4" |
no |
win_computer_name | The windows computer name. | string |
null |
no |
windows_source_image_reference | The Windows publisher image to use. | object({ |
{ |
no |
Name | Description |
---|---|
computer_name | The virtual machine and github runner name |
principal_id | The principal id of the managed identity |
private_ip | Private IP Address of the virtual machine |