Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤

  1. 开发
  2. 提交
  3. 编译
  4. 测试
  5. 发布

有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动化完成的,具体的,当你完成了提交,Jenkins会自动运行你的编译脚本,编译成功后,再运行你的测试脚本,这一步成功后,接着它会帮你把新程序发布出去,特别的,在最后一步,你可以选择手动发布,或自动发布,毕竟发布这件事情,还是需要人为的确认一下比较好。简而言之

Jenkins可以帮你在写完代码后,一键完成开发过程中的一系列工作

使用Jenkins的好处显而易见,它减少了你的重复劳动。更重要的是,一个团队的开发流程一开始是不一致的,不一致往往会带来各种各样的问题,最终体现在软件的质量或开发效率不够高,而Jenkins会帮你规范大家的行为,从而避免一系列的问题。

安装

Jenkins安装非常简单,以CentOS为例,执行以下命令即可

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum -y install jenkins

值得注意的是,如果你的操作系统是CentOS,且运行的是GCJ版本的java,则需要做一下更新

$ java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.6 20110731 (Red Hat 4.4.6-3)
$ sudo yum remove java
$ sudo yum install -y java-1.7.0-openjdk
$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.1.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

如果你的Jenkins使用git作为数据传输的管道,那么的所有Jenkins节点都要安装git

$ sudo yum install -y git

设置git账户

$ git config --global user.name "yourname"
$ git config --global user.email "yourmail"

配置

安装成功后,配置文件在/etc/sysconfig/jenkins下,默认端口为8080,你需要设置一下防火墙,让该端口可以被外部访问到

设置允许开机启动

$ sudo chkconfig jenkins on

确保系统中有一个jenkins账户,如果没有则需要创建,理论上安装了Jenkins后,会自动创建该用户。

然后创建ssh密钥,密钥被用来在多个节点中进行免密访问,同时帮助打通git数据通道。在这之前要确认jenkins用户的home目录是否有效(在下面的例子中home/var/bin/jenkins),并切换到jenkins用户下

$ grep jenkins /etc/passwd
jenkins:x:496:496:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
$ su jenkins
$ cd ~
$ pwd
/var/lib/jenkins

创建非对称密钥,执行ssh-keygen命令,并一路回车

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fengyajie/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fengyajie/.ssh/id_rsa.
Your public key has been saved in /home/fengyajie/.ssh/id_rsa.pub.
The key fingerprint is:
The key's randomart image is:
+--[ RSA 2048]----+
| .... +=|
| ... .....|
| . ...o +|
| E. . *.|
| S .= + |
| . o + . |
| . o o |
| o o |
| o |
+-----------------+
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts

Jenkins是一个Master-Slave的架构,它可以把任务发布到不同的节点上执行,典型的应用场景是你有2个运行环境,一个是测试环境,一个是生产环境,你可以指定工作流中,哪些任务在测试环境中执行,哪些任务在生产环境中执行。当然,如果你没有这样的需求,也可以不配置Slave,这篇文章讨论的是有Slave的情况。

如果你需要配置Slave,在Slave节点上创建一个jenkins用户,并建立Master和Slave的授信关系(你需要将下面的host替换为具体的服务器IP,注意一定要保证Master和Slave之间是内网通信的,否则公网环境延迟较大,经常会出现Slave掉线情况)

ssh jenkins@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

同时,为了让jenkins可以执行更高权限的命令,所有节点都需要把jenkins用户设置为sudo用户。当然,我这是为了偷懒,更好的办法是设置一个专门的用户组,让这个组有一定的权限,然后把jenkins加入到这个用户组。

$ sudo grep jenkins /etc/sudoers
jenkins ALL=(ALL) NOPASSWD: ALL

以上为全部终端的配置,剩下操作基本都在Jenkins提供的web页面上完成

设置Slave

打开Jenkins页面http://hostname:8080,进入管理页面,点击New Node

