catalog/gitops/hydration-trigger.yaml (81 lines of code) (raw):
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Trigger for when changes are pushed into any branch of the yakima source repo.
# This will run all your kpt functions and apply a blast radius analysis of
# changes.
# NOTE: Only changes to the "main" branch will result in actuation of resources.
apiVersion: cloudbuild.cnrm.cloud.google.com/v1beta1
kind: CloudBuildTrigger
metadata:
name: source-repo-cicd-trigger # kpt-set: ${source-repo}-cicd-trigger
namespace: config-control # kpt-set: ${namespace}
annotations:
cnrm.cloud.google.com/blueprint: cnrm/gitops/v0.6.1
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
build:
step:
- name: gcr.io/cloud-builders/gcloud:latest
volumes:
- name: deployment-workspace
path: /deployment-workspace
args:
- '-c'
- |
set -e
gcloud source repos clone $_DEPLOYMENT_REPO .
(git show-branch $BRANCH_NAME &>/dev/null) && (git checkout $BRANCH_NAME) || (git checkout -b $BRANCH_NAME)
git config user.email $(gcloud auth list --filter=status:ACTIVE --format='value(account)')
mkdir -p /deployment-workspace/config
dir: /deployment-workspace
entrypoint: /bin/sh
id: "Clone Deployment Repo"
timeout: 300s
- name: gcr.io/kpt-dev/kpt:v1.0.0-beta.9
volumes:
- name: hydrated-workspace
path: /hydrated-workspace
args:
- '-c'
- |
set -eo pipefail
SRC_DIR="."
DEST_DIR="/hydrated-workspace/config"
echo "Initializing kpt"
kpt pkg init "$${SRC_DIR}"
echo "Executing Kpt Functions..."
kpt fn render "$${SRC_DIR}" --output="$${DEST_DIR}" --truncate-output=false
echo "Removing local config"
kpt fn eval "$${DEST_DIR}" -i gcr.io/kpt-fn/remove-local-config-resources:v0.1
entrypoint: /bin/bash
id: "Apply Hydration and Validation"
- name: gcr.io/cloud-builders/gcloud:latest
volumes:
- name: hydrated-workspace
path: /hydrated-workspace
- name: deployment-workspace
path: /deployment-workspace
args:
- '-c'
- |
set -e
git pull origin $BRANCH_NAME || true # Ignore errors in case branch doesn't exist
git rm -rf /deployment-workspace/config/* --ignore-unmatch
cp -r /hydrated-workspace/config /deployment-workspace/
touch /deployment-workspace/config/.gitkeep
# Configure Git to create commits with Cloud Build's service account
git config user.email $(gcloud auth list --filter=status:ACTIVE --format='value(account)')
git add -A
git status
if git diff --cached --exit-code; then echo "No changes"; true;
else git commit -m "Resources from ${COMMIT_SHA}" && git push origin $BRANCH_NAME; fi
printf "\n\nLatest deployment repo commit SHA: $(git rev-parse HEAD)\n"
dir: /deployment-workspace
entrypoint: /bin/sh
id: "Push Changes To Deployment Repo"
waitFor:
- "Apply Hydration and Validation"
timeout: 600s
description: Cloud Build Trigger for rendering from the soure repo to the deployment repo.
disabled: false
substitutions:
"_ADMIN_CLUSTER_NAME": "cluster-name" # kpt-set: ${cluster-name}
"_DEPLOYMENT_REPO": "deployment-repo" # kpt-set: ${deployment-repo}
"_SOURCE_REPO": "source-repo" # kpt-set: ${source-repo}
triggerTemplate:
branchName: ".*"
repoRef:
name: source-repo # kpt-set: ${source-repo}