jenkins pipeline docker 发布项目

环境:

192.168.100.148 开发环境

192.168.100.140 jenkins 服务器

harbor.zong.com 镜像仓库

 

1.拉取代码

2.构建

3.sonarqube 代码扫描质检

4.构建生成镜像推送仓库

5.部署到开发环境服务器

6.成功或失败钉钉通知群内

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
pipeline {
    agent any
     
     
    environment {
        _version = sh(script: "echo `date '+%Y%m%d%H%M%S'`", returnStdout: true).trim()
        DINGDING_ROBOT_URL = 'https://oapi.dingtalk.com/robot/send?access_token=aa67b55f25245c319aedd6efe5d20d81ac1cfe6e858c15d20914e8fd26a4e6ac'
        BUILD_USER_ID = ""
        BUILD_USER = ""
        BUILD_USER_EMAIL = ""
        ChangeLog = ""
        Docker_mg_Name = "47.99.1.15:81/192.168.100.148/"         //Harbor Image warehouse address
        Esl_app_1 = "esl_app_1"
        BRANCH = "dev_3.5"
    }
 
 
 
    stages {
 
       stage ("Time stamp") { //time stamp
            steps {
                echo "${_version}"
 
            }
 
        }
   
         
 
 
        stage('Pull code') {          //get project code from repo
            steps {
                  checkout([$class: 'GitSCM', branches: [[name: "*/${BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://192.168.100.140/esl_backend/zk.git']]])
 
            }
        }
     
 
 
        stage('structure') {        //exec mvn cmd
            steps {
                withMaven(jdk: 'jdk', maven: 'maven') {
                   sh 'mvn clean package -DskipTests '
                }
            }
        }
       stage('Code scanning') {
            steps {
                echo "starting codeAnalyze with SonarQube......"
                sh "mvn sonar:sonar -Dsonar.projectName=148-服务端  -Dsonar.host.url=http://192.168.100.118:9000 -Dsonar.login=e6e89488da1d3051006be436a4899d4209771851"
            }
        }
 
 
 
        stage('Building a mirror image') {         //move jar file into project_dir
            steps {
                  sh "docker build -t ${Docker_mg_Name}${Esl_app_1}:${BRANCH} ."  //Building a mirror image
                  sh "docker login 47.99.1.15:81 -uadmin -pZkongNB1234"                 //Log in to image warehouse
                  sh "docker push ${Docker_mg_Name}${Esl_app_1}:${BRANCH}"       // Push to remote image warehouse
                  sh "docker rmi ${Docker_mg_Name}${Esl_app_1}:${BRANCH}"         //Delete local mirror
                   
            }
        }
 
        stage('Running image'){ //pull run docker images
           steps {
             sshPublisher(publishers: [sshPublisherDesc(configName: '148', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "bash /server/scripts/deploy.sh ${BRANCH}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])           }
       }
 
 
    }
 
 
 
post {
        //Build failure notification
 
        failure {
          script {
                 dingtalk (
                        robot: '31ca2fb0-964a-468f-81dd-edf521f78446',
                        type: 'MARKDOWN',
                        title: "项目构建信息",
                        text: [
                            '### 项目构建信息',
                            ">- job名称:    **${JOB_NAME}**",
                            ">- 持续时间:    **${currentBuild.durationString}**",
                            ">- 当前分支:    **${env.BRANCH}**",
                            ">- 构建发起:    **${BUILD_USER}**",
                            ">- 构建结果:   **构建失败❌*",
                            ">- 构建日志:    [点击查看详情](${env.BUILD_URL}console)",
                           // ">- 更新记录:    **${ChangeLog}**",
                              
                                    
                        ],
  
                        at: [
                          '所有人'
                        ]
                    )
          }
  
        }
 
        //Build success notification
 
        success {
        wrap([$class: 'BuildUser']) {
                   script {
                       BUILD_USER_ID = "${env.BUILD_USER_ID}"
                       BUILD_USER = "${env.BUILD_USER}"
                       BUILD_USER_EMAIL = "${env.BUILD_USER_EMAIL}"
                       ChangeLog = "${env.ChangeLog}"
                   }
                }
            dingtalk (
                robot: '31ca2fb0-964a-468f-81dd-edf521f78446',
                        type: 'MARKDOWN',
                        title: "项目构建信息",
                        text: [
                            '### 项目构建信息',
                            ">- job名称:    **${JOB_NAME}**",
                            ">- 持续时间:    **${currentBuild.durationString}**",
                            ">- 当前分支:    **${env.BRANCH}**",
                            ">- 构建发起:    **${BUILD_USER}**",
                            ">- 构建结果:   **构建成功 ✅**",
                            ">- 构建日志:    [点击查看详情](${env.BUILD_URL}console)",
                           // ">- 更新记录:    **${ChangeLog}**",
                              
                                    
                        ],
  
                        at: [
                          '所有人'
                        ]
                    )
                }
            }
 
}

  

posted @   地铁昌平线  阅读(239)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2020-05-28 k8s 平滑升级
点击右上角即可分享
微信分享提示