You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
511 lines
13 KiB
511 lines
13 KiB
apiVersion: v1
|
|
kind: Template
|
|
labels:
|
|
template: openshift-demo-nodejs
|
|
message: TODO
|
|
metadata:
|
|
annotations:
|
|
description: |-
|
|
TODO
|
|
NOTE: You must have persistent volumes available in your cluster to use this template.
|
|
openshift.io/display-name: OpenShift Demo NodeJS
|
|
tags: instant-app,nodejs,jenkins
|
|
template.openshift.io/documentation-url: https://github.com/nmasse-itix/OpenShift-Demo-NodeJS
|
|
template.openshift.io/long-description: A demo using NodeJS and Jenkins, running on OpenShift
|
|
template.openshift.io/provider-display-name: Nicolas Massé
|
|
template.openshift.io/support-url: https://github.com/nmasse-itix/OpenShift-Demo-NodeJS/issues
|
|
name: openshift-demo-nodejs-build
|
|
objects:
|
|
##
|
|
## The ImageStreams for all environments
|
|
##
|
|
|
|
# BUILD Environment
|
|
- apiVersion: v1
|
|
kind: ImageStream
|
|
metadata:
|
|
labels:
|
|
build: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${BUILD_PROJECT}
|
|
|
|
# TEST Environment
|
|
- apiVersion: v1
|
|
kind: ImageStream
|
|
metadata:
|
|
labels:
|
|
build: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${TEST_PROJECT}
|
|
|
|
# PROD Environment
|
|
- apiVersion: v1
|
|
kind: ImageStream
|
|
metadata:
|
|
labels:
|
|
build: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${PROD_PROJECT}
|
|
|
|
##
|
|
## Build Objects
|
|
##
|
|
|
|
# The BuildConfig that generates the target image
|
|
- apiVersion: v1
|
|
kind: BuildConfig
|
|
metadata:
|
|
name: openshift-demo-nodejs
|
|
labels:
|
|
build: openshift-demo-nodejs
|
|
namespace: ${BUILD_PROJECT}
|
|
spec:
|
|
successfulBuildsHistoryLimit: 1
|
|
failedBuildsHistoryLimit: 1
|
|
nodeSelector: null
|
|
output:
|
|
to:
|
|
kind: ImageStreamTag
|
|
name: openshift-demo-nodejs:latest
|
|
postCommit: {}
|
|
resources: {}
|
|
runPolicy: Serial
|
|
source:
|
|
git:
|
|
uri: ${GIT_REPO}
|
|
type: Git
|
|
strategy:
|
|
sourceStrategy:
|
|
from:
|
|
kind: ImageStreamTag
|
|
name: ${NODEJS_IMAGE_STREAM_TAG}
|
|
namespace: ${NODEJS_IMAGE_STREAM_NAMESPACE}
|
|
type: Source
|
|
triggers:
|
|
- type: ConfigChange
|
|
- type: ImageChange
|
|
|
|
# The Jenkins Pipeline
|
|
- kind: "BuildConfig"
|
|
apiVersion: "v1"
|
|
metadata:
|
|
name: "openshift-demo-nodejs-pipeline"
|
|
namespace: ${BUILD_PROJECT}
|
|
spec:
|
|
source:
|
|
git:
|
|
uri: ${GIT_REPO}
|
|
strategy:
|
|
type: "JenkinsPipeline"
|
|
jenkinsPipelineStrategy:
|
|
jenkinsfilePath: Jenkinsfile
|
|
env:
|
|
- name: NPM_CREDENTIALS_ID
|
|
value: ${NPM_CREDENTIALS_ID}
|
|
- name: NPM_EMAIL
|
|
value: ${NPM_EMAIL}
|
|
- name: NPM_REGISTRY
|
|
value: ${NPM_REGISTRY}
|
|
- name: OPENSHIFT_IMAGE_STREAM
|
|
value: openshift-demo-nodejs
|
|
- name: OPENSHIFT_BUILD_CONFIG
|
|
value: openshift-demo-nodejs
|
|
- name: OPENSHIFT_SERVICE
|
|
value: openshift-demo-nodejs
|
|
- name: OPENSHIFT_DEPLOYMENT_CONFIG
|
|
value: openshift-demo-nodejs
|
|
- name: OPENSHIFT_BUILD_PROJECT
|
|
value: ${BUILD_PROJECT}
|
|
- name: OPENSHIFT_TEST_ENVIRONMENT
|
|
value: ${TEST_PROJECT}
|
|
- name: OPENSHIFT_PROD_ENVIRONMENT
|
|
value: ${PROD_PROJECT}
|
|
- name: OPENSHIFT_TEST_URL
|
|
value: http://${TEST_ROUTE_HOSTNAME}
|
|
|
|
##
|
|
## Deploy to the TEST environment
|
|
##
|
|
|
|
# DeploymentConfig/TEST
|
|
- apiVersion: v1
|
|
kind: DeploymentConfig
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${TEST_PROJECT}
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
app: openshift-demo-nodejs
|
|
deploymentconfig: openshift-demo-nodejs
|
|
strategy:
|
|
activeDeadlineSeconds: 21600
|
|
resources: {}
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
creationTimestamp: null
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
deploymentconfig: openshift-demo-nodejs
|
|
spec:
|
|
containers:
|
|
- image: openshift-demo-nodejs:ready-for-testing
|
|
imagePullPolicy: IfNotPresent
|
|
name: openshift-demo-nodejs
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
resources: {}
|
|
terminationMessagePath: /dev/termination-log
|
|
dnsPolicy: ClusterFirst
|
|
restartPolicy: Always
|
|
securityContext: {}
|
|
terminationGracePeriodSeconds: 30
|
|
test: false
|
|
triggers:
|
|
- type: ConfigChange
|
|
- type: ImageChange
|
|
imageChangeParams:
|
|
containerNames:
|
|
- openshift-demo-nodejs
|
|
from:
|
|
kind: ImageStreamTag
|
|
name: openshift-demo-nodejs:ready-for-testing
|
|
namespace: ${TEST_PROJECT}
|
|
|
|
# Service/TEST
|
|
- apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${TEST_PROJECT}
|
|
spec:
|
|
ports:
|
|
- name: 8080-tcp
|
|
port: 8080
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
app: openshift-demo-nodejs
|
|
deploymentconfig: openshift-demo-nodejs
|
|
sessionAffinity: None
|
|
type: ClusterIP
|
|
|
|
# Route/TEST
|
|
- apiVersion: v1
|
|
kind: Route
|
|
metadata:
|
|
annotations:
|
|
haproxy.router.openshift.io/balance: "roundrobin"
|
|
haproxy.router.openshift.io/disable_cookies: "true"
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${TEST_PROJECT}
|
|
spec:
|
|
host: ${TEST_ROUTE_HOSTNAME}
|
|
port:
|
|
targetPort: 8080-tcp
|
|
to:
|
|
kind: Service
|
|
name: openshift-demo-nodejs
|
|
weight: 100
|
|
wildcardPolicy: None
|
|
|
|
##
|
|
## RoleBinding
|
|
##
|
|
|
|
# Set RoleBinding for the test environment
|
|
- apiVersion: v1
|
|
groupNames: null
|
|
kind: RoleBinding
|
|
metadata:
|
|
name: jenkins-is-admin
|
|
namespace: ${TEST_PROJECT}
|
|
roleRef:
|
|
name: admin
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: jenkins
|
|
namespace: ${BUILD_PROJECT}
|
|
userNames:
|
|
- system:serviceaccount:${BUILD_PROJECT}:jenkins
|
|
|
|
# Set RoleBinding for the prod environment
|
|
- apiVersion: v1
|
|
groupNames: null
|
|
kind: RoleBinding
|
|
metadata:
|
|
name: jenkins-is-admin
|
|
namespace: ${PROD_PROJECT}
|
|
roleRef:
|
|
name: admin
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: jenkins
|
|
namespace: ${BUILD_PROJECT}
|
|
userNames:
|
|
- system:serviceaccount:${BUILD_PROJECT}:jenkins
|
|
|
|
##
|
|
## Deploy to the PROD environment
|
|
##
|
|
|
|
# Blue Service
|
|
- apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs-blue
|
|
color: blue
|
|
name: openshift-demo-nodejs-blue
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
ports:
|
|
- name: 8080-tcp
|
|
port: 8080
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
app: openshift-demo-nodejs-blue
|
|
color: blue
|
|
deploymentconfig: openshift-demo-nodejs-blue
|
|
sessionAffinity: None
|
|
type: ClusterIP
|
|
|
|
# Green Service
|
|
- apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs-green
|
|
color: green
|
|
name: openshift-demo-nodejs-green
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
ports:
|
|
- name: 8080-tcp
|
|
port: 8080
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
app: openshift-demo-nodejs-green
|
|
color: green
|
|
deploymentconfig: openshift-demo-nodejs-green
|
|
sessionAffinity: None
|
|
type: ClusterIP
|
|
|
|
# Either blue or green Service
|
|
- apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
ports:
|
|
- name: 8080-tcp
|
|
port: 8080
|
|
protocol: TCP
|
|
targetPort: 8080
|
|
selector:
|
|
color: green
|
|
sessionAffinity: None
|
|
type: ClusterIP
|
|
|
|
# The route for the "either blue or green" service
|
|
- apiVersion: v1
|
|
kind: Route
|
|
metadata:
|
|
annotations:
|
|
haproxy.router.openshift.io/balance: "roundrobin"
|
|
haproxy.router.openshift.io/disable_cookies: "true"
|
|
labels:
|
|
app: openshift-demo-nodejs
|
|
name: openshift-demo-nodejs
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
host: ${PROD_ROUTE_HOSTNAME}
|
|
port:
|
|
targetPort: 8080-tcp
|
|
to:
|
|
kind: Service
|
|
name: openshift-demo-nodejs
|
|
weight: 100
|
|
wildcardPolicy: None
|
|
|
|
# The "blue" DeploymentConfig
|
|
- apiVersion: v1
|
|
kind: DeploymentConfig
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs-blue
|
|
color: blue
|
|
name: openshift-demo-nodejs-blue
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
app: openshift-demo-nodejs-blue
|
|
color: blue
|
|
deploymentconfig: openshift-demo-nodejs-blue
|
|
strategy:
|
|
activeDeadlineSeconds: 21600
|
|
resources: {}
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
creationTimestamp: null
|
|
labels:
|
|
app: openshift-demo-nodejs-blue
|
|
color: blue
|
|
deploymentconfig: openshift-demo-nodejs-blue
|
|
spec:
|
|
containers:
|
|
- image: openshift-demo-nodejs:ready-for-prod
|
|
imagePullPolicy: IfNotPresent
|
|
name: openshift-demo-nodejs-blue
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
resources: {}
|
|
terminationMessagePath: /dev/termination-log
|
|
dnsPolicy: ClusterFirst
|
|
restartPolicy: Always
|
|
securityContext: {}
|
|
terminationGracePeriodSeconds: 30
|
|
test: false
|
|
triggers:
|
|
- type: ConfigChange
|
|
- type: ImageChange
|
|
imageChangeParams:
|
|
containerNames:
|
|
- openshift-demo-nodejs-blue
|
|
from:
|
|
kind: ImageStreamTag
|
|
name: openshift-demo-nodejs:ready-for-prod
|
|
namespace: ${PROD_PROJECT}
|
|
|
|
# The "green" DeploymentConfig
|
|
- apiVersion: v1
|
|
kind: DeploymentConfig
|
|
metadata:
|
|
labels:
|
|
app: openshift-demo-nodejs-green
|
|
color: green
|
|
name: openshift-demo-nodejs-green
|
|
namespace: ${PROD_PROJECT}
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
app: openshift-demo-nodejs-green
|
|
color: green
|
|
deploymentconfig: openshift-demo-nodejs-green
|
|
strategy:
|
|
activeDeadlineSeconds: 21600
|
|
resources: {}
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
creationTimestamp: null
|
|
labels:
|
|
app: openshift-demo-nodejs-green
|
|
color: green
|
|
deploymentconfig: openshift-demo-nodejs-green
|
|
spec:
|
|
containers:
|
|
- image: openshift-demo-nodejs:ready-for-prod
|
|
imagePullPolicy: IfNotPresent
|
|
name: openshift-demo-nodejs-green
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
resources: {}
|
|
terminationMessagePath: /dev/termination-log
|
|
dnsPolicy: ClusterFirst
|
|
restartPolicy: Always
|
|
securityContext: {}
|
|
terminationGracePeriodSeconds: 30
|
|
test: false
|
|
triggers:
|
|
- type: ConfigChange
|
|
- type: ImageChange
|
|
imageChangeParams:
|
|
containerNames:
|
|
- openshift-demo-nodejs-green
|
|
from:
|
|
kind: ImageStreamTag
|
|
name: openshift-demo-nodejs:ready-for-prod
|
|
namespace: ${PROD_PROJECT}
|
|
|
|
|
|
##
|
|
## Template Parameters
|
|
##
|
|
parameters:
|
|
- description: The name of the OpenShift Project to that holds the dev environment.
|
|
displayName: Development Environment
|
|
name: DEV_PROJECT
|
|
value: xyz-dev
|
|
|
|
- description: The name of the OpenShift Project to that holds the build environment.
|
|
displayName: Build Environment
|
|
name: BUILD_PROJECT
|
|
value: xyz-build
|
|
|
|
- description: The name of the OpenShift Project to that holds the test environment.
|
|
displayName: Test Environment
|
|
name: TEST_PROJECT
|
|
value: xyz-test
|
|
|
|
- description: The name of the OpenShift Project to that holds the prod environment.
|
|
displayName: Production Environment
|
|
name: PROD_PROJECT
|
|
value: xyz-prod
|
|
|
|
- description: The GIT repository to use.
|
|
displayName: GIT Repo URL
|
|
name: GIT_REPO
|
|
value: https://github.com/nmasse-itix/OpenShift-Demo-NodeJS.git
|
|
|
|
- description: The OpenShift Namespace where the NodeJS ImageStream resides.
|
|
displayName: NodeJS ImageStream Namespace
|
|
name: NODEJS_IMAGE_STREAM_NAMESPACE
|
|
value: openshift
|
|
|
|
- description: Name of the ImageStreamTag to be used for the NodeJS image.
|
|
displayName: NodeJS ImageStreamTag
|
|
name: NODEJS_IMAGE_STREAM_TAG
|
|
value: nodejs:latest
|
|
|
|
- description: The Jenkins Credentials ID that holds login and password to login on NPM Registry
|
|
displayName: Jenkins Credentials ID for NPM Registry
|
|
name: NPM_CREDENTIALS_ID
|
|
value: npm-secret
|
|
|
|
- description: The email address associated with the NPM Account pointed by NPM_CREDENTIALS_ID
|
|
displayName: Email address of your NPM Account
|
|
name: NPM_EMAIL
|
|
required: true
|
|
|
|
- description: Private NPM registry to log in to
|
|
displayName: NPM Registry URL
|
|
name: NPM_REGISTRY
|
|
value: https://registry.npmjs.org
|
|
|
|
- description: The route to create in the TEST environment and which we will use to run the integration tests
|
|
displayName: Application Hostname in the TEST environment
|
|
name: TEST_ROUTE_HOSTNAME
|
|
required: true
|
|
|
|
- description: The route to create in the PROD environment
|
|
displayName: Application Hostname in the PROD environment
|
|
name: PROD_ROUTE_HOSTNAME
|
|
required: true
|
|
|