配置Node,Labels是环境设置,例如开发环境,测试环境,编译环境等,后续可以根据Lables值,指定具体的任务在某个环境中执行

设置Master到Node间的授信方式

成功后,可以在控制台看到新增的Node

创建Pipeline

基本环境搭建好后,我们来配置一个工作流亲自感受一下

工作流在Jenkins中被称为pipeline,pipeline的运行行为由用户自己定义,定义的内容存放在一个Jenkinsfile文件中,并将该文件存放在git仓库的根目录,大致的流程如下:

  1. 用户将代码提交到git
  2. Jenkins从git拉取最新代码
  3. 读取根目录下的Jenkinsfile文件,并依次执行文件中定义的任务

下面是具体的配置步骤

编写Jenkinsfile

 pipeline {
agent {
label 'Production'
}
stages {
stage('Build') {
steps {
echo 'Building'
}
}
stage('Test') {
steps {
echo 'Testing'
}
}
stage('Deploy - Staging') {
steps {
sh './deploy staging'
sh './run-smoke-tests'
}
}
stage('Sanity check') {
steps {
input "Does the staging environment look ok?"
}
}
stage('Deploy - Production') {
steps {
sh './deploy production'
}
}
} post {
always {
echo 'One way or another, I have finished'
deleteDir() /* clean up our workspace */
}
success {
echo 'I succeeeded!'
}
unstable {
echo 'I am unstable :/'
}
failure {
echo 'I failed :('
}
changed {
echo 'Things were different before...'
}
}
}

以上是一个基本的Jenkinsfile模板,其中有以下几个关键概念

  • agent - 指定在哪台机器上执行任务,还记得上面配置Node时候填的Label吗,如果这两个label匹配得上,就在该Node中执行
  • stage - 组成工作流的大的步骤,这些步骤是串行的,例如build,test,deploy等
  • steps - 描述stage中的小步骤,同一个stage中的steps可以并行
  • sh - 执行shell命令
  • input - 需要你手动点击确定,Pipeline才会进入后续环节,常用于部署环节,因为很多时候部署都需要人为的进行一些确认
  • post - 所有pipeline执行完成后,会进入post环节,该环节一般做一些清理工作,同时还可以判断pipeline的执行状态

了解了这些后,你会发现写一个Jenkinsfile是一件很容易的事情。好了,现在要测试pipeline功能,把上面的代码中的sh换成echo,拷贝到你的Jenkinsfile中,并存放在git仓库的根目录

创建pipeline

回到Jenkins web页面,添加pipeline

如果你想每次git commit时自动执行该pipeline,有两种方法,一种是让Jenkins对git进行轮询,每分钟检查git仓库有没有更新,如下配置

另一种方式是使用git提供的hook,该方式原理是git一旦提交,便会触发hook中的脚本,让脚本给Jenkins发送执行pipeline的指令,这种方式更优雅,但相应要做的事情更多一点,这里就不演示这种方法了,感兴趣的同学可以自己研究一下。

最后,我们需要设置git的地址,其中的授信设置,和上面说的Master到Node的授信设置一致

设置完毕后,一旦你的git仓库收到新的提交,就会触发这个pipeline的运行,以下这张图是上面Jenkinsfile例子的运行状态,可以看到当运行到Sanity check这一步时,需要你手动触发是否执行后面的操作。

下面我们来总结一下,这篇教程主要讲述了以下几个方面:

  1. Jenkins是什么,及它的应用场景举例
  2. 如何搭建一个Jenkins服务
  3. Jenkins Pileline是什么,我们如何定义一个Pipeline
  4. 如何具体的操作一个Pipeline

Have fun!

链接:https://www.jianshu.com/p/b524b151d35f

