pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • Docker

  • Jenkins

    • Jenkins - 介绍
    • 从零开始用Jenkins自动构建部署SpringBoot项目
    • 2020 Jenkins 总结
    • Coding Jenkins
    • Jenkins Pipeline
      • 得到所有分支(过滤)
        • Extended Choice Parameter -> Choose Source for Value
      • 下次构建自动勾选上次启动参数
        • Extended Choice Parameter -> Choose Source for Default Value
      • 附:
        • Dockerfile
        • docker-compose.yml
        • 杀掉Java进程命令
        • pipeline
    • Jenkins之得到上次构建选择的分支
    • jenkins流水线脚本
    • Jenkins自定义主题
    • Jenkins部署 jar包形式
    • Jenkins部署笔记
  • k8s
  • DevOps
  • Jenkins
pursuewind
2020-11-22
目录

Jenkins Pipeline

# pipeline

# 得到所有分支(过滤)

# Extended Choice Parameter -> Choose Source for Value

def getBranch = 'git ls-remote --refs git@git.dev.tencent.com:mirrorming/Test-Git.git'
getBranch.execute().text
        .readLines()
        .collect { it.split('/')[2] }
        .stream()
        .filter({ it -> !it.startsWith("temp") })
        .collect()
1
2
3
4
5
6
7
def getBranch = 'git ls-remote --heads git@git.dev.tencent.com:SZkexin/kexin-bnb.git'
getBranch.execute().text
        .readLines()
        .collect { it.split('refs/heads/')[1] }
        .stream()
        .filter({ it -> !it.startsWith("tempbranch") })
        .collect()
1
2
3
4
5
6
7

# 下次构建自动勾选上次启动参数

# Extended Choice Parameter -> Choose Source for Default Value

def ver_keys = ['bash', '-c', 'cd /var/jenkins_home/workspace/test-groovy; git name-rev --name-only HEAD']
ver_keys.execute().text.tokenize('#')
1
2

流水线

node {
    environment {
        JENKINS_WORKSPACE="/var/jenkins_home/workspace"    //jenkins存放文件的地址
        PROJECT_NAME="${JOB_NAME}"                      // 项目名
        JAR_NAME="bnb-system-1.17.1-beta.jar"   // 项目生成的jar的名字
        IMAGE_NAME="bnb-system"                    // 镜像名一般和项目名相同
        VERSION_ID="${BUILD_ID}"
    }
    stage('拉取代码') {
        git 'git@git.dev.tencent.com:SZkexin/kexin-bnb.git'
    }
    
    stage('合并分支') {

        def SEL_BRANCHS = "$branchs"
        println SEL_BRANCHS
        
        def tempBranchName = "tempbranch"
        def asList = Arrays.asList(branchs.split(","))
        ArrayList allBranchs = new ArrayList<String>(asList);
        allBranchs.each { branch -> tempBranchName = tempBranchName.concat("#").concat(branch) }
        tempBranchName = tempBranchName.concat("#").concat(System.currentTimeMillis().toString().substring(10))
        
        println "选择的分支为:" + allBranchs
        def firstBranchName = allBranchs.remove(0)
        println "选择第一支分支:" + firstBranchName
        println "临时分支名为:" + tempBranchName


        sh "git checkout -b ${tempBranchName} origin/${firstBranchName}"
        println "还需要融合的分支有:" + allBranchs

        allBranchs.each { branch ->
            sh "git merge origin/${branch} -m 'merge'"
        }

        //def pushCommand = "git push --set-upstream origin $tempBranchName"
        //sh "git push --set-upstream origin ${tempBranchName}"

        println "==========ok==========="
        
 
    }
    stage('编译打包') {
        sh label: '', script: '/var/jenkins_home/gradle-4.5.1/bin/gradle build -x test'
        //sh label: '', script: 'chmod 777 gradlew'
        //sh label: '', script: './gradlew'
        
    }
    stage('推送并执行') {
        sshPublisher(publishers: [
        sshPublisherDesc(configName: '测试服内网', transfers: [
                sshTransfer(cleanRemote: false, excludes: '',
                        execCommand:
                                '''
                                    BUILD_ID=DONTKILLME
                                    cd /root/jenkins_docker/bnb/bnb-system/build/libs
                                    jarname=`ls | grep bnb-system | grep -v 'sources'| awk '{print $1}'`
                            
                                    mv /root/jenkins_docker/bnb/bnb-system/build/libs/${jarname} /root/jenkins_docker/bnb/docker/bnb-system.jar
                                    cd /root/jenkins_docker/bnb/docker
                                
                                    docker-compose up -d --build
                                    docker image prune -f
                                    
                                ''',
                        execTimeout: 120000,
                        flatten: false,
                        makeEmptyDirs: false,
                        noDefaultExcludes: false,
                        patternSeparator: '[, ]+',
                        remoteDirectory: 'bnb',
                        remoteDirectorySDF: false,
                        removePrefix: '',
                        sourceFiles: '**/bnb-system-*.jar,docker')],
                usePromotionTimestamp: false,
                useWorkspaceInPromotion: false,
                verbose: false)
        ])
        
        println "==========启动完成==========="
    }
}
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

