CTO.ai is a widely used Continuous Integration and Continuous Deployment (CI/CD) platform. Google Cloud Platform (GCP), on the other hand, is a suite of cloud services that include hosting, computing, data storage, and machine learning capabilities. Integrating CTO.ai with GCP can help developers to streamline their build and deployment pipelines. In this article, we will explore how to use CTO.ai jobs for simplified builds on GCP.
Prerequisites
- An active CTO.ai account.
- A GCP project with admin permissions.
- The CTO.ai GCP workflow installed in your application
Step-by-step Guide:
Setting up CTO.ai
Before you get started, install and set up the CTO.ai GCP workflow from the GitHub repository if you don’t have access to it, reach out to our support team ([email protected]) to onboard you. When you are in, deploy the complete infrastructure using the ops run -b .
command.
Authenticating with GCP
Create a service account in GCP, and download the JSON key from your service account. When you are done, back in your application, create a file named ops.yml
. The ops.yml
file is where you configure and write your jobs and builds for your workloads. When your jobs are built, you can now deploy your ops.yml
file, which will trigger your builds from GCP.
Configuring CTO.ai Jobs for GCP Builds
CTO.ai jobs allow you to define build steps as containers. Below is an example configuration of using CTO.ai and GCP.
In CTO.ai, you can combine multiple jobs using workflows. For instance, you can set up a workflow that triggers your GCP build when an event trigger action is performed.
version: "1"
pipelines:
- name: sample-expressjs-pipeline-gcp-gke-pulumi-pyf:0.1.1
description: Build and Publish an image in a GCPContainer Registry
env:
static:
- DEBIAN_FRONTEND=noninteractive
- STACK_TYPE=gcp-gke-pulumi-py
- ORG=cto-ai
- GH_ORG=workflows-sh
- REPO=sample-expressjs-gcp-gke-pulumi-py
- BIN_LOCATION=/tmp/tools
secrets:
- GITHUB_TOKEN
- PULUMI_TOKEN
events:
- "github:workflows-sh/sample-gcp-gke-pulumi-py:pull_request.opened"
- "github:workflows-sh/sample-gcp-gke-pulumi-py:pull_request.synchronize"
- "github:workflows-sh/sample-gcp-gke-pulumi-py:pull_request.merged"
jobs:
- name: sample-expressjs-build-gcp-gke-pulumi-py
description: Build step for sample-expressjs-gcp-gke-pulumi-py
packages:
- git
- unzip
- wget
- tar
steps:
- mkdir -p $BIN_LOCATION
- export PATH=$PATH:$BIN_LOCATION
- ls -asl $BIN_LOCATION
- name: sample-expressjs-lint
description: Linting step for code quality
packages:
- npm
steps:
- npm install
- npm run lint
- name: sample-expressjs-security-scan
description: Security scanning step for vulnerabilities
steps:
- echo "Run your security tools here"
- name: sample-expressjs-test
description: Test step for sample-expressjs-gcp-gke-pulumi-py
packages:
- npm
steps:
- npm install
- npm test
- name: sample-expressjs-dockerize
description: Dockerize the application
packages:
- docker
steps:
- docker build -t $GH_ORG/$REPO:latest .
- name: sample-expressjs-push-image
description: Push Docker image to GCP's Container Registry
packages:
- docker
- gcloud
steps:
- echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=-
- docker push gcr.io/$GH_ORG/$REPO:latest
- name: sample-expressjs-deploy
description: Deploy step for sample-expressjs-gcp-gke-pulumi-py
packages:
- gcloud
- kubectl
steps:
- gcloud auth activate-service-account --key-file=$GCLOUD_SERVICE_KEY
- gcloud container clusters get-credentials YOUR_CLUSTER_NAME --zone YOUR_ZONE --project YOUR_PROJECT
- kubectl apply -f deployment.yaml
Structure
- Version:
1
: Specifies the version of the CTO CI integration. - Pipelines: The entire YAML file is structured in the pipeline
ops.yml
file. - Each pipeline has several attributes: name: The unique name of the pipeline.
- description: A brief description of what the pipeline does.
- env: Specifies environment variables. These can be static (pre-defined) or secrets (sensitive data).
- events: Specifies the events that should trigger the pipeline. In this case, it's set to trigger for GitHub events related to pull requests.
- jobs: A list of tasks or stages the pipeline should execute in order.
Environment variables
These are pre-defined variables that can be used throughout the jobs in the pipeline:
static:
Variables that are hard-coded and available for any job.secrets:
Sensitive data that you don't want to expose. They are fetched securely from CTO storage or other secret management tools.
Jobs:
Jobs are the individual tasks or stages of the pipeline.
Each job has:
name:
A unique name for the job.description:
A brief explanation of the job's purpose.packages:
Software or tools needed for the job.steps:
Sequential tasks or commands that should be executed in the job.
Job Breakdown:
sample-expressjs-build-gcp-gke-pulumi-py
: This job seems to set up some directories and tools. It uses packages like git, unzip, wget, and tar.sample-expressjs-lint
: A linting job to check the code quality. Assumes there's a linting script in the project's package.json.sample-expressjs-security-scan
: A placeholder job for security scanning. Actual tools or scripts for security scanning should replace the placeholder.sample-expressjs-test
: Tests the application. It assumes there are tests set up in the application that can be run via npm test.sample-expressjs-dockerize
: This job creates a Docker image from the application. Assumes there's a Dockerfile at the root of your project. sample-expressjs-push-image: Pushes the created Docker image to GCP's Container Registry.sample-expressjs-deploy
: Deploys the application to a Google Kubernetes Engine (GKE) cluster in Google Cloud Platform (GCP).
When you are done configuring your jobs in the ops.yml
file, push the changes to your GitHub repo, open or merge a pull request, and your pipelines will be triggered.
Conclusion
CTO.ai provides a robust platform for implementing CI/CD pipelines. By integrating CTO.ai with GCP, developers can automate and simplify their build and deployment processes, ensuring that software is reliably and efficiently delivered to users. With the steps provided in this article, one can set up a seamless integration between CTO.ai and GCP.
Comments