Vagrant is a tool to build a VirtualBox virtual machine (VM).
We will use a Vagrant to create a VM and an Ansible playbook to install a GitHub Action runner on it. When done a GitHub action workflow configured with runs-on: self-hosted
will run on that runner in the VM.
- VirtualBox
- Vagrant
- Ansible,
I suggest using a Python virtual environment and
pip install ansible
.
Virtual machine can be started from this (/ubuntu-vagrant) directory with
vagrant up
This will have started a Ubuntu 18.04 virtual machine in VirtualBox.
Login with vagrant ssh and get the hostname with
vagrant ssh -c hostname
This should output vagrant
, which is the hostname of the VM.
(If you get Host key verification failed
error then clear previous key with ssh-keygen -R "[127.0.0.1]:2222"
and try again)
To use other ssh client get the ssh config with
vagrant ssh-config
This will output something like
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/verhoes/git/NLESC-JCER/linux_actions_runner/ubuntu-vagrant/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
So to login with ssh client and to get hostname use
ssh -i .vagrant/machines/default/virtualbox/private_key -p 2222 [email protected] hostname
It should output vagrant
, which is the hostname of the VM.
To use Ansible you need an inventory file. An example inventory file called hosts.example
should be copied to hosts
and updated to reflect your situation.
cp hosts.example hosts
Ansible must be configured for which GitHub account/organization and repository it should setup a runner for.
The repository must be configured in github_account
and github_repo
fields in the hosts
file.
As a repository, you can use a duplicate of https://github.com/ci-for-science/example-python-1 repository which has a workflow that runs on a self-hosted runner or any repository which has a GitHub Action workflow that has runs-on: self-hosted
.
The Ansible playbook uses Personal Access Token for GitHub account to register the runner.
The token needs to have full admin rights for the repo. At the moment the checkbox that needs to be checked is called repo Full control of private repositories
. The token can be created here.
The token should be set as the PAT
environment variable.
export PAT=xxxxxxxxxxxxxxx
To install GitHub Action runner we use an Ansible playbook to provision the VM.
Test that Ansible can ping server with
ansible vagrants -m ping
Should output something like
vagrant | SUCCESS => {
"changed": false,
"ping": "pong"
}
(If ping fails please check the connection configuration in hosts
file matches output of vagrant ssh-config
)
The playbook uses roles from Ansible galaxy, they must be downloaded with
ansible-galaxy install -r requirements.yml
To provision VM use
ansible-playbook playbook.yml
The log of the runner can be viewed with
vagrant ssh -- journalctl -u actions.runner.*
First unregister runner with
ansible-playbook playbook.yml --tags uninstall
To get rid of VM use
vagrant destroy