在经过半年多的应用之后,我考虑再对现有的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