How can I use DevZero as a Github action runner?

‍Using self-hosted Github action runners allows more control over the execution environment than Github-hosted runners provide. They also are free to use with Github actions and do not incur per-minute Github charges. This tutorial walks through how to use a DevZero development environment as a self-hosted Github action runner.

Set up a self-hosted actions runner DevZero Environment #

First, you will need to create a DevZero Environment that can run as a self-hosted Github Actions runner. Follow the instructions on Github to set up the environment, found here: https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners The installation will differ depending on environment. Below is an example setup for a Linux self-hosted runner environment for a go service.

Note that go is installed as it is required for building this project. Accordingly, any dependencies required for executing the Github Actions will need to be installed.

softwarepolicy:
- packagename: jq
scriptpolicy:
- script: | 
    # install go
    sudo snap install go --classic
  runas: devzero
- script: |
    # Create a folder
    mkdir /home/devzero/actions-runner
    # Download the latest runner package
    cd /home/devzero/actions-runner && \
    curl -o actions-runner-linux-x64-2.297.0.tar.gz -L \
    https://github.com/actions/runner/releases/download/v2.297.0/actions-runner-linux-x64-2.297.0.tar.gz
    echo "eb4e2fa6567d2222686be95ee23210e83fb6356dd0195149f96fd91398323d7f \
    actions-runner-linux-x64-2.297.0.tar.gz" | \
    shasum -a 256 -c # Extract the installer
    cd /home/devzero/actions-runner && tar xzf ./actions-runner-linux-x64-2.297.0.tar.gz
  runas: devzero

Add a Github personal access token to the DevZero Environment variables #

In order to acquire a token to register the self-hosted runner, a github personal access token needs to be created and added to the template environment. This is used to query the self-hosted runners API for a registration token.

Create a github personal access token with repo scope and add it to the DevZero Environment as an environment variable. Create the token at tokens. Add it as an environment variable with name GH_PAT.

Register the Self-hosted Runner #

Once the Github personal access token is added to the environment, add the script below to the DevZero Environment scriptpolicy to configure and register the runner, modifying the url for the specific repository, replacing OWNER and REPO accordingly in the below snippet. See the Github Runner API docs for more information.

- script: |
    # Create the runner and start the configuration experience
    cd /home/devzero/actions-runner && ./config.sh --url https://github.com/OWNER/REPO --token $(curl \
    -X POST \
    -H "Accept: application/vnd.github+json" \
    -H "Authorization: Bearer "${{ GH_PAT }}"" \
    https://api.github.com/repos/OWNER/REPO/actions/runners/registration-token | jq -r '.token')
  runas: devzero

Configure the runner as a systemd service #

In order to maintain a long-running self-hosted Github actions runner, it must be configured to run as a systemd service. Add the following to your DevZero Environment configuration scriptpolicy:

- script: | 
    # set up runner as systemd service
    cd /home/devzero/actions-runner && sudo ./svc.sh install
    cd /home/devzero/actions-runner && sudo ./svc.sh start
runas: devzero

This will install and start the runner service in the background. You can verify the service is running by running the following command in your environment terminal:

cd /home/devzero/actions-runner && sudo ./svc.sh status

See the documentation for details on configuring a self-hosted runner as a service.

Once the environment is built and running, you should see the github self-hosted runner registered in github. See this documentation for details on how to view runner status.

Configure Github Actions to use Self-Hosted Runners #

Finally, to use your DevZero-based self-hosted Github Action Runners, new and existing workflows must be configured to run on self-hosted runners. Add the following line to the workflow configuration to begin using your DevZero-based runners.

runs-on: self-hosted

For more information on using self-hosted runners for Github Actions see https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow.

PreviousHow can I connect to S3?
NextVisual Studio Code Remote Extensions