Jenkins使用简易教程

 
题图

Jenkins是一款能提升效率的软件,它能帮你把软件开发过程造成工做流,典型的工做流包括如下几个步骤php

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

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

Jenkins能够帮你在写完代码后,一键完成开发过程当中的一系列工做git

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

安装

Jenkins安装很是简单,以CentOS为例,执行如下命令便可shell

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,则须要作一下更新ruby

$ 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节点都要安装gitbash

$ sudo yum install -y git

设置git帐户服务器

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

配置

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

设置容许开机启动dom

$ 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
做者:冯雅杰 连接:https://www.jianshu.com/p/b524b151d35f 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索