Docker CI: Jenkins Pipeline 介绍和实战
一、概述
基于 Docker 集成 CI 环境。涉及技术:Linux(Ubuntu 14.04), Docker, Jenkins, Git/Gitlab, Web/Httpbin, Python/Pytest, UI/Selenium, Robotframework, Grid Server, Appium 等。
架构图如下:
二、什么是Pipeline?
Jenkins Pipeline是一套插件,支持将连续输送Pipeline实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过PipelineDSL为代码创建简单到复杂的传送Pipeline。
通常,此“Pipeline代码”将被写入 Jenkinsfile项目的源代码控制存储库,例如:
pipeline {
agent any (1)
stages {
stage('build') { (2)
steps { (3)
sh 'make' (4)
}
}
stage('sita'){
steps {
sh 'python script.py'
junit 'reports/**/*.xml' (5)
}
}
}
}
- agent 表示Jenkins应该为Pipeline的这一部分分配一个执行者和工作区。
- stage 描述了这条Pipeline的一个阶段。
- steps 描述了要在其中运行的步骤 stage
- sh 执行给定的shell命令
- junit是由JUnit插件提供的 用于聚合测试报告的Pipeline步骤。
三、为什么使用Pipeline?
Jenkins从根本上讲是一种支持多种自动化模式的自动化引擎。Pipeline在Jenkins上添加了一套强大的自动化工具,支持从简单的连续集成到全面的连续输送Pipeline的用例。通过建模一系列相关任务,用户可以利用Pipeline 的许多功能。
Pipeline的功能和优点:
- 持久性:在jenkins的master按计划和非计划的重启后,pipeline的job仍然能够工作,不受影响。其实理解起来也很简单,jenkins的master和agent通过ssh连接,如果你知道nohup或disown的话,就可以理解为啥master的重启不会影响agent上的job继续运行。
- 可暂停性:pipeline基于groovy可以实现job的暂停和等待用户的输入或批准然后继续执行。
- 更灵活的并行执行,更强的依赖控制,通过groovy脚本可以实现step,stage间的并行执行,和更复杂的相互依赖关系。
- 可扩展性:通过groovy的编程更容易的扩展插件。
- 设计Pipeline = 设计代码,很优雅
- As Code:集中管理CI脚本、用代码库来管理脚本、从代码库直接读取脚本,从而可以将项目CI迅速拉起来!
四、Pipeline 实现 build & scan
一、conf 配置Pipeline各个需要执行的参数: qa.xxx.com-b-master.yaml
credentials_id: github-xxx-jenkins
git_base: git@github.xxx.com
# If the container is running on a host who needs to resolve qa.xindong.com
# differently, you may need to pass a host:ip mapping for the container to
# resolve qa.xindong.com correctly. This could be done by setting a global
# environment variable 'ADD_HOST'. e.g. qa.xindong.com:10.10.10.100
add_host