下面是一个示例配置文件,包含了常用的步骤,基本每一个步骤都有注解

其中docker打包借助了maven的插件maven插件

 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
    pipeline {
        agent any
        // 部署参数
        parameters {
            string(name: 'type', defaultValue: 'dev', description: '应用环境')
            string(name: 'servers',defaultValue:'0' ,description: '对应服务器(可选)')
        }
        // 触发器,这里指定每2分钟轮询一次
        triggers {
                pollSCM('*/2 * * * *')
        }
        stages {
            // 使用maven编译打包
            stage('Build') {
                steps {
                    sh 'mvn clean compile -P$type'
                    sh 'mvn clean package -Dmaven.test.skip=true  -P$type'
                }
            }
            // 借助maven打包镜像
            stage('Build Docker image') {
                steps {
                    sh 'mvn docker:build -Ddeploy_type=$type -P$type'
                }
            }
            //开始部署相关流程
            stage('deploy') {
                steps {
                    script {
                        //根据环境区别处理,因为一般线上环境可能需要通过堡垒机,测试环境则不用
                        if (env.type == 'test' || env.type == 'dev') {
                            sh "chmod +x deploy_service_ssh.sh"
                            //根据参数提供的服务器列表逐台部署
                            for (item in env.servers.tokenize(',')) {
                                def cmd = "deploy_service_ssh.sh" + item
                                sh "$cmd"
                            }
                        } else if (env.type == 'prod') {
                            for (item in env.servers.tokenize(',')) {
                                echo "Deploying to " + item
                                def cmd = "deploy_gateway.sh " + item
                                sh "$cmd"
                            }
                        } else {
                            throw new RuntimeException('end_other')
                        }
                        echo "清理镜像"
                        // 清理过期镜像
                        try{
                            sh "docker image ls |grep none|awk '{print \$3}'|xargs docker image rm"
                        }catch(Exception e){

                        }
                    }
                }
            }

        }

        // 部署步骤完成后的操作,可以在这里加入类似推送的功能
        post{
            always{
                    script {
                        def msg = env.service_name + '部署成功'
                        echo msg
                    }
            }
        }
    }