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

本文分享了一种新的Jenkins Pipeline设计,该设计结合了gitlab、k8s等技术,实现伸缩式jenkins服务。Pipeline脚本详细展示了如何在不同阶段执行构建、单元测试、静态代码分析、自动化接口测试和镜像管理。通过与K8s集成,实现了服务的动态伸缩和资源管理。
摘要由CSDN通过智能技术生成

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

好了,脚本如下:

#!/usr/bin/env groovy

pipeline {

//确认使用主机 agent

{

kubernetes {

label "${BUILD_TAG}-pod"

defaultContainer 'jnlp'

yaml """apiVersion: v1kind: Podmetadata:labels:some-label: some-label-valuespec:containers:- name: jnlp-slaveimage: 172.17.1.XXX/library/jenkins-docker:2imagePullPolicy: Alwaysenv:- name: MY_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: MY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: MY_POD_SERVICE_ACCOUNTvalueFrom:fieldRef:fieldPath: spec.serviceAccountNamevolumeMounts:- name: sockmountPath: /var/run/docker.sock- name: mvnmountPath: /home/jenkins/.m2/repositorycommand:- cattty: truevolumes:- name: sockhostPath:path: /var/run/docker.sock- name: mvnglusterfs:endpoints: glusterfs-clusterpath: /gfs/jenkinsmvn/.m2/repositoryreadOnly: 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/*.shdocker_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插件配置,clean test执行单元测试代码. All tests should pass. //junit '**/target/surefire-reports/*.xml' //配置单元测试覆盖率要求,未达到要求pipeline将会fail,code coverage.LineCoverage>20%. //jacoco changeBuildStatus: true, maximumLineCoverage:"20%" }

}

//静态检查 stage('SonarQube') {

steps {<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值