天天看点

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环境就发布了,其他环境发布也时类似操作,比较方便