Created
November 17, 2016 16:44
-
-
Save csrwng/618150d24a813d4515fe5d76e3e6f384 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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