zoukankan      html  css  js  c++  java
  • OpenShift 3.11离线环境的jenkins演示

    离线安装完成后,一般情况下只装了个基础环境,catalog镜像没有导入,本文主要侧重在jenkins的一些环境设置和演示。

    1.导入镜像

    首先follow下面链接下载镜像

    https://docs.openshift.com/container-platform/3.11/install/disconnected_install.html

    我们这里下载的主要是

    $ docker pull registry.redhat.io/openshift3/jenkins-2-rhel7:<tag>

    $ docker pull registry.redhat.io/openshift3/jenkins-slave-maven-rhel7:<tag>

    $ docker pull registry.redhat.io/openshift3/jenkins-slave-nodejs-rhel7:<tag>

    导入到本地镜像仓库

    [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, 发现仍然是不可用状态。

    [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

    执行导入

    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

    2. 简单演示Pipeline部署

    创建一个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

  • 相关阅读:
    面试问题记录-C++
    面试问题记录-网络
    二叉树
    75. Sort Colors 荷兰国旗问题
    桶排序
    数据结构-堆
    快速排序
    第六章 数据库原理
    第五章 Java Web
    第四章 java基础知识
  • 原文地址:https://www.cnblogs.com/ericnie/p/11437529.html
Copyright © 2011-2022 走看看