Jenkins with pipeline

2019年10月23日 · 1153 字 · 3 分钟 · Jenkins DevOps

背景

持续集成是一种更好的软件开发实践。

DevOps

DevOps 是一种软件开发方法。它将持续开发、持续测试、持续集成、持续部署和持续监控贯穿于软件开发的整个生命周期。

该方法用以提高软件开发质量,并缩短软件开发生命周期。从而以达到每个公司对软件产品的期望,交付出客户最满意的产品。

持续集成

开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

持续交付

持续交付在持续集成的基础上,将集成后的代码部署到测试环境或者预生产环境中。

持续部署

持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。

带来的好处

  1. 解放重复性劳动。主要包括集成、测试、部署等重复性劳动。
  2. 更快地修复问题。更早的获取变更,更早的进入测试,更早的发现问题,解决问题的成本显著下降。
  3. 减少了等待时间。缩短了从开发、集成、测试、部署各个环节的时间。
  4. 更高的产品质量。在代码质量检测环节对不规范或有错误的地方会进行标致,也可以设置邮件和短信等进行警告。

Jenkins

新建任务 -> 流水线

建议:通过 git 管理各组的 jenkinsfile

Pipeline

Pipeline 是基于 Groovy 实现的 CI/CD 领域特定语言(DSL),主要分为 Declarative PipelineScripted Pipeline

Declarative Pipeline 通过声明自己要做的事情来规范流程。

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        //
      }
    }
  }
}

Scripted Pipeline 则是旧版本中 Jenkins 支持的 Pipeline 模式,主要是写一些 groovy 的代码来制定流程。

node {
  stage('Build') {
    //
  }
}

通过 Jenkinsfile 的方式把流水线固定下来,这种方式比较方便管理和维护。

Android Jenkinsfile 示例

构建

构建方式

  • 手动触发
  • 定时触发
  • webhook 触发

webhook 触发

首先安装两个插件:

  • Gitlab Plugin
  • Gitlab Hook Plugin

配置触发器

添加 webhook

点击 test 按钮进行测试,返回状态码为 200 表示配置正确。

返回 500,需要用 root 帐号登录进 gitlab。

setting –> 勾上 Allow requests to the local network from hooks and services

返回 403,按照路径 Jenkins Manages -> Configure System,找到 GitLab 配置,去掉勾选。

配置输出文件

输出 apk

stage('存档') { // 这个演示的Android的项目,实际使用中,请根据自己的产物确定
    def apk = getShEchoResult("find ./app/build/outputs/apk -name '*.apk'")
    def artifactsDir = "artifacts" //存放产物的文件夹
    sh "mkdir ${artifactsDir}"
    sh "mv ${apk} ${artifactsDir}"
    archiveArtifacts "${artifactsDir}/*"
}

配置专项指标

  • JUnit Test
  • Checkstyle
  • FindBugs
  • Lint
  • PMD
stage('代码分析') {
    sh "./gradlew test"
    junit 'app/build/test-results/**/*.xml'
}

建议: 每天定时跑一次专项检测并发邮件

配置结果通知

邮件通知

配置邮件通知

配置发件人

配置发件代码

stage('通知负责人') {
    emailext body: "" +
            "项目: ${BUILD_URL} \n" +
            "单元测试报告: ${BUILD_URL}testReport\n",
            subject: '构建结果通知【成功】',
            to: "${EMAIL}"
}

收到构建邮件

钉钉

系统优化中,无法使用

其他

MutiBranch Pipeline

当一个仓库含有多个分支,需要为每个分支分别创建构建任务的时候,可以使用此插件。

Blue Ocean

Blue Ocean 是一种全新的、现代风格的 pipeline 用户界面。

安装以下插件:

  • Blue Ocean
  • Blue Ocean Pipeline Editor

app-host 内网应用分发

应用内网发布 | iOS OTA (Over-the-Air) | APP publish website like fir.im | 适用于企业 iOS & Android 内网发布测试使用,方便管理和分发 APP 包

Github 地址

参考