# 附:

# Dockerfile

FROM openjdk:8-jre
MAINTAINER mireal <mirrorming@qq.com>

RUN jarname=`ls | grep bnb-system | grep -v 'sources'| awk '{print $1}'`

RUN mkdir /app
COPY $jarname /app/app.jar

ENTRYPOINT ["java", "-jar","-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8060", "/app/app.jar", "--spring.profiles.active=test", "--kxFaceAuto=0", "--verifyFaceAuto=0", "--kexin.supervision.switch=1"]

EXPOSE 9090
1
2
3
4
5
6
7
8
9
10
11

# docker-compose.yml

version: '3'
services:
  blog:
    build:
      context: .
      dockerfile: Dockerfile
    image: blog:1.0.0
    container_name: blog
    restart: always
    networks:
      - nets
    ports:
      - "8080:8080"
    environment:
      - JAVA_OPTS=-Xmx256M -Duser.timezone=GMT+08
networks:
  nets:
    external: false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 杀掉Java进程命令

netstat -tunlp|grep 9090|awk '{print $7}'|awk -F '/' '{print $1}'|xargs kill -9
1

# pipeline

node {
    environment {
        JENKINS_WORKSPACE = "/var/jenkins_home/workspace"    //jenkins存放文件的地址
        PROJECT_NAME = "${JOB_NAME}"                      // 项目名
        JAR_NAME = "bnb-system-1.17.1-beta.jar"   // 项目生成的jar的名字
        VERSION_ID = "${BUILD_ID}"
    }
    stage('拉取代码') {
        git 'git@git.dev.tencent.com:SZkexin/kexin-bnb.git'
    }

    stage('合并分支') {
        def SEL_BRANCHS = "$branchs"
        println SEL_BRANCHS

        def tempBranchName = "tempbranch"
        def asList = Arrays.asList(branchs.split(","))
        ArrayList allBranchs = new ArrayList<String>(asList);
        allBranchs.each { branch -> tempBranchName = tempBranchName.concat("#").concat(branch) }
        tempBranchName = tempBranchName.concat("#").concat(System.currentTimeMillis().toString().substring(10))

        println "选择的分支:" + allBranchs
        def firstBranchName = allBranchs.remove(0)
        println "选择第一支分支:" + firstBranchName
        println "临时分支:" + tempBranchName


        sh "git checkout -f -b ${tempBranchName} origin/${firstBranchName}"
        println "还需要融合的分支有:" + allBranchs

        allBranchs.each { branch ->
            sh "git merge origin/${branch} -m 'merge'"
        }

        //def pushCommand = "git push --set-upstream origin $tempBranchName"
        //sh "git push --set-upstream origin ${tempBranchName}"
        println "==========ok==========="

    }
    stage('编译打包') {
        sh label: '', script: '/var/jenkins_home/gradle-4.5.1/bin/gradle build -x test'
        //sh label: '', script: 'chmod 777 gradlew'
        //sh label: '', script: './gradlew'

    }
    stage('推送') {
        sshPublisher(publishers: [
                sshPublisherDesc(configName: '测试服内网', transfers: [
                        sshTransfer(cleanRemote: false, excludes: '',
                                execCommand:'''
#!/bin/bash
BUILD_ID=DONTKILLME
netstat -tunlp|grep 9090|awk '{print $7}'|awk -F '/' '{print $1}'
cd /root/jenkins_docker/bnb/bnb-system/build/libs
jarname=`ls | grep bnb-system | grep -v 'sources'| awk '{print $1}'`
mv /root/jenkins_docker/bnb/bnb-system/build/libs/${jarname} /root/jenkins_docker/bnb/bnb-system.jar
kill_id=`netstat -tunlp|grep 9090|awk '{print $7}'|awk -F '/' '{print $1}'`

if [ -n "$kill_id" ]
then
    echo "kill -9 的pid:" $kill_id
    kill -9 $kill_id
fi
sleep 1s
kill_debug_id=`netstat -tunlp | grep 8060 | awk '{print $7}'|awk -F '/' '{print $1}'`
if [ -n "$kill_debug_id" ]
then
    echo "kill -9 kill_debug_id:" $kill_debug_id
    kill -9 $kill_debug_id
fi
sleep 1s
echo "==============应用启动==============" 
source /etc/profile
nohup java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8060 /root/jenkins_docker/bnb/bnb-system.jar  --spring.profiles.active=test --kxFaceAuto=0 --verifyFaceAuto=0 --sms.send=1 >> /root/jenkins_docker/bnb/bnb-system.log  &

sleep 1s
tail -f /root/jenkins_docker/bnb/bnb-system.log | sed '/com.zaxxer.hikari.HikariDataSource/Q'
''',
                                execTimeout: 120000,
                                flatten: false,
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: 'bnb',
                                remoteDirectorySDF: false,
                                removePrefix: '',
                                sourceFiles: '**/bnb-system-*.jar')],
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: false)
        ])

        println "==========结束==========="
    }
}


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
node {
    environment {
        JENKINS_WORKSPACE = "/var/jenkins_home/workspace"    //jenkins存放文件的地址
        PROJECT_NAME = "${JOB_NAME}"                      // 项目名
        VERSION_ID = "${BUILD_ID}"
    }
    stage('拉取代码') {
        git 'git@git.dev.tencent.com:SZkexin/kexin-bnb.git'
    }

    stage('合并分支') {
        def SEL_BRANCHS = "$branchs"
        println SEL_BRANCHS

        def tempBranchName = "tempbranch"
        def asList = Arrays.asList(branchs.split(","))
        ArrayList allBranchs = new ArrayList<String>(asList);
        allBranchs.each { branch -> tempBranchName = tempBranchName.concat("#").concat(branch) }
        tempBranchName = tempBranchName.concat("#").concat(System.currentTimeMillis().toString().substring(10))

        println "选择的分支:" + allBranchs
        def firstBranchName = allBranchs.remove(0)
        println "选择第一支分支:" + firstBranchName
        println "临时分支:" + tempBranchName


        sh "git checkout -f -b ${tempBranchName} origin/${firstBranchName}"
        println "还需要融合的分支有:" + allBranchs

        allBranchs.each { branch ->
            sh "git merge origin/${branch} -m 'merge'"
        }

        //def pushCommand = "git push --set-upstream origin $tempBranchName"
        //sh "git push --set-upstream origin ${tempBranchName}"
        println "==========ok==========="

    }
    stage('编译打包') {
        sh label: '', script: '/var/jenkins_home/gradle-4.5.1/bin/gradle build -x test'
        //sh label: '', script: 'chmod 777 gradlew'
        //sh label: '', script: './gradlew'
        output = sh (script: "head -1 gradle.properties", returnStdout: true).trim()
   
        VERSION_NAME = output.split('=')[1]
        
        echo "从gradle读取的版本: ${VERSION_NAME}"

    }
    stage('推送') {
        def DEBUG_PORT = "$debug_port"
        def SMS = "$sms"
        def BNB_JAR_NAME = "bnb-system-"+VERSION_NAME+".jar"
        def BNB_NAME = BNB_JAR_NAME
        println BNB_NAME
        sshPublisher(publishers: [
                sshPublisherDesc(configName: '测试服内网', transfers: [
                        sshTransfer(cleanRemote: false, excludes: 'bnb-system-*-beta-sources.jar',
                                execCommand:'''
#!/bin/bash
BUILD_ID=DONTKILLME
netstat -tunlp | grep 9090 | awk '{print $7}'|awk -F '/' '{print $1}'

cd /root/jenkins_docker/bnb/bnb-system/build/libs
jarname=`ls -t | grep bnb-system | grep -v 'sources'| awk '{print $1}'|head -n 1`

mv /root/jenkins_docker/bnb/bnb-system/build/libs/${jarname} /root/jenkins_docker/bnb/bnb-system.jar
kill_id=`netstat -tunlp|grep 9090|awk '{print $7}'|awk -F '/' '{print $1}'`

if [ -n "$kill_id" ]
then
    echo "kill -9 的pid:" $kill_id
    kill -9 $kill_id
fi
sleep 1s

kill_debug_id=`netstat -tunlp | grep 8060 | awk '{print $7}'|awk -F '/' '{print $1}'`
if [ -n "$kill_debug_id" ]
then
    echo "kill -9 kill_debug_id:" $kill_debug_id
    kill -9 $kill_debug_id
fi
sleep 1s

echo "==============应用启动 --> ${jarname} ==============" 
source /etc/profile
nohup java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${DEBUG_PORT} /root/jenkins_docker/bnb/bnb-system.jar  --spring.profiles.active=test --kxFaceAuto=0 --verifyFaceAuto=0 --sms.send=${SMS} >> /root/jenkins_docker/bnb/bnb-system.log  &

sleep 1s
tail -f /root/jenkins_docker/bnb/bnb-system.log | sed '/com.zaxxer.hikari.HikariDataSource/Q'
cd /root/jenkins_docker/bnb/bnb-system/build
rm -fr /libs/
''',
                                execTimeout: 120000,
                                flatten: false,
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: 'bnb',
                                remoteDirectorySDF: false,
                                removePrefix: '',
                                sourceFiles: '**/bnb-system-*.jar')],
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: false)
        ])

        println "==========结束==========="
    }
}

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
Last Updated: 2023/01/30, 11:01:00
Coding Jenkins
Jenkins之得到上次构建选择的分支

← Coding Jenkins Jenkins之得到上次构建选择的分支→

Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜
  • 网络DJ