Skip to main content
Airship authenticates to Google Cloud with a service account key file, and launches one Compute Engine instance per job.

Check your organization policies first

Three constraints commonly block this setup. Finding out now is cheaper than finding out at the first launch.
compute.requireOsLogin is harmless — Airship never logs in, installs no SSH key, and opens no inbound access at all.

Create the service account

Compute Engine is the only API Airship calls.

Grant roles

roles/compute.admin covers everything Airship does, routers included. In a dedicated CI project this is a reasonable end state.

Create the key

This file is the credential. Airship checks it is a service_account key, verifies it against Compute Engine, seals it and opens it only for the length of a single call. Delete your local copy once it is connected.

Quotas to check

Connect it

Open Cloud → Google Cloud, paste the contents of airship-sa.json, and choose the default location — a region (us-central1) or a zone (us-central1-b). Airship reads the project through Compute Engine to prove the key works and that the API is enabled, then echoes back the project ID and the service account’s email. Or from the developer API, with the key file’s fields as the credentials object:

Google Cloud settings

machine_image takes an image or family name (ubuntu-2204-lts, looked up in your project and then in Google’s public project), project:image, a full resource path, or a machine image. region takes a zone or a region — a region lets Airship try zones in order and move on when one is short.
airship.yaml
Pin a zone when a resource is zonal: GPUs, or an existingDisk. A zonal disk pins the launch to its zone, so a region: that disagrees is a config error rather than a failed insert.

Verify and audit

After a job, the instance is deleted, not TERMINATED — disks and all. A machine left TERMINATED is removed by the next inventory pass, because it runs no job and still bills for its disk. Airship adds no firewall rules. Instances carry the network tag airship-runner, so a rule you write against that tag applies to every future runner automatically.
Give runners no service account unless a job needs one. The default is none, which means nothing in a job can mint a Google credential from the metadata server.

Turning it off

Deactivate a repository to stop it; uninstall the GitHub App to stop everything. Disconnecting the credential is refused while runners launched with it are alive. Left behind by design:
Launch failures and their Google messages are in Troubleshooting.