Jenkins Pipeline

Jenkins Pipeline_第1张图片

SDLC

软件开发的生命周期SDLC(Software Development Life Cycle),它集合了计划、开发、测试和部署过程。

Jenkins Pipeline_第2张图片

主要分为以下五个阶段:

  • 需求分析
  • 设计
  • 实现
  • 测试
  • 进化维护

瀑布模型

Jenkins Pipeline_第3张图片

优势 劣势
简单医用和理解 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
当前一阶段完成后,您只需要去关注后续阶段 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险
为项目提供了按阶段划分的检查节点 瀑布模型的突出缺点是不适应用户需求的变化

敏捷开发

敏捷开发(Agile Development)核心是迭代开发(Iterative Development)与增量开发(Incremental Development)

迭代开发:将大的开发周期拆分为多个小周期。

增量开发:每个周期均增加一个用户可感知的完整功能。

每次版本均为一次小的瀑布模型,不遗漏每一个环节。

Jenkins Pipeline_第4张图片

优点:可以早期交付,降低风险。

CI

持续集成(Continuous integration)指的是,频繁地将代码集成到主干。

目的:让产品可以快速迭代,同事保持高质量。

Jenkins Pipeline_第5张图片

流程:

  • 提交
  • 测试(代码)
  • 构建
  • 测试(功能)
  • 部署
  • 回滚

好处:

  • 降低风险
  • 对系统健康持续检查
  • 减少重复性工作
  • 持续部署,提供可部署单元包
  • 持续交付可供使用的版本
  • 增强团队信心

CI/CD介绍:

  • 你知道什么是CI/CD吗?不懂?五分钟让你彻底理解! - 知乎
  • What Is a CI/CD Pipeline? - DZone DevOps

Jenkins安装配置

安装流程见官网

启动时,为了防止占用过高,可以配置启动参数。

修改jenkins(/etc/sysconfig/jenkins)配置文件,找到JAVA_OPTIONS参数

vim /etc/sysconfig/jenkins

JENKINS_JAVA_OPTIONS="-Djava.awt.headless"
 
# 修改成
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms256m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

具体参数根据自己的机器实际情况调整。

Jenkins Pipeline_第6张图片

若插件下载速度慢,也可以搜索使用国内镜像,提高下载插件速度。

打开jenkins目录中的default.json文件,一般在 /var/lib/jenkins/updates

cd /var/lib/jenkins/updates

sudo sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' default.json && sudo sed -i 's#www.google.com#www.baidu.com#g' default.json

Pipeline

Pipeline是Jenkins 2.0版本的精华所在,是帮助Jenkins实现从CI到CD华丽转身的关键工具!
Jenkins Pipeline_第7张图片

Pipeline的实现方式是基于一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins 2.0 Pipeline支持从代码仓库(Git/SVN)直接读取脚本,从而实现了Pipeline as Code的理念。

Pipeline的功能和优点:

  • 可暂停性:Pipeline基于Groovy脚本可以实现Job的暂停和等待用户的输入或批准然后继续执行。
  • 更灵活的并行任务:通过Groovy脚本可以实现Step,Stage间的并行执行,和更复杂的相互依赖关系。
  • 可扩展性:通过Groovy的脚本编程更容易按需扩展CI任务。
  • 优雅型性:设计Pipeline = 设计代码,非常符合程序员思维
  • As Code:集中管理CI脚本、用代码库来管理脚本、从代码库直接读取脚本,从而可以将项目CI迅速拉起来!

Pipeline 支持两种语法,Declarative(声明式)和Scripted Pipelin(脚本式)。

日志分割

配置日志分割工具

wget http://down.zimeitang.cn/package/tomcat/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && make install && echo "cronolog is ok"
which cronolog

构建示例

使用 Extended Choice Parameter 插件,同时启动多个项目

Jenkins Pipeline_第8张图片

Pipeline Jenkinsfile

 
  

deploy_microservice.sh

 
  

SonarQube

SonarQube 是一种自动代码审查工具,它可以帮助检测bug、漏洞、坏味道。

它可以和现有的工作流集成,比如Jenkins,集成至Jenkins时只需要安装有一个SonarQube Scanner插件,流程如下图所示。

Jenkins Pipeline_第9张图片

需要下载SonarQube Scanner插件,之后在全局工具配置中配置安装。(这里名称为 SonarQube-Scanner,下面流水线配置时会用到)
Jenkins Pipeline_第10张图片

之后在系统配置中,配置sonar的名称,地址以及token即可使用了。 (这里名称为 SonarQube,下面流水线配置时会用到)

Jenkins Pipeline_第11张图片

之后在自由风格的构建计划中就可以增加构建步骤,选择声呐扫描
Jenkins Pipeline_第12张图片

这里贴一段常用的配置

Java项目

 
  

如果构建时出现 Tasks support was removed in SonarQube 7.6. 错误。将Task to run清空。

Jenkins Pipeline_第13张图片

对应pipeline的模式,首先需要在项目根目录下创建 sonar-project.properties 文件,贴入上面的配置,之后在Jenkinsfile中使用。

stage('check code') {
    steps {
        script {
            // 配置sonar scanner的名称
            scannerHome = tool 'SonarQube-Scanner'
        }
        // Sonar环境名称
        withSonarQubeEnv('SonarQube') {
            // 具体可执行文件所在位置
            sh "${scannerHome}/bin/sonar-scanner"
        }
    }
}

docker

容器化部署

Jenkins Pipeline_第14张图片

构建计划

  1. jenkins pipeline 流水线
  2. 使用docker
  3. 接入sonarqube
  4. 使用k8s

未完待续。。。

你可能感兴趣的:(Linux,jenkins,运维)