天天看點

k8s配合Jenkins-pipline做多分支建構【24】

在生産中,經常會遇到比如我們一個項目又多個環境,測試,預發,正式等不同的環境,如果一個項目建立一個,會比較麻煩,是以需要用到分支

jenkins需要安裝插件

Git Parameter

k8s配合Jenkins-pipline做多分支建構【24】

Blue Ocean

這個插件也安裝一下

開始建立一個項目

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

接下來我們在看看gitlab的分支内容我們有三個分支,再看看jenkinsfile的内容

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

完成之後我們通過多分支來探測gitlab的分支自動會拉下來

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

接下來就可以進入不同的分支進行建構了

jenkinsfile内容如下

node('haimaxy-jnlp'){

        stage('Clone') {

        echo "1.Clone Stage"

         checkout scm

     script {

    //擷取comment id

        env.imageTag = sh (script: 'git rev-parse --short HEAD ${GIT_COMMIT}', returnStdout: true).trim()

      }

   }    

    stage('build') {

      echo "2.mvn clean"

      sh "cd /home/jenkins/agent/workspace/bbs/solo-master && mvn clean -Dmaven.test.skip=true  install -s /home/jenkins/settings/settings.xml"

    }

    stage('build dockerfile') {

      echo "3.build dockerfile"

      sh '''

cd /home/jenkins/agent/workspace/bbs/solo-master/target

REPOSITORY=10.4.7.52/cnych/jenkins-lxf:${imageTag}

cat >> Dockerfile << EOF

FROM tomcat:7

RUN mkdir /usr/local/tomcat/webapps/ROOT

ADD ./solo.war /usr/local/tomcat/webapps/ROOT

USER root

EOF

docker build -t $REPOSITORY .

      '''

    stage('docker push  ') {

      echo "docker run"

      REPOSITORY=10.4.7.52/cnych/jenkins-lxf:${imageTag}

      docker login http://10.4.7.52 -u admin -p Harbor12345

      docker push $REPOSITORY

        stage('kubectl apply'){

          echo "kubectl apply"

        echo "是否需要需要更新?"

     def userInput = input(

            id: 'userInput',

            message: '是否需要更新?',

            parameters: [

              [

                $class: 'ChoiceParameterDefinition',

                choices: "N\nY",

                name: '更新?'

              ]

            ]

          )

           if (userInput == "Y") {

                      sh '''

cat >> tomcat.yaml << EOF          

apiVersion: apps/v1

kind: Deployment

metadata:

  name: tomcat-deployment

  labels:

    app: tomcat

spec:

  replicas: 3

  selector:

    matchLabels:

      app: tomcat

  minReadySeconds: 5

  strategy:

    rollingUpdate:

    maxSurge: 1

    maxUnavailable: 1

  template:

    metadata:

      labels:

        app: tomcat

    spec:

      containers:

      - name: tomcat

        image: \$REPOSITORY

        ports:

        - containerPort: 8080

---

apiVersion: v1

kind: Service

  name: tomcat-service

  ports:

  - port: 8080

    targetPort: 8080

    nodePort: 31305

  type: NodePort

kubectl set image deployment/tomcat-deployment tomcat=$REPOSITORY -n kube-ops

          '''

          }  

stage('rollout') {

    echo "是否需要快速復原?"

            message: '是否需要快速復原?',

                name: '復原?'

            sh "kubectl rollout undo deployment tomcat-deployment -n kube-ops"

          }

     }

}

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

接下來我們可以開始建構一下

比如進入dev環境

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

都可以使用這裡使用blue ocean

k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】
k8s配合Jenkins-pipline做多分支建構【24】

這樣dev環境就釋出了,其他環境釋出也時類似操作,比較友善