Skip to content

Commit

Permalink
feat!: add OIDC authentication, include gke-gcloud-auth-plugin supp…
Browse files Browse the repository at this point in the history
…ort and update the gcloud CLI (#64)
  • Loading branch information
EricRibeiro authored Dec 15, 2022
1 parent bebdc35 commit 9c08051
Show file tree
Hide file tree
Showing 27 changed files with 1,008 additions and 630 deletions.
247 changes: 24 additions & 223 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,233 +1,34 @@
version: 2.1

orb_promotion_filters: &orb_promotion_filters
branches:
ignore: /.*/
tags:
only: /^(major|minor|patch)-release-v\d+\.\d+\.\d+$/

setup: true
orbs:
orb-tools: circleci/[email protected]
gcp-gke: circleci/gcp-gke@<<pipeline.parameters.dev-orb-version>>
gcp-gcr: circleci/[email protected]
kubernetes: circleci/[email protected]

parameters:
run-integration-tests:
type: boolean
default: false
dev-orb-version:
type: string
default: "dev:alpha"
orb-tools: circleci/[email protected]
shellcheck: circleci/[email protected]

jobs:
create-deployment-linux:
parameters:
cluster-name:
type: string
docker-image-name:
type: string
full-image-name:
type: string
version-info:
type: string
executor: gcp-gke/default
steps:
- setup_remote_docker
- checkout
- gcp-gke/update-kubeconfig-with-credentials:
cluster: <<parameters.cluster-name>>
perform-login: true
install-kubectl: true
- run:
name: Create deployment manifest
command: |
# Replace the placeholders in the manifest with the intended values.
BUILD_DATE=$(date '+%Y%m%d%H%M%S')
cat tests/demoapp/deployment.yaml.template |\
sed "s|DOCKER_IMAGE_NAME|<< parameters.full-image-name >>:$CIRCLE_SHA1|\
g;s|BUILD_DATE_VALUE|$BUILD_DATE|g;s|VERSION_INFO_VALUE|\
<< parameters.version-info >>|g" > tests/demoapp/deployment.yaml
- gcp-gcr/gcr-auth
- gcp-gcr/build-image:
image: << parameters.docker-image-name >>
tag: $CIRCLE_SHA1
dockerfile: Dockerfile
path: /home/circleci/project/tests/demoapp
docker-context: /home/circleci/project/tests/demoapp
- gcp-gcr/push-image:
image: << parameters.docker-image-name >>
tag: $CIRCLE_SHA1
- kubernetes/create-or-update-resource:
resource-file-path: "tests/demoapp/deployment.yaml"
get-rollout-status: true
resource-name: deployment/demoapp

create-deployment-windows:
parameters:
cluster-name:
type: string
executor: gcp-gke/default
steps:
- setup_remote_docker
- checkout
- gcp-gke/update-kubeconfig-with-credentials:
cluster: <<parameters.cluster-name>>
perform-login: true
install-kubectl: true
- run:
name: Check cluster initialization
command: |
kubectl get mutatingwebhookconfigurations
- kubernetes/create-or-update-resource:
resource-file-path: "tests/windows-iis/deployment.yaml"
resource-name: "deployment/iis"
get-rollout-status: true
- run:
name: Expose deployment via a service
command: |
kubectl expose deployment iis --type=LoadBalancer --name=iis
- run:
name: Validate service
command: |
kubectl get services
sleep 30
for attempt in {1..20}; do
EXTERNAL_IP=$(kubectl get service iis | awk '{print $4}' | tail -n1)
echo "Checking external IP: ${EXTERNAL_IP}"
if [ -n "${EXTERNAL_IP}" ] && [ -z $(echo "${EXTERNAL_IP}" | grep "pending") ]; then
break
fi
echo "Waiting for external IP to be ready: ${EXTERNAL_IP}"
sleep 10
done
sleep 180
curl -s --retry 10 "http://$EXTERNAL_IP" | grep "IIS Windows Server"
- kubernetes/delete-resource:
resource-types: "deployment,service"
resource-names: "iis"
now: true
wait: true
filters: &filters
tags:
only: /.*/

workflows:
lint_pack-validate_publish-dev:
unless: << pipeline.parameters.run-integration-tests >>
lint-pack:
jobs:
- orb-tools/lint

- orb-tools/lint:
filters: *filters
- orb-tools/pack:
requires:
- orb-tools/lint

- orb-tools/publish-dev:
filters: *filters
- orb-tools/review:
max_command_length: 200
filters: *filters
- shellcheck/check:
filters: *filters
- orb-tools/publish:
orb-name: circleci/gcp-gke
context: orb-publisher
requires:
- orb-tools/pack

- orb-tools/trigger-integration-tests-workflow:
name: trigger-integration-dev
context: orb-publishing
requires:
- orb-tools/publish-dev

integration-tests_prod-release:
when: << pipeline.parameters.run-integration-tests >>
jobs:
- gcp-gke/create-cluster:
name: create-cluster-linux
cluster: my-cluster
- gcp-gke/create-cluster:
name: create-autopilot-cluster-linux
cluster: my-autopilot-cluster
- gcp-gke/create-cluster:
name: create-cluster-windows
cluster: my-cluster-windows
additional-args: "--cluster-version=1.20 --enable-ip-alias --num-nodes=1"
- gcp-gke/create-node-pool:
name: create-node-pool-windows
node-pool: my-pool-windows
cluster: my-cluster-windows
additional-args: "--image-type=WINDOWS_SAC --no-enable-autoupgrade --machine-type=n1-standard-2 --num-nodes=1"
vcs-type: << pipeline.project.type >>
requires:
- create-cluster-windows
- create-deployment-linux:
requires:
- create-cluster-linux
cluster-name: my-cluster
full-image-name: gcr.io/$GOOGLE_PROJECT_ID/my-image
docker-image-name: my-image
version-info: $CIRCLE_SHA1
- create-deployment-windows:
requires:
- create-node-pool-windows
cluster-name: my-cluster-windows
- gcp-gke/publish-and-rollout-image:
post-steps:
- kubernetes/get-rollout-status:
resource-name: deployment/demoapp
watch-rollout-status: true
watch-timeout: 3m
namespace: default
requires:
- create-deployment-linux
cluster: my-cluster
deployment: demoapp
container: app
image: my-image
tag: $CIRCLE_SHA1
namespace: default
dockerfile-name: Dockerfile
dockerfile-dir: /home/circleci/project/tests/demoapp
docker-context: /home/circleci/project/tests/demoapp
- gcp-gke/delete-node-pool:
name: delete-node-pool-windows
node-pool: my-pool-windows
cluster: my-cluster-windows
requires:
- create-deployment-windows
- gcp-gke/delete-cluster:
name: delete-cluster-linux
cluster: my-cluster
requires:
- gcp-gke/publish-and-rollout-image
- gcp-gke/delete-cluster:
name: delete-autopilot-cluster-linux
cluster: my-autopilot-cluster
requires:
- create-autopilot-cluster-linux
- gcp-gke/delete-cluster:
name: delete-cluster-windows
cluster: my-cluster-windows
requires:
- delete-node-pool-windows
- orb-tools/dev-promote-prod-from-commit-subject:
orb-name: circleci/gcp-gke
[orb-tools/lint, orb-tools/review, orb-tools/pack, shellcheck/check]
context: orb-publisher
add-pr-comment: true
bot-user: orb-publisher
bot-token-variable: GHI_TOKEN
publish-version-tag: false
fail-if-semver-not-indicated: false
requires:
- delete-cluster-linux
- delete-cluster-windows
filters:
branches:
only: master

tag-triggered-orb-publishing:
unless: << pipeline.parameters.run-integration-tests >>
jobs:
- hold-for-approval:
type: approval
filters: *orb_promotion_filters
- orb-tools/dev-promote-prod-from-git-tag:
context: orb-publisher
orb-name: circleci/gcp-gke
add-pr-comment: true
bot-user: orb-publisher
bot-token-variable: GHI_TOKEN
requires:
- hold-for-approval
filters: *orb_promotion_filters
filters: *filters
- orb-tools/continue:
pipeline-number: << pipeline.number >>
vcs-type: << pipeline.project.type >>
requires: [orb-tools/publish]
filters: *filters
Loading

0 comments on commit 9c08051

Please sign in to comment.