热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins2.0

[TOC]Jenkins2.0支持BlueOcean界面,如下:image.png2.0的三个特点:PipelineasCode:全新的开箱体验:即变好看了。1.x兼容性Pipel

[TOC]

Jenkins 2.0

支持Blue Ocean界面,如下:

《Jenkins 2.0》 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?"这种让人工进行确认。

《Jenkins 2.0》 image.png

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

Blue Ocean创建项目

《Jenkins 2.0》 image.png
《Jenkins 2.0》 image.png
《Jenkins 2.0》 image.png

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

《Jenkins 2.0》 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!"
}
}
}
}

推荐阅读
  • Jenkins 持续集成 Pipeline 简易入门教程
    为什么选择JeknkinsPipeline?团队目前使用Jekinks进行项目sdk库的发布,但是如果要修改Jenkins项目配置完成对工程编译的配置的时候,学习曲线瞬间变得陡峭。 ... [详细]
  • Pipeline支持两种语法:Declarative(在Pipeline2.5中引入)和ScriptedPipeline语法:pipeline{*insertDeclarative ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.032generic/bulid: 没有那个文件或目录。 停止。”...
    编写一个简单的内核驱动模块1staticinthello_init()2{3printk(“hello,Iaminkernelnow\n”);4return0;5}6voidadd ... [详细]
  • 使用Jenkins pipeline流水线构建docker镜像和发布
    新建一个pipelinejob选择Pipeline任务,然后进入配置页面。对于Pipeline,Definition选择PipelinescriptfromSCM.需要注意的是 ... [详细]
  • IhaveaC++projectinUbuntu12.04.Toruntheprojectthemakefilerequiresthefollowingfiles: ... [详细]
  • 一.什么是openGLOpenGL被定义为“图形硬件的一种软件接口”。从本质上说,它是一个3D图形和模型库,具有高度的可移植性,具有非常快的速度。二.管线管线这个术语描述了open ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 这个链接相当于整个官方文档的目录:DjangodocumentationcontentsGettingstartedDjangoataglanceDesignyo ... [详细]
author-avatar
刘刘刘刘刘志锋_506
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有