Jenkins使用简易教程的更多相关文章

  1. 生活科技两相宜:(一)Win7使用微软SkyDrive网盘简易教程

    今天得写一个Win7使用微软SkyDrive网盘的简易教程,主要是给我老婆看,顺便贴出来给大家共享一下:)    使用微软SkyDrive网盘有两个层次.一个是使用网页版,这个跟使用163或者QQ网盘 ...

  2. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

  3. Emacs简易教程

    Emacs简易教程阅读: 命令: $emacs 进入之后,输入: C-h t 这里,C-h表示按住[Ctrl]键的同时按h ####### 20090620 *退出: 输入“C-x C-c” *撤销: ...

  4. 文件上传利器SWFUpload入门简易教程

    凡做过网站开发的都应该知道表单file的确鸡肋. Ajax解决了不刷新页面提交表单,但是却没有解决文件上传不刷新页面,当然也有其它技术让不刷新页面而提交文件,该技术主要是利用隐藏的iFrame, 较A ...

  5. 【转】Delphi内嵌ASM简易教程

    Delphi内嵌ASM简易教程 作者:heiying2006-03-19 18:33分类:默认分类标签: 前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入 ...

  6. Ant 简易教程

    转载:http://www.cnblogs.com/jingmoxukong/p/4433945.html Ant 简易教程 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动 ...

  7. Intellj IDEA 简易教程

    Intellj IDEA 简易教程 目录 JDK 安装测试 IDEA 安装测试 调试 单元测试 重构 Git Android 其他 参考资料 Java开发IDE(Integrated Developm ...

  8. MetaProducts Offline Explorer使用简易教程

    MetaProducts Offline Explorer使用简易教程 by windtrace  20170419 最近想下载一个网站上的内容打包成chm文件,以便离线浏览,webzip太长时间不更 ...

  9. Zabbix实战-简易教程系列

    一.基础篇(安装和接入) Zabbix实战-简易教程--总流程  Zabbix实战-简易教程--整体架构图 Zabbix实战-简易教程--DB安装和表分区 Zabbix实战-简易教程--Server端 ...

随机推荐

  1. FFmpeg Basic学习笔记(3)

    视频叠加--画中画效果 overlay video filter 视频叠加比较常见的应用场景是台标的叠加,在画面左上角.右上角.左下角或右下角叠加台标. ffmpeg提供的overlay filter ...

  2. python调用.net动态库

    # python调用.net动态库 ### pythonnet简介------------------------------ pythonnet是cpython的扩展- pythonnet提供了cp ...

  3. iOS微信支付demo运行报错解决如下

    要接入微信支付的小伙伴,首先要下载一份官方demo(APP微信支付官方Demo下载),然后打开工程,准备大干一场. 1.编译报错 编译的时候居然直接报错了(orz) 错误提示: APP微信支付官方De ...

  4. java基础篇---文件上传(commons-FileUpload组件)

    上一篇讲解了smartupload组件上传,那么这一篇我们讲解commons-FileUpload组件上传 FileUpload是Apache组织(www.apache.org)提供的免费的上传组件, ...

  5. PHP数据库连接失败--could not find driver 解决办法

    数据库连接失败could not find driver在调试一个PHP程序时,报了这个错误, could not find driver 经过一番查找,结合自己的思考和实践,终于找到了问题所在. 原 ...

  6. 【Unity】自定义编辑器窗口——拓展编辑器功能

    最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾. 新建一个脚本: using UnityEngine; using System.Collections; using UnityE ...

  7. Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

    说明: 实现效果: 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现,更方便的实现图片和字体颜色的改变,更方便的通过RadioButton的点击事件来控制页 ...

  8. hive常用参数配置设置

    hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...

  9. Extjs4.x treepanel,treegrid 节点选择,选中某个节点

    //官方推荐 this.getModuleGrid().getRootNode().cascadeBy(function () { this.set("checked", fals ...

  10. python django查询12306火车票

    逢年过节,想坐个高铁票,都得上12306去买票,但用过的都会发现,它会把临近站点的也筛出来了.但有时我们压根就不会考虑买到临近站点的. 另一方面,在购票高峰期,有可能你要的出发站到目的站都没有票了,这 ...