wangzilun
2022-02-21 3efbb10ae1612714aec4881e9d71a9fd5d6a49fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//utils 源码在jenkins-pipeline-library里
@Library('utils')_
pipeline {
    agent { label '103' }
 
    environment {
            project_name = 'git_study'
            url = 'http://47.92.145.232:8998/r/git_study.git'
            GIT_CREDENTIALS_ID = '6abafc9e-1f0e-4d27-8389-7c81d69bcdb2'
        }
    options {
        //给日志加上时间错, 需安装 Timestamper 插件
        //mvn test surefire-report:report
        timestamps()
        ansiColor('xterm')
        //丢弃旧的构建前两个为发布包保留天数(比此早的发布包将被删除,但构建的日志、操作历史、报告等将被保留)和构建个数
        buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '7', numToKeepStr: '10')
 
    }
    stages {
        stage('source') {
            steps {
                checkout([$class: 'GitSCM'
                , branches: [[name: "${GIT_BRANCH}"]]
                , doGenerateSubmoduleConfigurations: false
                , extensions: []
                , submoduleCfg: []
                , userRemoteConfigs: [[credentialsId: "${GIT_CREDENTIALS_ID}", url: "${url}"]]
                ])
 
            }
        }
        stage('testMaven') {
            steps {
 
                sh 'mvn clean test -U'
                junit allowEmptyResults: true, keepLongStdio: true, skipPublishingChecks: true, testResults: 'target/surefire-reports/*.xml'
 
            }
        }
        stage('testFunction') {
            steps {
                sh 'echo test'
            }
        }
 
        //将项目打成war并归档,将配置文件目录存入stash
        stage('package') {
            steps {
                sh '''#!/bin/sh
                    ####maven编译部署#####
                    ##mvn clean package -U
                    ##处理结果包
                    old_version=\$(find . -iname "\${project_name}.java"| xargs sed -nr 's/^[^0-9]*(([0-9]+\\.)*[0-9]+).*;/\\1/p\')
                    if [ "\$old_version_all" =~ "-" ];then
                        echo "包含"
                    else
                        echo "不包含"
                    fi
                    echo "old_version_all \$old_version_all"
                    echo "project_name \$project_name"
                    dir_name=\${project_name}"-"\$old_version_all
                    echo "dir_name \$dir_name"
                    ##cd target
                    ##mkdir \$dir_name
                    ##cp *.war \$dir_name
                    ##zip -r "\$dir_name.zip" \$dir_name
                '''
            }
        }
        stage('version add master') {
            when {
                //版本号自动添加逻辑需同时符合下列触发条件:
                //1. 不能在master分支触发
                //2. 有任意浏览器页面资源文件修改
                //3. 不包含[项目名.java]文件的修改
                allOf {
                    anyOf {
                        changeset "**/*.js"
                        changeset "**/*.css"
                        changeset "**/*.html"
                        changeset "**/*.xhtml"
                        changeset "**/*.jpg"
                        changeset "**/*.png"
                    }
                    not {
                        changeset "**/${project_name}.java"
                    }
                    branch 'master'
                }
            }
            steps {
                versionAddDevelop("${project_name}","${GIT_CREDENTIALS_ID}","${url}","${GIT_BRANCH}")
            }
        }
 
        stage('master version add') {
            when {
                not {
                    allOf {
                       changeset "**/${project_name}.java"
                    }
                }
                branch 'master'
            }
            steps {
                //http(s)的git链接使用帐号密码,ssh使用 keyFileVariable: 'SSH_KEY'
                echo "todo version add"
                versionAddDevelop("${project_name}","${GIT_CREDENTIALS_ID}","${url}","${GIT_BRANCH}")
                }
        }
 
        stage('version add master') {
            when {
                //版本号自动添加逻辑需同时符合下列触发条件:
                //1. 不能在master分支触发
                //2. 有任意浏览器页面资源文件修改
                //3. 不包含[项目名.java]文件的修改
                allOf {
                    anyOf {
                        changeset "**/*.js"
                        changeset "**/*.css"
                        changeset "**/*.html"
                        changeset "**/*.xhtml"
                        changeset "**/*.jpg"
                        changeset "**/*.png"
                    }
                    not {
                        changeset "**/${project_name}.java"
                    }
                    branch 'develop'
                }
            }
            steps {
                versionAddDevelop("${project_name}","${GIT_CREDENTIALS_ID}","${url}","${GIT_BRANCH}")
            }
        }
 
        stage('deploy') {
            when { branch 'master' }
            steps {
                sh 'echo test'
            }
        }
    }
}