A super simple CLI and API for using Google Cloud Build.
npm install gcbuildgcb is a convenient way to submit jobs to Google Cloud Build. To use as a command line application:
npm install --save-dev gcbuildThen from your package.json, it's super easy to add a deploy script:
"scripts": {
"deploy": "gcb"
}Location of the sources to be deployed. If not specified, assumes the current working directory.
The YAML or JSON file to use as the build configuration file. Defaults to 'cloudbuild.yaml' if not specified.
The tag to use with a "docker build" image creation.
Substitution variables to pass to the build. Can be specified multiple times. These are available in the build config as ${_VARIABLE_NAME}.
Amount of time to wait for the build to complete. Examples: 20m, 1200s, 1h
Compute Engine machine type on which to run the build. Examples: E2_HIGHCPU_8, N1_HIGHCPU_32
# Create an image for the current working directory.
$ gcb
# If there's a Dockerfile in the CWD, I can also specify a tag
$ gcb --tag my-image-name
# Use a build file not named `cloudbuild.yaml`
$ gcb --config suchbuild.json
# Perform a build from another location on disk
$ gcb ~/Code/verydocker
# Use substitutions for template variables
$ gcb --substitutions=_ENV=prod --substitutions=_VERSION=1.2.3
# Set a custom timeout and machine type
$ gcb --timeout=20m --machine-type=E2_HIGHCPU_8You can also use this as a regular old API.
import {build} from 'gcbuild';
const result = await build({
sourcePath: '/path/to/source',
tag: 'my-image',
substitutions: {
_ENV: 'production',
_VERSION: '1.2.3'
},
timeout: '20m',
machineType: 'E2_HIGHCPU_8'
});
console.log('Build completed:', result.metadata.build.id);You can also list, retrieve, and cancel builds:
import {listBuilds, getBuild, cancelBuild} from 'gcbuild';
// List recent builds
const builds = await listBuilds({
limit: 10,
filter: 'status=WORKING'
});
console.log('Recent builds:', builds);
// Get a specific build
const build = await getBuild('build-id-123');
console.log('Build status:', build.status);
// Cancel a running build
const cancelled = await cancelBuild('build-id-123');
console.log('Cancelled:', cancelled.id);All methods accept the following authentication options:
projectId: GCP project IDkeyFilename: Path to service account key file- Additional GoogleAuthOptions
Build-specific options for build():
sourcePath: Path to the source code directory (default: CWD)configPath: Path to cloudbuild.yaml/json filetag: Docker image tagsubstitutions: Object with substitution variables for the buildtimeout: Build timeout (e.g., '20m', '1200s', '1h')machineType: Compute Engine machine type (e.g., 'E2_HIGHCPU_8')
The library throws BuildError exceptions with detailed information:
import {build, BuildError} from 'gcbuild';
try {
await build({ sourcePath: './app' });
} catch (error) {
if (error instanceof BuildError) {
console.error('Build ID:', error.buildId);
console.error('Status:', error.status);
console.error('Failed step:', error.failedStep);
console.error('Suggestion:', error.suggestion);
console.error('Logs:', error.log);
}
}This library uses google-auth-library under the hood to provide authentication. That means you can authenticate a few ways.
One of the reasons this library exists is to provide a nodejs native deployment in environments where you don't want to have the Cloud SDK installed.
For this method, you'll need to create a service account, and download a key.
- In the GCP Console, go to the Create service account key page.
- From the Service account drop-down list, select New service account.
- In the Service account name field, enter a name.
- From the Role drop-down list, select Project > Owner.
- Click Create. A JSON file that contains your key downloads to your computer.
export GOOGLE_APPLICATION_CREDENTIALS="./keys.json"
gcb .If you plan on only using this from your machine, and you have the Google Cloud SDK installed, you can just use application default credentials like this:
gcloud auth login
gcloud auth application-default login
gcloud config set project 'YOUR-AWESOME-PROJECT'
gcb .