Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spinnaker account #101

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ jobs:
floodgate_extra_params:
type: string
default: ""
pipelines_to_trigger:
type: string
default: ""
machine:
image: ubuntu-1604:202004-01
steps:
Expand Down Expand Up @@ -252,6 +255,50 @@ jobs:
/floodgate/bin/floodgate << parameters.floodgate_extra_params >> --config ~/floodgate.yaml sync
echo "Compare changes - synced resources"
/floodgate/bin/floodgate << parameters.floodgate_extra_params >> --config ~/floodgate.yaml compare
- run:
name: Trigger pipelines
command: |
for PIPELINE in << parameters.pipelines_to_trigger >> ; do
echo "Triggering pipeline with source $PIPELINE"
EVENT_ID=`curl -s -X POST -H "content-type: application/json" -d "{ }" http://spinnaker/api/v1/webhooks/webhook/$PIPELINE | jq -r .eventId`
echo "eventId: $EVENT_ID"
sleep 5 # Let pipeline start
PASS=`cat ~/.hal/default/profiles/gate-local.yml | grep password`
PASS=${PASS#*:\ }
USER=`cat ~/.hal/default/profiles/gate-local.yml | grep name`
USER=${USER#*:\ }
ALL_APPS=`curl -s -X GET --user "$USER:$PASS" "http://spinnaker/api/v1/applications" | jq -r .[].name`
MAX_ATTEMPTS=20
for APP in $ALL_APPS ; do
PIPELINE_NAME=`curl -s -X GET --user "$USER:$PASS" "http://spinnaker/api/v1/applications/$APP/executions/search?triggerTypes=webhook&eventId=$EVENT_ID" | jq -r .[].name`
ATTEMPTS=0
while [[ $PIPELINE_NAME != "" ]] && [ $ATTEMPTS -lt $MAX_ATTEMPTS ] ; do
echo "Checking pipeline $PIPELINE_NAME status"
STATUS=`curl -s -X GET --user "$USER:$PASS" "http://spinnaker/api/v1/applications/$APP/executions/search?triggerTypes=webhook&eventId=$EVENT_ID" | jq -r .[].status`
if [ -n $STATUS ] && [[ $STATUS == "NOT_STARTED" ]] ; then
echo "Waiting for pipeline $PIPELINE_NAME to start"
sleep 3
elif [ -n $STATUS ] && [[ $STATUS == "RUNNING" ]] ; then
echo "Waiting for pipeline $PIPELINE_NAME to finish"
sleep 3
elif [ -n $STATUS ] && [[ $STATUS != "SUCCEEDED" ]] ; then
echo "Pipeline $PIPELINE_NAME exited with status $STATUS"
exit 1
elif [ -n $STATUS ] && [[ $STATUS == "SUCCEEDED" ]] ; then
echo "$Pipeline PIPELINE_NAME succeded"
break
else
echo "Status of pipeline is: $STATUS"
exit 1
fi
((++ATTEMPTS))
done
if [ $ATTEMPTS -ge $MAX_ATTEMPTS ] ; then
echo "Check timed out"
exit 1
fi
done
done
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you move this to a script? You can store it in .circleci directory.

Copy link
Author

@rparadowski rparadowski Jun 6, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did.
But I have no idea, why there is such behaviour:
When executed by cirleci, it's not entering the while loop (not printing Checking pipeline $PIPELINE_NAME status; PIPELINE_NAME probably equals ""), but when I rerun job with ssh, and execute script from terminal on machine, it iterates. Do you have any suggestions?


workflows:
periodic:
Expand Down Expand Up @@ -337,5 +384,6 @@ workflows:
- start_spinnaker:
name: test floodgate with working spinnaker
floodgate_extra_params: "-q"
pipelines_to_trigger: "deploy_nginx"
requires:
- build
8 changes: 8 additions & 0 deletions .circleci/libs/install-and-run-spinnaker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
EXEC_DIR=$(dirname "$0")
HAL_VERSION=${HAL_VERSION:-1.35.0}

# Install packages
sudo apt update
sudo apt install -y jq

# Install Halyard
curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
USERNAME=`whoami`
Expand All @@ -22,6 +26,10 @@ GATE_PASS=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo '')
hal -q config provider kubernetes enable
CONTEXT=$(kubectl config current-context)
hal -q config provider kubernetes account add my-k8s-v2-account --provider-version v2 --context $CONTEXT
## Configure account for inner kind communication
cp ~/.kube/config ~/.kube/kind
sed -i "s/server:\ .*/server:\ https:\/\/10.96.0.1:443/g" ~/.kube/kind
hal -q config provider kubernetes account add inner-kind --provider-version v2 --context $CONTEXT --kubeconfig-file ~/.kube/kind
hal -q config deploy edit --type distributed --account-name my-k8s-v2-account

## Install minio
Expand Down
36 changes: 36 additions & 0 deletions examples/resources/pipelines/deployNginx.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "nginx-deployment"
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "nginx"
}
},
"template": {
"metadata": {
"labels": {
"app": "nginx",
"lb": "nginx"
}
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:latest",
"ports": [
{
"containerPort": 80
}
]
}
]
}
}
}
}
27 changes: 27 additions & 0 deletions examples/resources/pipelines/deployNginx.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
local pipelines = import 'pipeline.libsonnet';

local deployment = import 'deployNginx.json';

local app = "jsonnetapp";
local webhookTrigger(name, source) = pipelines.triggers
.webhook(name)
.withSource(source);

local moniker = pipelines.moniker(app);

local deployManifest (env, manifest = deployment) = pipelines.stages
.deployManifest('Deploy nginx to ' + env)
.withAccount('inner-kind')
.withManifests(manifest)
.withNamespaceOverride(env)
.withMoniker(moniker);

local deployNginx = deployManifest('spinnaker');
local triggerPipeline = webhookTrigger("deploy_nginx", "deploy_nginx");

pipelines.pipeline()
.withName('Test Deployment')
.withId('test_deployment')
.withApplication(app)
.withStages(deployNginx)
.withTriggers(triggerPipeline)