3 changed files with 227 additions and 132 deletions
@ -0,0 +1,75 @@ |
|||||
|
# Configure Jenkins |
||||
|
|
||||
|
## Create a Credentials named `npm-secret` |
||||
|
|
||||
|
Login to Jenkins with your OpenShift credentials and create a Jenkins Credentials with the following parameters : |
||||
|
- Scope: global |
||||
|
- Kind: Username with password |
||||
|
- Username: \<your NPM username\> |
||||
|
- Password: \<your NPM password\> |
||||
|
- ID: npm-secret |
||||
|
|
||||
|
To create a Jenkins Credentials : |
||||
|
1. Login to the Jenkins admin interface |
||||
|
2. In the left side menu, click `Credentials`, then `System` |
||||
|
3. Click `Global credentials` |
||||
|
4. In the left side menu, click `Add Credentials` |
||||
|
5. Fill-in the form |
||||
|
6. Click `OK` |
||||
|
|
||||
|
## Install plugins |
||||
|
|
||||
|
Install the two following Jenkins plugins : |
||||
|
- [Pipeline Utility Steps](https://plugins.jenkins.io/pipeline-utility-steps) |
||||
|
- [Credentials Binding](https://plugins.jenkins.io/credentials-binding) |
||||
|
|
||||
|
Note: the `Pipeline Utility Steps` plugin might already be installed. In such case, make sure the latest version is installed. |
||||
|
|
||||
|
Quick reminder to install a plugin : |
||||
|
1. Login to the Jenkins admin interface |
||||
|
2. In the left side menu, click `Manage Jenkins` |
||||
|
3. Click `Manage Plugins` |
||||
|
4. Select the `Available` tab |
||||
|
5. Search for the plugin to install |
||||
|
6. Check the box next to the plugin to install |
||||
|
7. Click `Download now and install after restart` |
||||
|
8. Do not forget to check the box `Restart Jenkins` |
||||
|
|
||||
|
Note: to update a plugin, select the `Updates` tab instead of the `Available` tab. |
||||
|
|
||||
|
## Create the Jenkins Pipeline |
||||
|
|
||||
|
Depending if you created a JenkinsPipeline BuildConfig, OpenShift may have created |
||||
|
a Jenkins pipeline for you. In such a case, the Jenkins Pipeline is named `\<namespace\>/\<buildconfig-name\>`. |
||||
|
|
||||
|
So, if you installed the demo : |
||||
|
- manually, you need to create the pipeline from scratch |
||||
|
- automatically, you need to update the pipeline to add the following parameters |
||||
|
|
||||
|
Note: As of today, OpenShift does not accept build environment variables with Jenkins pipelines. |
||||
|
So you have to update the Jenkins pipeline created by OpenShift to add those variable. |
||||
|
In the next version this may change as there is a pull request for this feature |
||||
|
(see [\#11293](https://github.com/openshift/origin/issues/11293) |
||||
|
and [\#12323](https://github.com/openshift/origin/pull/12323)). |
||||
|
|
||||
|
So, create or update a Jenkins Pipeline that accepts the following parameters : |
||||
|
|
||||
|
| Parameter Name | Parameter Type | Default Value | Description | |
||||
|
| --- | --- | --- | --- | |
||||
|
| NPM_CREDENTIALS_ID | String | npm-secret | The Jenkins Credentials ID that holds login and password to login on NPM Registry | |
||||
|
| NPM_EMAIL | String | \<your NPM email\> | The email address associated with the NPM Account pointed by NPM_CREDENTIALS_ID | |
||||
|
| NPM_REGISTRY | String | https://registry.npmjs.org | Private NPM registry to log in to (Default if not provided: https://registry.npmjs.org) | |
||||
|
| OPENSHIFT_IMAGE_STREAM | String | openshift-demo-nodejs | The ImageStream name to use to tag the built images | |
||||
|
| OPENSHIFT_BUILD_CONFIG | String | openshift-demo-nodejs | The BuildConfig name to use | |
||||
|
| OPENSHIFT_SERVICE | String | openshift-demo-nodejs | The Service object to update (either green or blue) | |
||||
|
| OPENSHIFT_DEPLOYMENT_CONFIG | String | openshift-demo-nodejs | The DeploymentConfig name to use | |
||||
|
| OPENSHIFT_BUILD_PROJECT | String | demo-build | The OpenShift project in which builds are run | |
||||
|
| OPENSHIFT_TEST_ENVIRONMENT | String | demo-test | The OpenShift project in which we will deploy the test version | |
||||
|
| OPENSHIFT_PROD_ENVIRONMENT | String | demo-prod | The OpenShift project in which we will deploy the prod version | |
||||
|
| OPENSHIFT_TEST_URL | String | http://demo.test.app.openshift.test | The App URL in the test environment (to run the integration tests) | |
||||
|
|
||||
|
Pick the pipeline from GIT using the option "Pipeline script from SCM" and the following parameters : |
||||
|
- SCM: GIT |
||||
|
- Script Path: Jenkinsfile |
||||
|
- Repository URL: https://github.com/nmasse-itix/OpenShift-Demo-NodeJS.git |
||||
|
- Branch Specifier: */master |
||||
@ -0,0 +1,146 @@ |
|||||
|
# Full CICD Setup |
||||
|
|
||||
|
## Automated setup through Templates |
||||
|
|
||||
|
Create the four environments : |
||||
|
``` |
||||
|
oc new-project demo-dev |
||||
|
oc new-project demo-build |
||||
|
oc new-project demo-test |
||||
|
oc new-project demo-prod |
||||
|
``` |
||||
|
|
||||
|
Deploy a Jenkins in the build project : |
||||
|
``` |
||||
|
oc new-app -n demo-build --template=jenkins-persistent --name=jenkins -p MEMORY_LIMIT=1Gi |
||||
|
``` |
||||
|
|
||||
|
Create all other objects using the template : |
||||
|
``` |
||||
|
oc process -f setup/all-in-one-template.yaml > objects.json |
||||
|
oc create -f objects.json |
||||
|
``` |
||||
|
|
||||
|
Then, configure Jenkins [as described here](doc/CONFIGURE_JENKINS.md). |
||||
|
|
||||
|
Where parameters are : |
||||
|
| Parameter Name | Required ? | Default Value | Description | |
||||
|
| --- | --- | --- | --- | |
||||
|
| DEV_PROJECT | No | demo-dev | TODO | |
||||
|
| BUILD_PROJECT | No | demo-build | TODO | |
||||
|
| TEST_PROJECT | No | demo-test | TODO | |
||||
|
| PROD_PROJECT | No | demo-prod | TODO | |
||||
|
|
||||
|
|
||||
|
## Manual Setup |
||||
|
|
||||
|
### Prepare OpenShift |
||||
|
|
||||
|
Create the four environments : |
||||
|
``` |
||||
|
oc new-project demo-dev |
||||
|
oc new-project demo-build |
||||
|
oc new-project demo-test |
||||
|
oc new-project demo-prod |
||||
|
``` |
||||
|
|
||||
|
Create the build config in the build environment : |
||||
|
``` |
||||
|
oc new-build -n demo-build nodejs~https://github.com/nmasse-itix/OpenShift-Demo-NodeJS.git --strategy=source --name=openshift-demo-nodejs |
||||
|
``` |
||||
|
|
||||
|
You can test the build config with : |
||||
|
``` |
||||
|
oc start-build -n demo-build openshift-demo-nodejs --env=NPM_PACKAGE_TO_INSTALL=openshift-demo-nodejs-nmasse@0.1.0 |
||||
|
``` |
||||
|
|
||||
|
Deploy a Jenkins in the build project : |
||||
|
``` |
||||
|
oc new-app -n demo-build --template=jenkins-persistent --name=jenkins -p MEMORY_LIMIT=1Gi |
||||
|
``` |
||||
|
|
||||
|
Give admin role to the jenkins service account on subsequent environments : |
||||
|
``` |
||||
|
oc adm policy add-role-to-user admin system:serviceaccount:demo-build:jenkins -n demo-test |
||||
|
oc adm policy add-role-to-user admin system:serviceaccount:demo-build:jenkins -n demo-prod |
||||
|
``` |
||||
|
|
||||
|
Give rights on other environments to pull images from build environment : |
||||
|
``` |
||||
|
oc adm policy add-role-to-group system:image-puller system:serviceaccounts:demo-test -n demo-build |
||||
|
oc adm policy add-role-to-group system:image-puller system:serviceaccounts:demo-prod -n demo-build |
||||
|
``` |
||||
|
|
||||
|
Tag the test image : |
||||
|
``` |
||||
|
oc tag demo-build/openshift-demo-nodejs:latest openshift-demo-nodejs:ready-for-testing -n demo-test |
||||
|
``` |
||||
|
|
||||
|
Create the test application : |
||||
|
``` |
||||
|
oc new-app demo-build/openshift-demo-nodejs:ready-for-testing --name openshift-demo-nodejs -n demo-test |
||||
|
oc expose service openshift-demo-nodejs --name=openshift-demo-nodejs --hostname=demo.test.app.openshift.test -n demo-test |
||||
|
``` |
||||
|
|
||||
|
Tag the prod image : |
||||
|
``` |
||||
|
oc tag demo-test/openshift-demo-nodejs:ready-for-testing openshift-demo-nodejs:ready-for-prod -n demo-prod |
||||
|
``` |
||||
|
|
||||
|
Create the prod application (blue) : |
||||
|
``` |
||||
|
oc new-app demo-build/openshift-demo-nodejs:ready-for-prod --name openshift-demo-nodejs-blue -n demo-prod -l color=blue |
||||
|
``` |
||||
|
|
||||
|
Create the prod application (green) : |
||||
|
``` |
||||
|
oc new-app demo-build/openshift-demo-nodejs:ready-for-prod --name openshift-demo-nodejs-green -n demo-prod -l color=green |
||||
|
``` |
||||
|
|
||||
|
Create a service on selector "color" : |
||||
|
``` |
||||
|
oc create -n demo-prod -f - <<EOF |
||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: openshift-demo-nodejs |
||||
|
name: openshift-demo-nodejs |
||||
|
spec: |
||||
|
ports: |
||||
|
- name: 8080-tcp |
||||
|
port: 8080 |
||||
|
protocol: TCP |
||||
|
targetPort: 8080 |
||||
|
selector: |
||||
|
color: blue |
||||
|
sessionAffinity: None |
||||
|
type: ClusterIP |
||||
|
EOF |
||||
|
``` |
||||
|
|
||||
|
And expose this service as a route : |
||||
|
``` |
||||
|
oc expose service openshift-demo-nodejs --name=openshift-demo-nodejs --hostname=demo.prod.app.openshift.test -n demo-prod |
||||
|
``` |
||||
|
|
||||
|
You can verify the target of the route with : |
||||
|
``` |
||||
|
oc get service openshift-demo-nodejs -n demo-prod -o template --template='{{ .spec.selector.color }}' |
||||
|
``` |
||||
|
|
||||
|
You can change the target of the route with : |
||||
|
``` |
||||
|
oc patch -n demo-prod service/openshift-demo-nodejs --patch '{"spec":{"selector":{"color":"green"}}}' |
||||
|
``` |
||||
|
|
||||
|
Disable the triggers : |
||||
|
``` |
||||
|
oc set triggers dc/openshift-demo-nodejs --from-image=demo-build/openshift-demo-nodejs:ready-for-testing --manual=true -c openshift-demo-nodejs -n demo-test |
||||
|
oc set triggers dc/openshift-demo-nodejs-blue --from-image=demo-build/openshift-demo-nodejs:ready-for-prod --manual=true -c openshift-demo-nodejs-blue -n demo-prod |
||||
|
oc set triggers dc/openshift-demo-nodejs-green --from-image=demo-build/openshift-demo-nodejs:ready-for-prod --manual=true -c openshift-demo-nodejs-green -n demo-prod |
||||
|
``` |
||||
|
|
||||
|
### Create the Jenkins Pipeline |
||||
|
|
||||
|
Configure Jenkins [as described here](doc/CONFIGURE_JENKINS.md). |
||||
Loading…
Reference in new issue