shell脚本样本_Jenkins pipeline脚本编写实践分享(三)

在经过半年多的应用之后,我考虑再对现有的jenkins整套服务再做升级,使其更好用些。因为现存的jenkins服务结构已经在使用了,所以就联合运维部的同事重新搭建了一套,我也是从头设计了一下,具体设计方案,我准备另外写,这里只分享新体系里的pipeline的样本。新体系里会新用到gitlab、k8s这些技术,而且jenkins设计成了伸缩式的。

好了,脚本如下:

#!/usr/bin/env groovy

pipeline {
    
    //确认使用主机
    agent
            {
    
                kubernetes {
    
                    label "${BUILD_TAG}-pod"
                    defaultContainer 'jnlp'
                    yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    some-label: some-label-value
spec:
  containers:
  - name: jnlp-slave
    image: 172.17.1.XXX/library/jenkins-docker:2
    imagePullPolicy: Always
    env:
    - name: MY_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: MY_POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    - name: MY_POD_IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
    - name: MY_POD_SERVICE_ACCOUNT
      valueFrom:
        fieldRef:
          fieldPath: spec.serviceAccountName
    volumeMounts:
    - name: sock
      mountPath: /var/run/docker.sock
    - name: mvn
      mountPath: /home/jenkins/.m2/repository      
    command:
    - cat
    tty: true
  volumes:
  - name: sock
    hostPath:
      path: /var/run/docker.sock
  - name: mvn
    glusterfs:
      endpoints: glusterfs-cluster
      path: /gfs/jenkinsmvn/.m2/repository
      readOnly: false
"""
                }
            }
    //常量参数,初始确定后一般不需更改
    environment {
    
        //services的pom.xml的相对路径
        pomPath = 'pom.xml'
        //gitlab账号
        GIT_USERNAME = 'jenkins'
        //密码
        GIT_PASSWORD = '*********'
        //k8s节点地址
        TESTIP = '172.17.1.xxx'
        //归档文件,jmeter测试报告
        responseData='jmeter/ResponseData.xml,'+'jmeter/ResultReport/*.*,'+'jmeter/ResultReport/sbadmin2-1.0.7/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/less/*.*,'+'jmeter/ResultReport/sbadmin2-1.0.7/dist/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/dist/css/*.*,'+'jmeter/ResultReport/sbadmin2-1.0.7/dist/js/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/*.*,'+'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/bootstrap/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/bootstrap/dist/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/bootstrap/dist/css/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/bootstrap/dist/fonts/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/bootstrap/dist/js/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/metisMenu/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/metisMenu/dist/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/flot.tooltip/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/flot.tooltip/js/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/flot-axislabels/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/flot/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/font-awesome/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/font-awesome/css/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/font-awesome/less/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/font-awesome/fonts/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/font-awesome/scss/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/jquery/*.*,'+
                    'jmeter/ResultReport/sbadmin2-1.0.7/bower_components/jquery/dist/*.*,'+'jmeter/ResultReport/content/*.*,'+
                    'jmeter/ResultReport/content/css/*.*,'+'jmeter/ResultReport/content/pages/*.*,'+
                    'jmeter/ResultReport/content/js/*.*'
        //jmeter测试脚本名称
        JMETERNAME = 'cms'
    }
    options {
    
        //保持构建的最大个数
        buildDiscarder(logRotator(numToKeepStr: '10'))
        // 设置Pipeline运行的超时时间
        timeout(time: 1, unit: 'HOURS')
    }
    //pipeline运行结果通知给触发者
    post {
    
        //始终执行
        /*always {
            echo "分支${BRANCH_NAME}删除服务......"
            container('jnlp-slave') {
                sh """
		chmod 755 docker_shell/*.sh
		docker_shell/always.sh ${JOB_NAME} ${BUILD_NUMBER}
		"""
            }
        }*/
        //失败触发邮件
        failure {
    
            script {
    
                emailext body: '${JELLY_SCRIPT,template="static-analysis"}',
                        recipientProviders: [[$class: 'RequesterRecipientProvider'], [$class: 'DevelopersRecipientProvider']],
                        subject: '${JOB_NAME}- Build # ${BUILD_NUMBER} - Failure!'
            }
        }
    }

    stages {
    
        // 编译构建代码
        stage('Build') {
    
            steps {
    
                //拉取工程代码
                git branch: '${BRANCH_NAME}', credentialsId: '******-***-***-****-**********', url: 'git@172.17.1.xxx:X/xxx/zc-ht/datamgt.git'

                container('jnlp-slave') {
    
                    script {
    
                        if ( "$BRANCH_NAME" != 'master') {
    
                        sh "mvn org.jacoco:jacoco-maven-plugin:prepare-agent -Dmaven.test.failure.ignore=true -f ${pomPath} clean install -Dautoconfig.skip=true -Pcoverage-per-test"
                        } else {
    
                            sh "mvn -f ${pomPath} clean install -Dmaven.test.skip=true"
                            //sh "mvn -f ${pomPath} clean install -Dtest -DfailIfNoTests=false"
                        }
                    }
                }
            }

        }
        //单元测试
        stage('Unit test') {
    
            steps {
    
                echo "starting unitTest......"
                //注入jacoco插件配置,cl
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值