From c8c61092624bfbc639947a32209ee98a2bf04df9 Mon Sep 17 00:00:00 2001 From: Mike Olund Date: Sun, 19 Mar 2017 21:33:30 -0700 Subject: [PATCH] Added Jenkins pipelines --- openshift/create-env.sh | 19 --- openshift/destroy-env.sh | 28 ----- .../jenkins/build-and-deploy-to-dev | 12 +- openshift/jenkins/deploy-to-prod | 8 ++ openshift/jenkins/deploy-to-test | 9 ++ openshift/jenkins/pipeline.yaml | 114 ++++++++++++++++++ .../nginx-proxy}/conf.d/server.conf | 0 openshift/project_label.sh | 14 --- openshift/scripts/run-in-container.sh | 41 ------- openshift/templates/nginx-build-template.yaml | 2 +- 10 files changed, 135 insertions(+), 112 deletions(-) delete mode 100755 openshift/create-env.sh delete mode 100755 openshift/destroy-env.sh rename jenkins-pipeline/jenkinsfile => openshift/jenkins/build-and-deploy-to-dev (57%) create mode 100644 openshift/jenkins/deploy-to-prod create mode 100644 openshift/jenkins/deploy-to-test create mode 100644 openshift/jenkins/pipeline.yaml rename {nginx-proxy => openshift/nginx-proxy}/conf.d/server.conf (100%) delete mode 100755 openshift/project_label.sh delete mode 100755 openshift/scripts/run-in-container.sh diff --git a/openshift/create-env.sh b/openshift/create-env.sh deleted file mode 100755 index 7216b820..00000000 --- a/openshift/create-env.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -echo -n "Enter the name of the environment (default=dev): " -read ENVIRONMENT -ENVIRONMENT=${ENVIRONMENT:-dev} - -OS_PROJECT_NAME=jag-csb-edivorce-$ENVIRONMENT - -echo "Changing project to $OS_PROJECT_NAME..." - -oc project $OS_PROJECT_NAME - -echo -n "Enter the path to the environment creation template (default=templates/edivorce-environment-template.yaml): " -read CREATE_SCRIPT -CREATE_SCRIPT=${CREATE_SCRIPT:-templates/edivorce-environment-template.yaml} - -oc create -f $CREATE_SCRIPT - -/bin/bash project_label.sh $OS_PROJECT_NAME team=jag product=edivorce environment=$ENVIRONMENT diff --git a/openshift/destroy-env.sh b/openshift/destroy-env.sh deleted file mode 100755 index fd0a39ef..00000000 --- a/openshift/destroy-env.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -# this is hard-coded to only destroy the dev environment -# you can chage it to 'test' or 'prod' if you are sure you want to destroy EVERYTHING, include the database -oc project jag-csb-edivorce-dev - -# delete all imagestreams -oc delete is --all - -# delete services by name (we don't want to accidentally delete the gluster service!) -oc delete svc weasyprint -oc delete svc postgresql -oc delete svc edivorce-django - -# delete routes -oc delete route --all - -# delete persistent volume claims -oc delete pvc --all - -# delete replication controllers -oc delete rc --all - -# delete deployment configurations -oc delete dc --all - -# delete pods -oc delete po --all \ No newline at end of file diff --git a/jenkins-pipeline/jenkinsfile b/openshift/jenkins/build-and-deploy-to-dev similarity index 57% rename from jenkins-pipeline/jenkinsfile rename to openshift/jenkins/build-and-deploy-to-dev index 4ffbeae0..934882fb 100644 --- a/jenkins-pipeline/jenkinsfile +++ b/openshift/jenkins/build-and-deploy-to-dev @@ -1,18 +1,12 @@ node('master') { -stage 'buildInDevelopment' +stage 'buildInTools' openshiftBuild(namespace: 'jag-csb-edivorce-tools', buildConfig: 'edivorce-django', showBuildLogs: 'true') -stage 'deployInDevelopment' +stage 'deployInDev' +openshiftTag(namespace: 'jag-csb-edivorce-tools', sourceStream: 'edivorce-django', sourceTag: 'latest', destinationNamespace: 'jag-csb-edivorce-tools', destinationStream: 'edivorce-django', destinationTag: 'deploy-to-dev') openshiftDeploy(namespace: 'jag-csb-edivorce-dev', deploymentConfig: 'edivorce-django') openshiftScale(namespace: 'jag-csb-edivorce-dev', deploymentConfig: 'edivorce-django',replicaCount: '1') -stage 'test' -sh 'curl -s https://justice.gov.bc.ca/divorce-dev' - -stage 'deployInTesting' -openshiftTag(namespace: 'jag-csb-edivorce-tools', sourceStream: 'edivorce-django', sourceTag: 'latest', destinationNamespace: 'jag-csb-edivorce-tools', destinationStream: 'edivorce-django', destinationTag: 'deploy-to-test') -openshiftDeploy(namespace: 'jag-csb-edivorce-test', deploymentConfig: 'edivorce-django') -openshiftScale(namespace: 'jag-csb-edivorce-test', deploymentConfig: 'edivorce-django',replicaCount: '1') } diff --git a/openshift/jenkins/deploy-to-prod b/openshift/jenkins/deploy-to-prod new file mode 100644 index 00000000..ff541276 --- /dev/null +++ b/openshift/jenkins/deploy-to-prod @@ -0,0 +1,8 @@ +node('master') { + +stage 'deployInProd' +openshiftTag(namespace: 'jag-csb-edivorce-tools', sourceStream: 'edivorce-django', sourceTag: 'deploy-to-test', destinationNamespace: 'jag-csb-edivorce-tools', destinationStream: 'edivorce-django', destinationTag: 'deploy-to-prod') +openshiftDeploy(namespace: 'jag-csb-edivorce-prod', deploymentConfig: 'edivorce-django') +openshiftScale(namespace: 'jag-csb-edivorce-prod', deploymentConfig: 'edivorce-django',replicaCount: '1') +} + diff --git a/openshift/jenkins/deploy-to-test b/openshift/jenkins/deploy-to-test new file mode 100644 index 00000000..9680473e --- /dev/null +++ b/openshift/jenkins/deploy-to-test @@ -0,0 +1,9 @@ +node('master') { + +stage 'deployInTest' +openshiftTag(namespace: 'jag-csb-edivorce-tools', sourceStream: 'edivorce-django', sourceTag: 'deploy-to-dev', destinationNamespace: 'jag-csb-edivorce-tools', destinationStream: 'edivorce-django', destinationTag: 'deploy-to-test') +openshiftDeploy(namespace: 'jag-csb-edivorce-test', deploymentConfig: 'edivorce-django') +openshiftScale(namespace: 'jag-csb-edivorce-test', deploymentConfig: 'edivorce-django',replicaCount: '1') + +} + diff --git a/openshift/jenkins/pipeline.yaml b/openshift/jenkins/pipeline.yaml new file mode 100644 index 00000000..f4122417 --- /dev/null +++ b/openshift/jenkins/pipeline.yaml @@ -0,0 +1,114 @@ +--- +kind: Template +apiVersion: v1 +metadata: + name: edivorce-build-pipeline +labels: + template: edivorce-build-pipeline +objects: +- kind: BuildConfig + apiVersion: v1 + metadata: + name: build-and-deploy-to-dev + namespace: + labels: + name: build-and-deploy-to-dev + annotations: + pipeline.alpha.openshift.io/uses: '[{"name": "", "namespace": "", "kind": "DeploymentConfig"}]' + spec: + triggers: + - + type: GitHub + github: + secret: ${GITHUB_WEBHOOK_SECRET} + - + type: Generic + generic: + secret: ${GITHUB_WEBHOOK_SECRET} + runPolicy: Serial + source: + type: Git + git: + uri: 'https://github.com/bcgov/eDivorce' + ref: master + contextDir: openshift/jenkins + strategy: + type: JenkinsPipeline + jenkinsPipelineStrategy: + jenkinsfilePath: build-and-deploy-to-dev + output: + resources: + postCommit: +- kind: BuildConfig + apiVersion: v1 + metadata: + name: deploy-to-prod + namespace: + labels: + name: deploy-to-prod + annotations: + pipeline.alpha.openshift.io/uses: '[{"name": "", "namespace": "", "kind": "DeploymentConfig"}]' + spec: + triggers: + - + type: GitHub + github: + secret: ${GITHUB_WEBHOOK_SECRET} + - + type: Generic + generic: + secret: ${GITHUB_WEBHOOK_SECRET} + runPolicy: Serial + source: + type: Git + git: + uri: 'https://github.com/bcgov/eDivorce' + ref: master + contextDir: openshift/jenkins + strategy: + type: JenkinsPipeline + jenkinsPipelineStrategy: + jenkinsfilePath: deploy-to-prod + output: + resources: + postCommit: +- kind: BuildConfig + apiVersion: v1 + metadata: + name: deploy-to-test + namespace: + labels: + name: deploy-to-test + annotations: + pipeline.alpha.openshift.io/uses: '[{"name": "", "namespace": "", "kind": "DeploymentConfig"}]' + spec: + triggers: + - + type: GitHub + github: + secret: ${GITHUB_WEBHOOK_SECRET} + - + type: Generic + generic: + secret: ${GITHUB_WEBHOOK_SECRET} + runPolicy: Serial + source: + type: Git + git: + uri: 'https://github.com/bcgov/eDivorce' + ref: master + contextDir: openshift/jenkins + strategy: + type: JenkinsPipeline + jenkinsPipelineStrategy: + jenkinsfilePath: deploy-to-test + output: + resources: + postCommit: +parameters: +- name: GITHUB_WEBHOOK_SECRET + displayName: GitHub Webhook Secret + description: A secret string used to configure the GitHub webhook. + generate: expression + from: "[a-zA-Z0-9]{40}" + diff --git a/nginx-proxy/conf.d/server.conf b/openshift/nginx-proxy/conf.d/server.conf similarity index 100% rename from nginx-proxy/conf.d/server.conf rename to openshift/nginx-proxy/conf.d/server.conf diff --git a/openshift/project_label.sh b/openshift/project_label.sh deleted file mode 100755 index 1c0c314b..00000000 --- a/openshift/project_label.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -# todo: this is an example from https://github.com/bcgov/esm-server/tree/develop/openshift -# todo: it needs to be completely reconfigured for eDivorce!!!! - -#project_label.sh $OS_PROJECT_NAME category=$CATEGORY team=$TEAM product=$PRODUCT environment=$ENVIRONMENT - -PROJECT_NAME=$1 - -echo "Project name is $1" - -for i in "${@:2}"; do - oc label --overwrite namespace/$PROJECT_NAME $i -done diff --git a/openshift/scripts/run-in-container.sh b/openshift/scripts/run-in-container.sh deleted file mode 100755 index 7219bfed..00000000 --- a/openshift/scripts/run-in-container.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -# Use this script to run one-off commands inside a container of a pod where your -# Python application code lives in. - -# You can accomplish the same results by using regular commands from OpenShift. -# This script is just wrapping calls to `oc` to make it a little more -# convenient to use. In the future, the `oc` cli tool might incorporate changes -# that make this script obsolete. - -# Related GitHub issues: -# - https://github.com/GoogleCloudPlatform/kubernetes/issues/8876 -# - https://github.com/openshift/origin/issues/2001 - - -# Usage examples: -# -# ./run-in-container.sh ./manage.py migrate -# ./run-in-container.sh ./manage.py createsuperuser -# ./run-in-container.sh ./manage.py shell -# -# If your Python pods are labeled with a name other than "django", you can use: -# -# POD_NAME=name ./run-in-container.sh ./manage.py check -# -# If there is more than one replica, you can also specify a POD by index: -# -# POD_INDEX=1 ./run-in-container.sh ./manage.py shell -# -# Or both together: -# -# POD_NAME=frontend POD_INDEX=2 ./run-in-container.sh ./manage.py shell - - -# Get name of a currently deployed pod by label and index -POD_INSTANCE_NAME=`oc get pods \ - -l "name=${POD_NAME:-django-frontend}" \ - -t "{{ with index .items ${POD_INDEX:-0} }}{{ .metadata.name }}{{ end }}"` - -# Run command in a container of the specified pod: -oc exec -p "$POD_INSTANCE_NAME" -it -- bash -c "${@:-echo}" diff --git a/openshift/templates/nginx-build-template.yaml b/openshift/templates/nginx-build-template.yaml index ed43dc98..3166c837 100644 --- a/openshift/templates/nginx-build-template.yaml +++ b/openshift/templates/nginx-build-template.yaml @@ -69,7 +69,7 @@ parameters: - name: SOURCE_REPOSITORY_CONTEXT_DIR displayName: Git sub-directory description: The folder in the Git repo that contains the config.d directory. - value: /nginx-proxy + value: /openshift/nginx-proxy - name: SOURCE_REPOSITORY_REF displayName: Git Reference description: Set this to a branch name, tag or other ref of your repository if you are not using the default branch.