離線安裝完成後,通常狀況下只裝了個基礎環境,catalog鏡像沒有導入,本文主要側重在jenkins的一些環境設置和演示。html
首先follow下面連接下載鏡像node
https://docs.openshift.com/container-platform/3.11/install/disconnected_install.htmlgit
咱們這裏下載的主要是github
$ docker pull registry.redhat.io/openshift3/jenkins-2-rhel7:<tag>web
$ docker pull registry.redhat.io/openshift3/jenkins-slave-maven-rhel7:<tag>mongodb
$ docker pull registry.redhat.io/openshift3/jenkins-slave-nodejs-rhel7:<tag>docker
導入到本地鏡像倉庫數據庫
[root@node2 images]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.example.com/openshift3/jenkins-2-rhel7 latest 0f36706e2c53 10 months ago 1.13 GB registry.example.com/openshift3/jenkins-slave-maven-rhel7 latest 5ce887d9bf31 11 months ago 1.02 GB registry.example.com/openshift3/jenkins-slave-nodejs-rhel7 latest a32c719893f2 11 months ago 971 MB
但如今進入查看jenkins image stream, 發現仍然是不可用狀態。express
[root@master ~]# oc describe is jenkins -n openshift Name: jenkins Namespace: openshift Created: 5 months ago Labels: <none> Annotations: openshift.io/display-name=Jenkins openshift.io/image.dockerRepositoryCheck=2019-08-30T14:32:54Z Docker Pull Spec: docker-registry.default.svc:5000/openshift/jenkins Image Lookup: local=false Unique Images: 1 Tags: 3 1 tagged from registry.example.com/openshift3/jenkins-1-rhel7:latest prefer registry pullthrough when referencing this tag Provides a Jenkins 1.X server on RHEL 7. For more information about using this container image, including OpenShift considerations, see https://github.com/openshift/jenkins/blob/master/README.md. Tags: hidden, jenkins ! error: Import failed (InternalError): Internal error occurred: Get https://registry.example.com/v2/: dial tcp 192.168.56.105:443: connect: connection refused 5 months ago
執行導入api
oc import-image jenkins --from=registry.example.com/openshift3/jenkins-2-rhel7:latest --confirm --insecure=true
確認導入成功後,在項目中選擇Jenkins(Ephemeral),而後等待建立完成。
注意這只是生成一個jenkins master環境。
一樣導入用到的其餘鏡像
oc import-image mongodb:3.2 --from=registry.example.com/rhscl/mongodb-32-rhel7:latest --confirm --insecure=true oc import-image tomcat:8-slim --from=registry.example.com/tomcat:8-slim --confirm --insecure=true
建立一個samplepiple.yaml文件,文件裏面建立了一個pipeline,mongodb svc, mongodb 數據庫。
由於是拿別人的修改的,因此裏面的不少parameter沒有用到。
apiVersion: v1 kind: Template labels: template: application-template-sample-pipeline message: |- A Jenkins server must be 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: openshift.io/display-name: Pipeline Build Example 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 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 - 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 a branch name, tag or other ref of your repository if you are not using the default branch. displayName: Git Reference name: SOURCE_REPOSITORY_REF - 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: Github trigger secret. A difficult to guess string encoded as part of the webhook URL. Not encrypted. 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 objects: - apiVersion: v1 kind: BuildConfig metadata: annotations: pipeline.alpha.openshift.io/uses: '[{"name": "${NAME}", "namespace": "", "kind": "DeploymentConfig"}]' labels: name: sample-pipeline name: sample-pipeline spec: strategy: jenkinsPipelineStrategy: jenkinsfile: |- try { timeout(time: 20, unit: 'MINUTES') { node('nodejs') { stage('deploy') { openshift.withCluster() { openshift.withProject() { openshift.newApp("tomcat:8-slim", "--name=mytomcat").narrow('svc').expose() } } } } } } catch (err) { echo "in catch block" echo "Caught: ${err}" currentBuild.result = 'FAILURE' throw err } type: JenkinsPipeline triggers: - github: secret: secret101 type: GitHub - generic: secret: secret101 type: Generic - 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
oc new-project pipelineproject oc new-app -f samplepipeline.yaml --> Deploying template "pipelineproject/jenkins-pipeline-example" for "samplepipeline.yaml" to project pipelineproject Pipeline Build Example --------- 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. A Jenkins server must be 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. * With parameters: * Name=nodejs-mongodb-example * Application Hostname= * Git Repository URL=https://github.com/openshift/nodejs-ex.git * Database Name=sampledb * MongoDB Username=userYOB # generated * MongoDB Password=k3XGgVjtUljSY8Tm # generated * Memory Limit=512Mi * Memory Limit (MongoDB)=512Mi * Database Service Name=mongodb * Database Administrator Password=1R4HJpe3kYHYpYb3 # generated * Git Reference= * Context Directory= * GitHub Webhook Secret=H23NSFhL2aiYBUX7YQJHOfSktEgFEdf2Oofi5hr8 # generated * Generic Webhook Secret=PUsLojY1wddyQNTg3w2JfDi5LNa8LfOdpSGP8bPO # generated * Custom NPM Mirror URL= * Namespace=openshift --> Creating resources ... buildconfig.build.openshift.io "sample-pipeline" created service "mongodb" created deploymentconfig.apps.openshift.io "mongodb" created --> Success Use 'oc start-build sample-pipeline' to start a build. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose svc/mongodb' Run 'oc status' to view your app.
查看一下console,同時等待ready.
在jenkins的deployment下環境變量中加入 NODEJS_SLAVE_IMAGE=registry.example.com/openshift3/jenkins-slave-nodejs-rhel7,保存生效
若是不加入環境變量,slave的鏡像就會從redhat官網上拉取了。
進入pipeline頁面,看configuration
而後運行,發現會啓動一個jenkins slave,而後建立一個mytomcat的應用和服務。
修改pipeline裏面的內容爲,也就是說prepare階段輸出project名,Approval階段須要用戶輸入意見,deploy階段會在myproject項目中部署一個應用。
try { timeout(time: 20, unit: 'MINUTES') { node('nodejs') { stage('prepare') { openshift.withCluster() { openshift.withProject() { echo "Using project: ${openshift.project()}" } } } stage('Approval') { timeout(time: 2, unit: 'HOURS') { input message: 'Approve Deploy?', ok: 'Yes' } } stage('deploy') { openshift.withCluster() { openshift.withProject("myproject") { openshift.newApp("tomcat:8-slim", "--name=mytomcatcicd").narrow('svc').expose() } } } } } } catch (err) { echo "in catch block" echo "Caught: ${err}" currentBuild.result = 'FAILURE' throw err }
須要把jenkins加入myproject的admin權限。
oc adm policy add-role-to-user admin system:serviceaccount:pipelineproject:jenkins -n myproject
多集羣支持詳見
https://github.com/openshift/jenkins-client-plugin/
https://docs.openshift.com/container-platform/3.9/dev_guide/dev_tutorials/openshift_pipeline.html