Jenkins 2.0

[TOC]

Jenkins 2.0

支持Blue Ocean界面,如下:

image.png

2.0的三个特点:

  • Pipeline as Code:
  • 全新的开箱体验:即变好看了。
  • 1.x兼容性

Pipeline as Code

其帮助Jenkins从CI到CD转变。其是一套运行在Jenkins上的工作流框架,把原本独立运行于
单个或多个节点的任务连接起来,实现复杂的发布流程。Pipeline的实现方式是一套Groovy DSL(类似Gradle),任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

基本概念:

  • Step:最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。
  • Node:一个Node就是一个jenkins节点,可以是MasterAgent。是执行Step的具体运行期环境。
  • Stage:一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。Stage是个逻辑分组,可以跨多个Node

Jenkins 2默认支持3种类型的Pipeline:普通PipelineMultibranch PipelineOrganization Folders,后两种其实是批量创建一组普通Pipeline的快捷方式,分别对应于多分支的应用和多应用的大型组织

Jenkinsfile

其是一个文本文件,名称为:Jenkinsfile,放在根目录下即可。

在其中定义了Jenkins Pipeline。如下为一个定义了三个stage的pipeline

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

在Steps里面可以运行以下信息:

脚本命令的执行:

  • unin/linux: 使用sh,如:sh 'mvn -version'
  • windows:使用bat

超时、重试机制:

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                retry(3) {
                    sh './flakey-deploy.sh'
                }

                timeout(time: 3, unit: 'MINUTES') {
                    sh './health-check.sh'
                }
            }
        }
        stage('Deploy2') {
            steps {
                timeout(time: 3, unit: 'MINUTES') {
                    retry(5) {
                        sh './flakey-deploy.sh'
                    }
                }
            }
        }
    }
}

Finishing up:使用post来完成一些资源的清理工作。其和stages平级:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'echo "Fail!"; exit 1'
            }
        }
    }
    post {
        always {
            echo 'This will always run'
        }
        success {
            echo 'This will run only if successful'
        }
        failure {
            echo 'This will run only if failed'
        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
}

定义执行环境

通过agent来定义pipeline的执行环境,在每个Pipeline,agent是必需存在的。

pipeline {
    agent {
        docker { image 'node:7-alpine' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

在最外面把agent none后,可以为每个stages设置相应的agent

环境变量

可以定义为全局的,也可以为Stage来定义。

pipeline {
    agent any
    environment { 
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment { 
                DEBUG_FLAGS = '-g'
            }
            steps {
                sh 'printenv'
            }
        }
    }
}

已定义的环境变量,可以通过env来访问,其中有:

  • BUILD_ID: 当前build id.
  • JOB_NAME:项目名,如:boot或者boot/dev,其中dev为分支名
  • JENKINS_URL
steps {
    echo 'Deploying....'
    echo "当前BuildId: ${env.BUILD_ID}"
    echo "当前Job: ${env.JOB_NAME}"
    echo "当前URL: ${env.JENKINS_URL}"
}

参数:可以通过params来访问编译时的参数。如:

pipeline {
    agent any
    parameters {
        string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?')
    }
    stages {
        stage('Example') {
            steps {
                echo "${params.Greeting} World!"
            }
        }
    }
}

清理并通知

清理功能见上面,使用post来定义。

email通知:

post {
    failure {
        mail to: 'team@example.com',
             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
             body: "Something is wrong with ${env.BUILD_URL}"
    }
}

steps里面可以通过input "Does the staging environment look ok?"这种让人工进行确认。

image.png

其具体参数用法-参考文档](https://jenkins.io/doc/book/pipeline/syntax/))

Blue Ocean创建项目

image.png
image.png
image.png

则这时创建成功后,会自动扫描Jenkinsfile
如果需要变更后自动触发,则可以配置其Scan Multibranch Pipeline Triggers

image.png

Jenkinsfile样例文件

pipeline {
    agent any

    tools {
        maven 'Default'
    }

    parameters {
        string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?')
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                sh 'java -version'
                sh 'mvn -version'
                sh 'mvn clean'
                echo 'build over...'
            }
        }
        stage('Test') {
            steps {
                input "Does the staging environment look ok?"
                echo 'Testing..'
            }
        }
        stage('hello') {
            steps {
                echo 'hello world'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
                echo "当前BuildId: ${env.BUILD_ID}"
                echo "当前Job: ${env.JOB_NAME}"
                echo "当前URL: ${env.JENKINS_URL}"
                echo "${params.Greeting} World!"
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容