前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零到一,构建你的持续交付流程(五):使用Jenkins Pipeline,让交付流程与自动化

从零到一,构建你的持续交付流程(五):使用Jenkins Pipeline,让交付流程与自动化

作者头像
御剑
发布2021-10-19 14:13:41
1.3K0
发布2021-10-19 14:13:41
举报
文章被收录于专栏:微言码道

本篇,我们将基于Jenkins Pipeline来搭建一个持续交付流程。

在这个交付流程中,我们将做到:

  • 支持手动触发启动这个交付流程
  • 整体流程为:从git代码控制开始,更新代码,编译与构建二进制包,制作docker镜像,重启服务

本篇为从零到一,构建你的持续交付流程第五篇,本系列其它文章为:

  1. 从零到一,构建你的持续交付流程(一):一个持续交付流程的构思
  2. 从零到一,构建你的持续交付流程(二):好的工程实践是必要的前提
  3. 从零到一,构建你的持续交付流程(三):搭建基于Jenkins+Docker的持续交付环境
  4. 从零到一,构建你的持续交付流程(四):利用Docker,将服务容器化

一)

首先,稍微解释下什么是Jenkins与Jenkins Pipeline吧。

Jenkins

Jenkins是自动化领域非常重要的一个产品,它是基于Java语言的一个开源免费的自动化产品。

使用Jenkins,你几乎可以将一切需要手动执行的各种任务自动化。Jenkins更重要的一点是它有许多官方或社区提供的插件,这些插件使得我们做自动化更方便与简单。

在自动化领域,还有一些类似travis的开源竞争者,另外像是github与gitlab等也提供了类似的机制,github叫github actions,但这些的影响力与知名度都无法与Jenkins相比。

Jenkins Pipeline

Pipeline的意思是管道,熟悉shell脚本的就比较清楚pipeline的概念。

形象的说,用流水线来形容它比较合适。我们都知道,在工业领域,流水线的方式是最高效的方式,一个任务OK后,流到下一个任务,如此往复,最终产品出来,整个流水线的动作基本都是自动化的,人则成为了流水线上没有太多价值的工具。

这就是Jenkins Pipeline,它可以帮助你将从源码更新代码到最终构建产品包,甚至是部署以及发布都以流水线的方式,一个步骤接一个步骤执行。

Jenkins pipeline是基于DSL领域特定语言而构建,这使得它的语法极为简洁与优雅。

如上图所示,持续交付的整个过程,就像一个流水线一样,一个步骤接一个步骤来执行。

二)

Jenkins Pipeline支持两种语法,一种是新的Declarative Pipeline,另一个是旧的存在时间更久的Scripted Pipeline

不管是你已经熟悉Scripted Pipeline还是没有,我个人都建议使用Declarative Pipeline,因为相比之下,它更简洁与优雅。

一个最简单的基于Declarative Pipeline的hello world实现是:

代码语言:javascript
复制
pipeline {
    agent any 
    stages {
        stage('编译项目') {
            steps {
                echo 'Hello world!' 
            }
        }
    }
}

这个脚本定义了一个名为编译项目的stage,也就是阶段,然后这个state就是输出了一个'hello world'字符。

这就是Jenkins Pipeline,它基于自身特定的DSL,整体上给人非常简洁与优雅的感觉。

如果与过往的shell脚本实现来相比,确实令人觉得更舒适。

三)

按照上述设计,我们希望从代码更新,到服务重启,都能自动化。

在我们的test-backend项目下,创建一个Jenkinsfile文件,内容如下

(直接访问或使用https://gitee.com/mydddOrg/test-backend 也行,这是我创建的public git)

代码语言:javascript
复制
   pipeline {
       agent any
  
       stages {
           stage('build') {
               steps {
                   sh 'gradle build -x test'
               }
           }
 
          stage('docker image build'){
              steps {
                  sh 'docker build -t test-backend:1 .'
              }
          }
 
          stage('start docker'){
              steps {
                  sh 'docker run -dp 8090:8080  test-backend:1'
              }
          }
      }
  }

简要解释

  • 行2:是指这个pipeline可以在jenkins的任务节点上运行(jenkins本身可以做集群,甚至包括不同的操作系统节点)
  • 行5:定义一个阶段,叫build。就是指构建
  • 行6: 定义build阶段的steps,也就是过程,在这我们就是调用gradle去编译构建这个项目
  • 行11,行17:定义其它两个阶段及其过程

从上面这个DSL脚本来看,整体上来说是非常简洁与易懂的。

把这个Jenkinsfile提交到你的git中。

四)

从上面这个定义可以看到,我们是把Jenkinsfile文件定义在git中,而不是jenkins中,这就是Jenkins Pipeline的一大优点,它的定义是跟着你的源码走,而不是在Jenkins中。

这意味着,你可以在同一分支定义不同的Jenkinsfile,比如Jenkinsfile-dev,Jenkinsfile-test,Jenkinsfile-prod等,不同分支也可以定义自己的Jenkinsfile,这样后面运行它的灵活性就非常强。不被特定部署限定。

因为Jenkinsfile是定义在git中的,所以Jenkins中的定义这个持续交付就非常简单了。整个过程如图所示

注意:在前面的文章中,我是基于Docker安装Jenkins,在你没有完全理解Docker前,还是先本地安装Jenkins为宜,这样没有docker in docker的问题。 以下都是基于本地Jenkins服务而非Jenkins in Docker

第一步,创建item

第二步:创建一个新的流水线

在新建的item中,我们选择流水线

第三步:配置git

因为我们的Jenkinsfile是放在git中,所以我们基于git来配置,这是最方便的

第四步:手动触发构建

执行完一段时间后,如果没有出现错误,你就可以见到下面这个图。这个图直观的展现了每个过程所用的时间及是否成功。

五)

最简单的一个自动化就是上面这样了,从你需要写的代码上来看,太简单了。

当然,仔细观察上面这个持续交付过程,它没有真正意义上并没有闭环。表现在:

  1. 它需要手动触发,这并不是一个好方式。至少比如在开发环境可以让触发的过程也自动化。
  2. 它没有通知。不管成功或失败,都没有通知。
  3. 基于docker重启服务的方式并不完善(docker run -dp 8090:8080 test-backend:1),这种方式相当于每次新建了个服务,这不是我们想要的,我们更希望它是restart方式的。
  4. 这只是后端一端,一个项目至少会包含后端+前端
  5. 阶段过程较少,类似单元测试,质量分析与检测及API文档或服务验证等过程都没有

也就是说,这个能跑起来的简单DEMO,还是没有闭环。至少要补充1-4这四个点,才真正算一个闭环的持续交付。

下一篇:从零到一,构建你的持续交付流程(六):一个闭环的持续交付

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微言码道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一)
  • 二)
  • 三)
  • 四)
  • 五)
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档