持续集成/持续交付——JenkinsFile详细使用教程

这篇具有很好参考价值的文章主要介绍了持续集成/持续交付——JenkinsFile详细使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

持续集成/持续交付——JenkinsFile详细使用教程

一、BlueOcean

1、BlueOcean 概念

提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务
它为开发人员提供了更具乐趣的Jenkins使用方式
实现了一种全新的、现代风格的用户界面
有助于任何规模的团队实现持续交付

2、BlueOcean 特性

流水线编辑器:是一种直观并可视化的流水线编辑器
流水线的可视化:对流水线的可视化表示
流水线的诊断:即刻定位任务问题
个性化仪表盘:用户可以自定义仪表盘,只显示与自身相关的流水线

3、BlueOcean 安装

需要在 Jenkins plugin 中安装 BlueOcean
持续集成/持续交付——JenkinsFile详细使用教程

二、Pipeline 简介

1、Jenkins Pipeline 概念

a、借用Unix 中的Pipeline思路,一种高内聚低耦合的工具
b、Jenkins 2.0 以上才会有
c、一系列 Jenkins 插件将整个持续集成用解释性代码 Jenkinsfile 来描述
d、Jenkinsfile 使用方法:

Jenkins 任务页面输入
源代码工程中编辑

2、Jenkinsfile 语法类型:

Declarative pipeline
Scripts pipeline

3、采用Jenkins 任务页面输入

a. Jenkins中创建一个 pipeline 任务

持续集成/持续交付——JenkinsFile详细使用教程

b. Definition 中选择 Pipeline Script

c. 在 Pipeline 模块添加Pipeline代码

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

d. 运行

持续集成/持续交付——JenkinsFile详细使用教程

4、利用Git源码库导入 Jenkins Pipeline

a. 在Jenkins Pipeline 任务中选择 Pipeline script from SCM,

b. 然后添加 git 源码地址,

c. 在Script Path中填写需要运行的Jenkinsfile文件所在的地址

持续集成/持续交付——JenkinsFile详细使用教程

d. 运行

持续集成/持续交付——JenkinsFile详细使用教程
持续集成/持续交付——JenkinsFile详细使用教程


三、Jenkinsfile 语法简介

1、Jenkinsfile 支持两种语法形式 :

Declarative pipeline - v2.5之后引入,结构化方式
Scripts pipeline - 基于 groovy 的语法

持续集成/持续交付——JenkinsFile详细使用教程

2、Jenkinsfile 语法一:Declarative Pipeline

a.必须包含在一个pipeline块内,具体来说是:
pipeline {
}

b.基本的部分是“steps”,steps 告诉Jenkins要做什么
c.语句分类具体包含Sections, Steps,赋值等几大类

持续集成/持续交付——JenkinsFile详细使用教程

3、Declarative Pipeline - agent

agent :定义pipeline执行节点
必须出现的指令
参数

any:可以在任意agent上执行pipeline
none:pipeline将不分配全局agent, 每个stage分配自己的agent
label:指定运行节点的Label
node:自定义运行节点配置,

指定 label
指定 customWorkspace

docker:控制目标节点上的docker运行相关内容

Declarative Pipeline - agent 代码举例

pipeline {
    agent {
        label 'master'
        customWorkspace 'myWorkspace'
    }
}

4、Declarative Pipeline - stages

必须出现的指令
无参数
包含一个或多个stage的序列,Pipeline的大部分工作在此执行;
每个Pipeline 代码区间中必须只有一个stages

5、Declarative Pipeline - stage

必须出现的指令
无参数
包含在stages中
Pipeline完成的所有实际工作都需要包含到stage中
需要定义stage的名字

6、Declarative Pipeline - steps

必须出现的指令
无参数
具体执行步骤,包含在 stage 代码区间中

7、Declarative Pipeline - stages, stage, steps 代码举例

 stages {
    stage('pull source code'){
        steps {
            echo 'pull source code'
            sleep 5
        }
    }
 }

8、代码演示

pipeline {
    agent any
    
    stages {
        stage("pull source code"){
            steps {
                echo "pull source code"
                sleep 5
            }
        }
        
        stage("build"){
            steps{
                echo "build source code"
                sleep 5
            }
        }
        
        stage("test"){
            steps{
                echo "run unit test"
            
            }
        }
        
        stage("deploy"){
            steps{
                echo "deploy to the website"
            
            }
    }
}
}

持续集成/持续交付——JenkinsFile详细使用教程
持续集成/持续交付——JenkinsFile详细使用教程

持续集成/持续交付——JenkinsFile详细使用教程

四、JenkinsFile语法参数post

post :定义Pipeline或stage运行结束时的操作
不是必须出现的指令
参数:

always:无论Pipeline运行的完成状态如何都会运行
changed:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行
failure:仅当当前Pipeline处于“失败”状态时才运行
success :仅当当前Pipeline具有“成功”状态时才运行
unstable:只有当前Pipeline具有“不稳定”状态才能运行
aborted:只有当前Pipeline处于“中止”状态时才能运行

案例1-执行失败

pipeline{
    agent any
    
    stages {
        stage('Test'){
            steps{
                echo "This is test code"
                sleep 2
                sh 'exit -1'
            }
        }
    }
    
    post{
        always{
            echo 'say goodby'
        }
        success{
            echo 'This is success exit'
        }
        failure{
            echo 'This is failure exit'
        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

案例2-执行成功

pipeline{
    agent any
    
    stages {
        stage('Test'){
            steps{
                echo "This is test code"
                sleep 2
                sh 'exit 0'
            }
        }
    }
    
    post{
        always{
            echo 'say goodby'
        }
        success{
            echo 'This is success exit'
        }
        failure{
            echo 'This is failure exit'
        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

五、JenkinsFile 语法参数 options

options :定义pipeline 的专有属性
不是必须出现的指令
参数:

buildDiscarder:保持构建的最大个数(历史构建个数)
disableConcurrentBuilds:不允许并行执行pipeline任务
timeout:pipeline 超时时间
retry:失败后,重试整个Pipeline的次数
timestamps:预定义由Pipeline生成的所有控制台输出时间
skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage

1、正常情况

pipeline{
    agent {
        node{
            label 'docker_node'
            customWorkspace "pipelineWorkspace"
        }
    }
    
    options {
        timeout(time: 10,unit:"SECONDS")    //构建超过10s,就会超时
        buildDiscarder(logRotator(numToKeepStr:"2"))    //最多保留2个最新的构建
        retry(5)    //失败后尝试运行5}
    stages {
        stage('begin'){
            steps{
                echo 'hello pipeline begin'
                sleep 2
            }
            
        }
        stage('running'){
            steps{
              echo 'hello pipeline running'
                sleep 2  
            }
            
        }
        stage('finsh'){
            steps{
                echo 'hello pipeline finsh'
                sleep 2
                sh "exit 0"
            }
            
        }
    }
        
    post{
        always{
            echo 'say goodby'
        }
        success{
            echo 'This is success exit'
        }
        failure{
            echo 'This is failure exit'
        }
    }
        
    
}

控制台输出

Started by user admin
[Pipeline] Start of Pipeline
[Pipeline] node
Running on docker_node in /root/jenkins_mulu/workspace/pipeline_demo_options
[Pipeline] {
[Pipeline] ws
Running in /root/jenkins_mulu/pipelineWorkspace
[Pipeline] {
[Pipeline] timeout
Timeout set to expire in 10 sec
[Pipeline] {
[Pipeline] retry
[Pipeline] {
[Pipeline] stage
[Pipeline] { (begin)
[Pipeline] echo
hello pipeline begin
[Pipeline] sleep
Sleeping for 2 sec
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (running)
[Pipeline] echo
hello pipeline running
[Pipeline] sleep
Sleeping for 2 sec
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (finsh)
[Pipeline] echo
hello pipeline finsh
[Pipeline] sleep
Sleeping for 2 sec
[Pipeline] sh
+ exit 0
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
say goodby
[Pipeline] echo
This is success exit
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // retry
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // ws
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

2、异常情况

pipeline{
    agent {
        node{
            label 'docker_node'
            customWorkspace "pipelineWorkspace"
        }
    }
    
    options {
        timeout(time: 10,unit:"SECONDS")    //构建超过10s,就会超时
        buildDiscarder(logRotator(numToKeepStr:"2"))    //最多保留2个最新的构建
        retry(5)    //失败后尝试运行5}
    stages {
        stage('begin'){
            steps{
                echo 'hello pipeline begin'
                sleep 2
            }
            
        }
        stage('running'){
            steps{
              echo 'hello pipeline running'
                sleep 2  
            }
            
        }
        stage('finsh'){
            steps{
                echo 'hello pipeline finsh'
                sleep 2
                sh "exit -1"
            }
            
        }
    }
        
    post{
        always{
            echo 'say goodby'
        }
        success{
            echo 'This is success exit'
        }
        failure{
            echo 'This is failure exit'
        }
    }
        
    
}

持续集成/持续交付——JenkinsFile详细使用教程

六、JenkinsFile 语法参数 parameters

parameters :定义pipeline 的专有参数列表
不是必须出现的指令
参数:

支持数据类型:booleanParam, choice, credentials, file, text, password, run, string
类似参数化构建的选项

1、Declarative Pipeline - parameters 代码举例

parameters {
    string(name: 'PERSON', defaultValue: 'Jenkins', description: '输入的文本参数')
    choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
}

2、案例:以默认值构建

pipeline {
    agent{
        node{
            label 'docker_node'
            customWorkspace "myWorkspace"
        }
    }

    parameters{
        string(name:'PERSON',defaultValue:'Jenkins',description:'输入文本参数')
    }
    
    stages{
        stage('Test Parameters'){
            steps{
                echo "Hello ${PERSON}"
            }
        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

持续集成/持续交付——JenkinsFile详细使用教程

3、案例:非默认值构建

持续集成/持续交付——JenkinsFile详细使用教程

持续集成/持续交付——JenkinsFile详细使用教程

3、解决第一次运行失败的问题

pipeline {
    agent{
        node{
            label 'docker_node'
            customWorkspace "myWorkspace"
        }
    }

    parameters{
        string(name:'PERSON',defaultValue:'Jenkins',description:'输入文本参数')
    }
    
    environment{
        PERSON ="$params.PERSON"
    }
    
    stages{
        stage('Test Parameters'){
            steps{
                echo "Hello ${PERSON}"
            }
        }
    }
}

七、JenkinsFile 语法参数 env_tools(有问题)

1、Scripts pipeline: 环境变量定义与引用

环境工具变量的定义
设置位置: “Manage Jenkins”——> “Global Tool Configuration”

1.1、环境变量定义1: JDK Home的定义

持续集成/持续交付——JenkinsFile详细使用教程

1.2、环境变量定义2: Maven Home的定义

持续集成/持续交付——JenkinsFile详细使用教程

2、Script 代码中引用环境变量,调用java、maven工具

stage('env tools') {
    node('docker_node'){        
        //定义maven java环境
        def mvnHome = tool 'maven'
        def jdkHome = tool 'jdk11'
        
        //引用环境变量,配置PATH变量
        env.PATH = "${mvnHome}/bin:${env.PATH}"
        env.PATH = "${jdkHome}/bin:${env.PATH}"
        
        //调用java mvn 工具
        sh "java -version"
        sh "mvn --version"
    }
}

运行结果

持续集成/持续交付——JenkinsFile详细使用教程

八、JenkinsFile 语法参数 if-else

1、Jenkinsfile 语法二:Scripts pipeline

基于 groovy 语法定制的一种DSL语言
灵活性更高
可扩展性更好
Script pipeline 与 Declarative pipeline 程序构成方式有雷同之处,基本语句也有相似之处

持续集成/持续交付——JenkinsFile详细使用教程

2、Scripts pipeline: 流程控制之 – if/else

node {
    stage('Example') {
        if (env.BRANCH_NAME == 'master') {
            echo 'I only execute on the master branch'
        } else {
            echo 'I execute elsewhere'
        }
    }
}

stage('Build'){
    node {
        echo 'this is build stage.'
    }
}

3、采用master构建

持续集成/持续交付——JenkinsFile详细使用教程
持续集成/持续交付——JenkinsFile详细使用教程

4、采用非master构建

持续集成/持续交付——JenkinsFile详细使用教程

持续集成/持续交付——JenkinsFile详细使用教程

九、JenkinsFile 语法参数 try-catch

1、Scripts pipeline: 流程控制之 – try/catch

场景:异常处理,在运行程序的时候,不希望代码的错误,导致程序的退出
使用try进行捕获,使用catch对异常的代码进行处理

2、演示出现异常

stage('Test') {
    node{
        echo "This is test stage which run on the slave agent."

        try {

            echo "This is in the try block."
            
            sh 'exit 1'

        }catch (exc) {

            echo "Something failed, I'm in the catch block."

        }finally {

            echo "Finally, I'm in the finally block."

        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

3、演示正常

stage('Test') {
    node{
        echo "This is test stage which run on the slave agent."

        try {

            echo "This is in the try block."
            
            sh 'exit 0'

        }catch (exc) {

            echo "Something failed, I'm in the catch block."

        }finally {

            echo "Finally, I'm in the finally block."

        }
    }
}

持续集成/持续交付——JenkinsFile详细使用教程

十、JenkinsFile 语法参数 environment

1、Declarative Pipeline - environment

environment: 定义Pipeline或stage运行时的环境变量
不是必须出现的指令
无参数

2、Declarative Pipeline - environment代码举例

environment {
    hlw = 'hello world'
}

3、environment 运行演示

pipeline {
    agent  {
        node{
            label 'docker_node'
            customWorkspace "myWorkspace"
        }

    }

    environment {
        hlw = 'hello world'
    }

    stages {
        stage('Print environment_1'){
            steps {
                echo hlw
                sleep 1
            }
        }

        stage('Print environment_2'){
            steps {
                sh 'echo ${hlw}'
                sleep 1
            }
        }
    }

    post {
        success {
            echo 'goodbye pipeline success!'
            sleep 5
        }

        failure {
            echo 'ops!!! pipeline failed....'
            sleep 5
        }

        always {
            echo 'always say goodbye'
        }
    }
}

运行结果
持续集成/持续交付——JenkinsFile详细使用教程

十一、JenkinsFile 语法参数 triggers

1、Declarative Pipeline - triggers

triggers:定义了Pipeline自动化触发的方式
不是必须出现的指令
参数:

cron:接受一个cron风格的字符串来定义Pipeline触发的常规间隔
pollSCM:接受一个cron风格的字符串来定义 Jenkins 检查SCM源更改的常规间隔;如果存在新的更改,则Pipeline将被重新触发。

2、Declarative Pipeline - triggers 代码举例

triggers {
    cron('H/2 * * * *')
}

3、triggers 运行演示

pipeline {
    agent{
        node{
            label 'docker_node'
            customWorkspace "myWorkspace"
        }
    }

    triggers {
        cron('H/2 * * * *')
    }

    stages{
        stage('Test Parameters'){
            steps{
                echo "Hello"
            }
        }
    }
}

十二、Pipeline 总结

Pipeline 是 Jenkins 2.0之后推出的高阶工具
有了Pipeline之后,Jenkins任务可以实现从简单持续集成到全面CI/CD流水线升级的转变
可以选择在Jenkins 任务中填写Pipeline script
也可以选择利用源码库对Pipeline script进行管理
两种Jenkinsfile语法:Declarative Pipeline 与 Script Pipeline
语句上有相似之处,可扩展性不同,灵活性也不同
文章来源地址https://www.toymoban.com/news/detail-454195.html

到了这里,关于持续集成/持续交付——JenkinsFile详细使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 持续集成与持续交付:现代软件测试的变革之路

    在数字化时代,软件开发的速度和复杂性都在不断增加。为了满足市场的需求,企业需要更快、更高效地交付高质量的软件产品。在这样的背景下,持续集成与持续交付(CI/CD)成为了软件开发和测试的核心实践。 软件开发的快速变革与挑战 随着技术的进步和市场的变化,软

    2024年02月11日
    浏览(45)
  • 【网课平台】Day15.Devops:持续集成与持续交付

    一个软件的生命周期包括:需求分析阶、设计、开发、测试、上线、维护、升级、废弃。详细如下: 产品人员进行需求分析 设计人员进行软件架构设计和模块设计 每个模块的开发人员并行开发,设计接口、进行编码,并进行单元测试 开发完毕,将代码集成部署到测试服务器

    2024年02月05日
    浏览(44)
  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云计算 ✨文章内容:软件交付 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 持续集成(Continuous Integration,CI)和持续交付(Continuous D

    2024年02月10日
    浏览(62)
  • 人工智能系统的安全持续集成与交付

    作者:禅与计算机程序设计艺术 随着人工智能技术的快速发展,人工智能系统在各个领域得到了广泛应用,从智能助理、自动驾驶、医疗诊断到金融投资等,人工智能系统正在深入人类生活的方方面面。然而,人工智能系统作为一种复杂的软件系统,在开发和部署过程中也面临着诸

    2024年04月13日
    浏览(44)
  • DevOps:自动化部署和持续集成/持续交付(CI/CD)

    在现代软件开发领域,DevOps(Development和Operations的组合)已经成为一个不可或缺的概念。它代表了一种将软件开发和运维(Operations)紧密结合的方法,旨在提高软件交付速度、质量和可靠性。本文将深入探讨DevOps中的关键概念,特别是自动化部署和持续集成/持续交付(CI/C

    2024年02月07日
    浏览(67)
  • 持续集成交付CICD:GitLabCI上传Nexus制品

    目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI(引用系统变量) 3.添加if条件判断项目类型 4.优化GitLabCI(模板类) 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Package如何实现上传至本地仓库 (1)环境 表1 主机 主机 架构 版本 IP 备注

    2024年02月04日
    浏览(47)
  • 什么是CI/CD:持续集成与持续交付?(InsCode AI 创作助手)

    在现代软件开发领域,CICD(Continuous Integration and Continuous Delivery)是一种关键性的开发实践,它有助于提高软件交付的质量和效率。本文将深入探讨CICD的定义、原理和重要性,以及如何在项目中实施CICD流程。 什么是CICD? CICD是一种软件开发实践,它将持续集成(CI)和持续交

    2024年02月09日
    浏览(58)
  • 【软件测试】- 将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中实现自动化测试和持续集成(CI)及Jenkinsfile 实现 Jenkins Pipeline 原理介绍

    将 Selenium 和 JMeter 测试脚本集成到 Jenkins 中是实现自动化测试和持续集成(CI)的关键步骤。以下是详细的集成过程: 1、准备工作 安装 Jenkins : 确保您已经在服务器上安装了 Jenkins。 可以从 Jenkins 官网 下载并安装。 安装必要的插件 : 在 Jenkins 中安装所需的插件,如 Git 插

    2024年02月04日
    浏览(73)
  • 这才是自动化测试,资深测试构建持续交付体系(高质量)持续集成...

    软件测试-自动化测试 Python自动化测试:https://www.bilibili.com/video/BV16G411x76E/ 无论是保障质量,还是提升效率,都需要某些持续的能力来支撑他们。 这种支撑能力,可以看作是一种工厂化的流水线能力,业内通常将其统称为持续交付。 从质量保障的角度总体来说,可以将其分为

    2024年02月05日
    浏览(55)
  • 【Jenkins】持续集成与交付 (六):Gitlab代码托管服务安装

    💖The Begin💖点点关注,收藏不迷路💖

    2024年04月28日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包