【Jenkins】使用 Jenkins 的pipeline进行持续交付

背景

介绍 Jenkins Pipeline,该工具扩展了流行的 CD(Continuous Delivery) 应用程序以管理最复杂的软件管道并帮助您持续高效地交付。

Jenkins Pipeline

Pipeline 为 Jenkins 添加了一套强大的自动化工具。它支持从简单的持续集成任务到全面的持续交付管道的软件交付。构建、测试和交付每个应用程序的步骤成为应用程序本身的一部分,存储在 Jenkinsfile 中。

Jenkins Pipeline 提供了一种特定领域的语言来创建、编辑、查看和运行软件交付管道。所有经验水平的用户都可以使用 Jenkins 随附的交互式工具快速创建 Jenkins Pipelines。

Jenkins Pipeline Visualization 

Jenkins Pipelines 最好通过 Jenkins Blue Ocean 用户界面进行可视化。Jenkins Blue Ocean 用户界面专注于持续交付管道和现代开发工具的期望。只需单击一下,用户就可以在用于管理任务的传统 Jenkins 页面和 Blue Ocean 之间切换以编辑、监控和运行他们的管道。

Blue Ocean 和 Declarative Pipeline 专注于新用户和持续交付,旨在协同工作。它们使 DevOps 团队的所有成员都可以访问 Pipelines 的创建、审查和可视化。用户可以快速查看管道状态,直观地创建和编辑新管道,并个性化他们对重要管道的视图。他们可以通过分支和拉取请求的本地集成轻松协作代码更改。

System Requirements

 Pipeline and Blue Ocean 适用于所有 Jenkins 2.x 版本. This Refcard is known to work with: 

  • Jenkins 2.204.5 or higher 
  • Pipeline 2.6 or higher 
  • Blue Ocean 1.22 or higher 

要启动一个预装了 Pipeline 和 Blue Ocean 的新 Jenkins: 

  • Ensure Docker is installed 
  • Run docker run -p 8888:8080 jenkinsci/ blueocean:latest 
  • Browse to http://localhost:8888/blue 

创建 Jenkins 文件

Blue Ocean 中的“创建管道”体验可帮助用户以清晰、简单的步骤创建新的管道。 

Pipeline Editor

Blue Ocean Pipeline Editor 允许用户在选定的存储库中快速设计和保存新的 Jenkinsfile。如果存储库中已经存在 Jenkinsfile,它将改为基于现有的 Jenkinsfile 创建一个新的 Pipeline。您始终可以通过选择一个分支并单击铅笔图标在编辑器中编辑此 Jenkinsfile。

Branches and Pull Requests

在 Blue Ocean 中创建新的 Pipeline 时,它​​还会为存储库创建一个新的 Multibranch Pipeline 项目。Jenkins 监控这个存储库并自动为每个包含 Jenkinsfile 的分支和拉取请求创建一个新的管道。删除分支、拉取请求或 Jenkinsfile 将自动删除关联的流水线。 

声明式管道可以根据分支或拉取请求调整其执行;根据用户输入调整执行;并发布测试结果并保存工件。 

Pipeline基础

管道使用 Jenkinsfile 中的定义来检查代理上的代码并运行定义的阶段和步骤。所有声明式管道都必须以管道开头,并包含这四个语法正确的指令:代理、阶段、阶段和步骤。这些将在以下部分中更详细地描述。这是一个最小管道的示例:

pipeline {
  agent any
    stages {
        stage('Build') {
            steps {
                sh 'npm -version'
            }
        }
    }
}

Steps and Stages

Steps:管道由构建、测试和部署应用程序的多个步骤组成。将“步骤”视为执行单个操作的单个命令。当一个步骤成功时,它会进入下一步。 

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        sh 'echo "Hello World"'
        sh '''
            echo "Multiline shell steps"
            ls -lah
            '''
            }
        }
    }
}

Agents

代理指令告诉 Jenkins 在哪里执行流水线阶段。大多数流水线步骤都需要适当配置的代理。 

到目前为止,所有示例都使用了 agent any,它允许 Pipeline 阶段在任何可用的代理上执行。在幕后,agent 关键字会导致一些事情发生: 

  • 块中包含的所有步骤都排队等待 Jenkins 执行。一旦执行器可用,步骤将开始执行。 
  • 分配了一个工作区,其中将包含从源代码管理中签出的文件,以及管道的任何其他工作文件

Environmental Variables and Credentials 

环境变量可以全局设置,如下例所示,也可以按阶段设置。如您所料,为每个阶段设置环境变量意味着它们仅适用于定义它们的阶段

pipeline {
    agent any
    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE = 'sqlite'
    }
    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

可以在构建脚本中引用 Jenkinsfile 中的环境变量来改变脚本的行为。Makefile、自动化测试或部署脚本可以使用环境变量的值来执行。 

环境变量的另一个常见用途是在构建或测试脚本中设置或覆盖“虚拟”凭据。Pipeline 允许用户快速安全地访问预定义的凭据,而无需知道其值,也无需将凭据存储在 Jenkinsfile 中。

Post Actions 

整个 Pipeline 和每个 Stage 可以选择定义一个 post 部分。Pipeline 的这个 post 部分在封闭的 Pipeline 或 Stage 的末端运行。它对于删除文件、归档结果或发送通知很有用。帖子部分支持许多附加条件块:总是、已更改、失败、成功和不稳定。它们根据阶段的状态在阶段结束时执行 

pipeline {
    agent any
    stages {
        stage('No-op') {
            steps {
                sh 'ls'
            }
        }
    }
    post {
        always {
            echo 'Finished'
            deleteDir() // Clean the workspace
        }
        success {
            echo 'I succeeded!'
        }
        unstable {
            echo 'I am unstable :/'
        }
        failure {
            echo 'I failed :('
        }
        changed {
            echo 'Latest job status differs from previous job status'
        }
    }
}

 Input

通常,在阶段之间传递时,尤其是环境阶段,您可能需要人工输入才能继续。例如,要判断应用程序是否处于足够好的状态以“提升”到生产环境,这可以通过输入步骤来完成。在下面的示例中,“健全性检查”阶段会阻止输入,并且在没有人确认进度的情况下不会继续进行。输入步骤不需要代理。它应该始终从使用 agent none 的阶段运行,这样它就不会不必要地保留代理。  

stage('Sanity Check') { 
    agent none 
    steps { 
        input 'Does the staging environment look ok?' 
    } 
}

Advanced Pipeline Settings

Refer to the Tutorials and Jenkins Handbook at jenkins.io/doc for more information on advanced topics such as Snippet GeneratorDeclarative Directive GeneratorShared LibrariesScript BlocksPipeline Options, and Parameterized Pipelines.

Additional Resources

refer to:Continuous Delivery With Jenkins Pipeline - DZone Refcardz 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值