in jenkins 持续集成 持续部署 CI CD pipeline ~ read.
Jenkins简介

Jenkins简介

什么是Jenkins

Jenkins是一个开源软件项目,是世界上最流行的自动化工具,并且提供了成千上百的插件来支持打包、部署等事情,可以用于自动化持续集成、自动化持续部署等。

安装

jenkins官网下载对应的操作系统的包,按步骤安装即可。

OS X

MAC机器可以很简单的使用以下命令来安装:

brew cask install jenkins  

Docker

最简单的安装方式当属Docker,使用以下命令即可安装:

docker pull jenkins  

以下命令即可启动jenkins,端口是49001,/var/jenkins_home是jenkins在本机的挂载目录:

docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home -t jenkins  

初始化

在浏览器中打开localhost:port,按步骤操作即可。管理员密码可以从jenkins的log中找到,如果是docker安装可通过以下命令查看log:

docker ps ## 查看docker container列表,找到启动的jenkins container id  
docker logs {jenkins container id}  

在最后会提示安装插件,可以根据自己的需要进行选择,或者安装推荐的插件。

插件安装好之后初始化完成。

组件

Jenkins的集群包括master、agent和executor。

master

master就是jenkins安装和运行的地方,它负责解析job脚本,处理任务,调度计算资源。

agent

agent负责处理从master分发的任务,操作实际上是通过executor来执行的。

executor

executor就是执行任务的计算资源,它可以在master或者agent上运行。多个executor也可以合作执行一些任务。

Pipeline

当我们需要创建一个较为复杂的job的时候,在老版本的Jenkins中一般使用“freestyle”的job来创建。在新版本的Jenkins中有了一个更加强大的插件-Pipeline,它使得我们在真正意义上有能力去定义和整个应用的生命周期,实现真正的CD(持续部署)。

Pipeline是通过Pipeline这个插件来实现的,使用Groovy作为DSL来定义整个workflow。通过定义一系列的步骤来实现从代码提交开始到发布的整个应用生命周期。

Step - 步骤

一个step是整个流程中的一系列事情中的一个独立的任务,step是用来告诉Jenkins如何做。

Node - 节点

在Pipeline中的context中,一个node是一个step,主要负责以下两个事情:

  1. 通过把它包含的子step加到Jenkins的构建队列中来调度它所包含的step;
  2. 给job创建一个工作空间。工作空间就是一个文件目录,这是为了避免跟资源相关的处理互相产生影响。工作空间是node创建的,在node里的所有step都执行完毕后会自动删除。

Stage - 阶段

stage是一个任务执行过程的独立的并且唯一的逻辑块,pipeline定义在语法上就是由一系列的stage组成的。每一个stage逻辑都包含一个或多个step。stage很好的从逻辑上将pipeline拆分为多个部分,并且从逻辑上给pipeline的执行可视化提供了支持。

其他

在Jenkins的插件中还有一些辅助Pipeline的插件,比如docker pipeline等。

如何定义pipeline

两种方式:

  1. 通过在Jenkins的页面上新建一个pipeline的job,并在里面定义job的脚本内容;
  2. 在项目所在的SCM下创建名为Jenkinsfile的文件,并在里面定义job的脚本内容。当在Jenkins页面上新建的pipeline的job中指定该SCM的路径时,jenkins会自动的根据这个file中的内容进行pipeline的配置。

以下是一个‘hello world’的jenkins pipeline的job定义:

node {  
   echo 'Hello World'
}

以下是控制台的输出log:

Started by user user_test  
[Pipeline] node
Running on master in /var/jenkins_home/workspace/test  
[Pipeline] {
[Pipeline] echo
Hello World  
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS  

pipeline并发

尽可能的定义并发的step,如下代码将同时执行集成测试和功能测试:

parallel 'integration-tests':{  
}, 'functional-tests':{
}

pipeline对多个branch的支持

pipeline会自动发现带有Jenkinsfile的branch并对之自动生成一个子任务。

pipeline的语法

在jenkins安装成功后可以通过Pipeline Syntax来进行学习。该网页预定义了一系列的代码生成器,可以通过选择一些参数并生成代码来学习pipeline的语法。

下面是一个样例:

node {  
    git 'https://github.com/joe_user/simple-maven-project-with-tests.git'//从github去代码
    def mvnHome = tool 'M3'
    sh "${mvnHome}/bin/mvn -B -Dmaven.test.failure.ignore verify"//执行maven命令
    archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
    junit '**/target/surefire-reports/TEST-*.xml'//生成测试报告
}

总结

  1. Jenkins是开源的应用最广泛的自动化服务器应用,支持CI, CD;
  2. Jenkins包含master、agent和executor;
  3. Pipeline是Jenkins上一个非常强大的插件,使用基于Groovy的DSL;
  4. Pipeline包含step、node、stage;
  5. Pipeline支持任务可视化;
  6. Pipeline的语法非常简单,并且非常强大,支持非常复杂的场景。
分享按钮