Skip to content

Instantly share code, notes, and snippets.

@csrwng
Created November 17, 2016 16:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save csrwng/618150d24a813d4515fe5d76e3e6f384 to your computer and use it in GitHub Desktop.
Save csrwng/618150d24a813d4515fe5d76e3e6f384 to your computer and use it in GitHub Desktop.
apiVersion: v1
kind: Template
labels:
template: application-template-sample-pipeline
message: A Jenkins server will be automatically instantiated in this project to manage
the Pipeline BuildConfig created by this template. You will be able to log in to
it using your OpenShift user credentials.
metadata:
annotations:
description: This example showcases the new Jenkins Pipeline integration in OpenShift,
which performs continuous integration and deployment right on the platform.
The template contains a Jenkinsfile - a definition of a multi-stage CI/CD process
- that leverages the underlying OpenShift platform for dynamic and scalable
builds. OpenShift integrates the status of your pipeline builds into the web
console allowing you to see your entire application lifecycle in a single view.
iconClass: icon-jenkins
tags: instant-app,jenkins
name: jenkins-pipeline-example
objects:
- apiVersion: v1
kind: BuildConfig
metadata:
annotations:
pipeline.alpha.openshift.io/uses: '[{"name": "${NAME}", "namespace": "", "kind":
"DeploymentConfig"}]'
creationTimestamp: null
labels:
name: sample-pipeline
name: sample-pipeline
spec:
strategy:
jenkinsPipelineStrategy:
jenkinsfile: |-
node {
stage 'Initialize'
sh 'oc get route nodejs-mongodb-example -n $PROJECT_NAME -o jsonpath="{ .spec.to.weight }" > blueweight'
blueWeight = readFile('blueweight').trim()
tag = "blue"
if (blueWeight == "100") {
tag = "green"
}
sh "oc get route ${tag}-nodejs-mongodb-example -n $PROJECT_NAME -o jsonpath='{ .spec.host }' > routehost"
routeHost = readFile('routehost').trim()
echo "building tag ${tag}"
stage 'Build'
openshiftBuild(buildConfig: 'nodejs-mongodb-example', showBuildLogs: 'true')
stage 'Deploy Test'
openshiftTag(srcStream: 'nodejs-mongodb-example', srcTag: 'latest', destinationStream: 'nodejs-mongodb-example', destinationTag: tag)
openshiftVerifyDeployment(deploymentConfig: 'nodejs-mongodb-example-'+tag)
stage 'Test'
input "Test deployment available. Do you approve?"
stage 'Go Live'
if (tag == "blue") {
sh 'oc set -n $PROJECT_NAME route-backends nodejs-mongodb-example nodejs-mongodb-example-blue=100 nodejs-mongodb-example-green=0'
} else {
sh 'oc set -n $PROJECT_NAME route-backends nodejs-mongodb-example nodejs-mongodb-example-blue=0 nodejs-mongodb-example-green=100'
}
}
type: JenkinsPipeline
triggers:
- github:
secret: secret101
type: GitHub
- generic:
secret: secret101
type: Generic
- apiVersion: v1
kind: Route
metadata:
name: blue-${NAME}
spec:
to:
kind: Service
name: ${NAME}-blue
- apiVersion: v1
kind: Route
metadata:
name: green-${NAME}
spec:
to:
kind: Service
name: ${NAME}-green
- apiVersion: v1
kind: Route
metadata:
name: ${NAME}
spec:
alternateBackends:
- name: ${NAME}-green
weight: "0"
to:
kind: Service
name: ${NAME}-blue
weight: "100"
- apiVersion: v1
kind: ImageStream
metadata:
annotations:
description: Keeps track of changes in the application image
name: ${NAME}
- apiVersion: v1
kind: BuildConfig
metadata:
annotations:
description: Defines how to build the application
name: ${NAME}
spec:
output:
to:
kind: ImageStreamTag
name: ${NAME}:latest
postCommit:
script: npm test
source:
contextDir: ${CONTEXT_DIR}
git:
ref: ${SOURCE_REPOSITORY_REF}
uri: ${SOURCE_REPOSITORY_URL}
type: Git
strategy:
sourceStrategy:
env:
- name: NPM_MIRROR
value: ${NPM_MIRROR}
from:
kind: ImageStreamTag
name: nodejs:4
namespace: ${NAMESPACE}
type: Source
triggers:
- github:
secret: ${GITHUB_WEBHOOK_SECRET}
type: GitHub
- generic:
secret: ${GENERIC_WEBHOOK_SECRET}
type: Generic
- apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.openshift.io/dependencies: '[{"name": "${DATABASE_SERVICE_NAME}",
"namespace": "", "kind": "Service"}]'
name: ${NAME}-blue
spec:
ports:
- name: web
port: 8080
targetPort: 8080
selector:
name: ${NAME}-blue
- apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
description: Defines how to deploy the application server
name: ${NAME}-blue
spec:
replicas: 1
selector:
name: ${NAME}-blue
strategy:
type: Rolling
template:
metadata:
labels:
name: ${NAME}-blue
name: ${NAME}-blue
spec:
containers:
- env:
- name: DATABASE_SERVICE_NAME
value: ${DATABASE_SERVICE_NAME}
- name: MONGODB_USER
value: ${DATABASE_USER}
- name: MONGODB_PASSWORD
value: ${DATABASE_PASSWORD}
- name: MONGODB_DATABASE
value: ${DATABASE_NAME}
- name: MONGODB_ADMIN_PASSWORD
value: ${DATABASE_ADMIN_PASSWORD}
image: ' '
livenessProbe:
httpGet:
path: /pagecount
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 3
name: nodejs-mongodb-example
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /pagecount
port: 8080
initialDelaySeconds: 3
timeoutSeconds: 3
resources:
limits:
memory: ${MEMORY_LIMIT}
triggers:
- imageChangeParams:
automatic: true
containerNames:
- nodejs-mongodb-example
from:
kind: ImageStreamTag
name: ${NAME}:blue
type: ImageChange
- type: ConfigChange
- apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.openshift.io/dependencies: '[{"name": "${DATABASE_SERVICE_NAME}",
"namespace": "", "kind": "Service"}]'
name: ${NAME}-green
spec:
ports:
- name: web
port: 8080
targetPort: 8080
selector:
name: ${NAME}-green
- apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
description: Defines how to deploy the application server
name: ${NAME}-green
spec:
replicas: 1
selector:
name: ${NAME}-green
strategy:
type: Rolling
template:
metadata:
labels:
name: ${NAME}-green
name: ${NAME}-green
spec:
containers:
- env:
- name: DATABASE_SERVICE_NAME
value: ${DATABASE_SERVICE_NAME}
- name: MONGODB_USER
value: ${DATABASE_USER}
- name: MONGODB_PASSWORD
value: ${DATABASE_PASSWORD}
- name: MONGODB_DATABASE
value: ${DATABASE_NAME}
- name: MONGODB_ADMIN_PASSWORD
value: ${DATABASE_ADMIN_PASSWORD}
image: ' '
livenessProbe:
httpGet:
path: /pagecount
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 3
name: nodejs-mongodb-example
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /pagecount
port: 8080
initialDelaySeconds: 3
timeoutSeconds: 3
resources:
limits:
memory: ${MEMORY_LIMIT}
triggers:
- imageChangeParams:
automatic: true
containerNames:
- nodejs-mongodb-example
from:
kind: ImageStreamTag
name: ${NAME}:green
type: ImageChange
- type: ConfigChange
- apiVersion: v1
kind: Service
metadata:
annotations:
description: Exposes the database server
name: ${DATABASE_SERVICE_NAME}
spec:
ports:
- name: mongodb
port: 27017
targetPort: 27017
selector:
name: ${DATABASE_SERVICE_NAME}
- apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
description: Defines how to deploy the database
name: ${DATABASE_SERVICE_NAME}
spec:
replicas: 1
selector:
name: ${DATABASE_SERVICE_NAME}
strategy:
type: Recreate
template:
metadata:
labels:
name: ${DATABASE_SERVICE_NAME}
name: ${DATABASE_SERVICE_NAME}
spec:
containers:
- env:
- name: MONGODB_USER
value: ${DATABASE_USER}
- name: MONGODB_PASSWORD
value: ${DATABASE_PASSWORD}
- name: MONGODB_DATABASE
value: ${DATABASE_NAME}
- name: MONGODB_ADMIN_PASSWORD
value: ${DATABASE_ADMIN_PASSWORD}
image: ' '
livenessProbe:
initialDelaySeconds: 30
tcpSocket:
port: 27017
timeoutSeconds: 1
name: mongodb
ports:
- containerPort: 27017
readinessProbe:
exec:
command:
- /bin/sh
- -i
- -c
- mongo 127.0.0.1:27017/$MONGODB_DATABASE -u $MONGODB_USER -p $MONGODB_PASSWORD
--eval="quit()"
initialDelaySeconds: 3
timeoutSeconds: 1
resources:
limits:
memory: ${MEMORY_MONGODB_LIMIT}
volumeMounts:
- mountPath: /var/lib/mongodb/data
name: ${DATABASE_SERVICE_NAME}-data
volumes:
- emptyDir:
medium: ""
name: ${DATABASE_SERVICE_NAME}-data
triggers:
- imageChangeParams:
automatic: true
containerNames:
- mongodb
from:
kind: ImageStreamTag
name: mongodb:3.2
namespace: ${NAMESPACE}
type: ImageChange
- type: ConfigChange
parameters:
- description: The name assigned to all of the frontend objects defined in this template.
displayName: Name
name: NAME
required: true
value: nodejs-mongodb-example
- description: The exposed hostname that will route to the Node.js service, if left
blank a value will be defaulted.
displayName: Application Hostname
name: APPLICATION_DOMAIN
- description: The URL of the repository with your application source code.
displayName: Git Repository URL
name: SOURCE_REPOSITORY_URL
required: true
value: https://github.com/openshift/nodejs-ex.git
- description: The reference of the repository with your application source code.
displayName: Git Repository Ref
name: SOURCE_REPOSITORY_REF
required: true
value: master
- displayName: Database Name
name: DATABASE_NAME
required: true
value: sampledb
- description: Username for MongoDB user that will be used for accessing the database.
displayName: MongoDB Username
from: user[A-Z0-9]{3}
generate: expression
name: DATABASE_USER
- description: Password for the MongoDB user.
displayName: MongoDB Password
from: '[a-zA-Z0-9]{16}'
generate: expression
name: DATABASE_PASSWORD
- description: Maximum amount of memory the Node.js container can use.
displayName: Memory Limit
name: MEMORY_LIMIT
required: true
value: 512Mi
- description: Maximum amount of memory the MongoDB container can use.
displayName: Memory Limit (MongoDB)
name: MEMORY_MONGODB_LIMIT
required: true
value: 512Mi
- displayName: Database Service Name
name: DATABASE_SERVICE_NAME
required: true
value: mongodb
- description: Password for the database admin user.
displayName: Database Administrator Password
from: '[a-zA-Z0-9]{16}'
generate: expression
name: DATABASE_ADMIN_PASSWORD
- description: Set this to the relative path to your project if it is not in the root
of your repository.
displayName: Context Directory
name: CONTEXT_DIR
- description: A secret string used to configure the GitHub webhook.
displayName: GitHub Webhook Secret
from: '[a-zA-Z0-9]{40}'
generate: expression
name: GITHUB_WEBHOOK_SECRET
- description: A secret string used to configure the Generic webhook.
displayName: Generic Webhook Secret
from: '[a-zA-Z0-9]{40}'
generate: expression
name: GENERIC_WEBHOOK_SECRET
- description: The custom NPM mirror URL
displayName: Custom NPM Mirror URL
name: NPM_MIRROR
- description: The OpenShift Namespace where the NodeJS and MongoDB ImageStreams reside.
displayName: Namespace
name: NAMESPACE
required: true
value: openshift
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment