5分钟搞定Jenkis
@
什么是持续集成
持续集成 Continuous integration ,简称CI
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能在不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成具有的特点:
- 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
- 需要有专门的集成服务器来执行集成构建;
- 需要有代码托管工具支持,例如Git以及可视化界面Gogs的使用
持续集成的作用:
- 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
Jenkins简介
Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。
Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
特点:
- 易安装:仅仅两个docker命令即可从官网下载直接运行,无需额外的安装,更无需安装数据库;
- 易配置:提供友好的GUI配置界面;
- 变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
- 支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是永久链接地址,因此,你可以在各种文档中直接使用该链接;
- 集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程中,干别的事情);
- JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
- 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
- 文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪个版本的jars文件等构建记录;
- 支持第三方插件:使得 Jenkins 变得越来越强大
Jenkins安装与启动
(1)执行安装命令,下载jenkins
docker pull jenkins/jenkins
(2)启动服务
docker run -p 8080:8080 -p 50000:50000 -v /mnt/data/jenkins:/var/jenkins_home --name "jenkins" jenkins/jenkins
若报错如下:
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
需要修改下目录权限, 因为当映射本地数据卷时,/mnt/data/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000
sudo chown -R 1000:1000 /mnt/data/jenkins
(3)访问链接 http://10.20.29.151:8080
若密码忘记,可进入容器,执行
cat /var/lib/jenkins/secrets/initialAdminPassword获取初始密码串。
若目录不存在,可使用find / -name "initialAdminPassword" -depth -print命令查找。
(4)安装插件
(5)新建用户
完成安装进入主界面
Jenkins插件安装
我们以安装maven插件为例,演示插件的安装
(1)点击左侧的“系统管理”菜单 ,然后点击

(2)选择“可选插件”选项卡,搜索maven,在列表中选择Maven Integration ,点击“直接安装”按钮

看到如下图时,表示已经完成

注:如果你的项目是GitHub、GitLib或是Go语言等项目,那么我想你都需要这么一个对应的插件来帮你干活。
全局工具配置
选择系统管理,全局工具配置

自动安装
Jenkins提供了两种工具配置的方式,我们还是以maven为例

第一种如上图,只需要选择自动安装和版本号就可以,同时Jenkins在右上角给出了一个解疑按键,可以通过该键看到说明和示例。
本地安装
相较于第一种方式,第二种方式相对麻烦一些,但好处是可以在以后打包的时候不必重新下载,缩短打包的时间。
下面就来教大家如何安装Maven与本地仓库:
(1)将Maven压缩包上传至服务器(虚拟机)
(2)解压
tar zxvf apache-maven-3.5.4-bin.tar.gz
(3)移动目录
mv apache-maven-3.5.4 /usr/local/maven
(4)编辑setting.xml配置文件vi /usr/local/maven/conf/settings.xml ,配置本地仓库目录,内容如下
<localRepository>/usr/local/repository</localRepository>
(5)将开发环境的本地仓库上传至服务器(虚拟机)并移动到/usr/local/repository 。
mv reponsitory_boot /usr/local/repository
其他示例:
(1)JDK配置

设置javahome为 /usr/java/jdk1.8.0_171-amd64
(2)Git配置 (本地已经安装了Git软件)

(3)Maven配置

代码上传至Git服务器
步骤:
(1)在本地安装git(Windows版本)
(2)在IDEA中选择菜单 : File -- settings , 在窗口中选择Version Control -- Git

(3)选择菜单VCS --> Enable Version Control Integration...

选择Git
(4)设置远程地址: 右键点击工程选择菜单 Git --> Repository -->Remotes...


(5)右键点击工程选择菜单 Git --> Add
(6)右键点击工程选择菜单 Git --> Commit Directory...
(7)右键点击工程选择菜单 Git --> Repository --> Push ...
任务的创建与执行
我们以最火的Java项目和Go项目为例,给大家分别演示如何构建项目和执行
Go项目
(1)回到首页,点击新建按钮 .如下图,输入名称,选择创建一个自由风格的项目,点击OK

(2)General管理,可以添加项目描述和GitHub项目路径,以及一些配置

(3)源码管理,选择GitHub



(4)构建触发器,配置触发规则,这里以定时和轮询为示例,配别设置为

定时构建:定时构建1次任务
轮询SCM:定时查看源码管理的代码是否更新,有更新则构建,否则不会构建
如图所示,定时构建为每间隔10分钟定时构建一次,轮询SCM为每5分钟轮询检测一次。
时间*号规则为: 分 时 日 月 周
(5)构建环境,配置控制台输出时间戳和指定Go语言版本

(6)构建,使用Shell脚本测试代码上传后的项目是否有效

Shell如下:
export GOPATH=$WORKSPACE/../ # 指定GOPATH路径,Go语言执行必须有GOPATH路径
export GOWORK=$GOPATH/src/github.com/Jenkins # 创建项目执行时的目录依赖结构
cp -rf $WORKSPACE/* $GOWORK/ # 使测试运行数据和源数据隔离
cd $GOWORK && go build # 进入项目目录并执行
命令解说:
$GOPATHGo 运行需要指定 GOPATH 也即项目运行路径
$WORKSPACE/var/jenkins_home/workspace/Jenkins
GOWORK创建符合代码依赖的执行目录
注:下载Go的插件在构建时,会自动为我们设置GOROOT,但不会指定GOPATH,因此需要指定
最后点击“保存”按钮
(7)执行构建,控制台查看输出


构建成功,也输出了WORKSPACE、GOPATH、GOROOT目录,说明配置生效。进入docker容器或是挂载目录查看是否有可执行文件:

除了上述方法,也可以通过shell配置docker等方式构建、部署、运行项目,还可以将项目配置到当前/其他服务器运行,更多配置方式就不一一陈述了,请自行挖掘。
JAVA项目
(1)回到首页,点击新建按钮 .如下图,输入名称,选择创建一个Maven项目,点击OK

(2)源码管理,选择Git

(3)Build

命令:
clean package docker:build -DpushImage
用于清除、打包,构建docker镜像
最后点击“保存”按钮
(4)执行任务
后续请参照Go项目的执行步骤。
注:现已在GitHub上对讲义和示例代码进行开源
5分钟搞定Jenkis的更多相关文章
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- 一分钟搞定AlloyTouch图片轮播
一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...
- 五分钟搞定Go.js
五分钟搞定Go.js 1.基于html5~因为Go.js是一个依赖于HTML5特性的JavaScript库,所以需要确保您的页面声明它是一个HTML5文档,当然需要加载库 <!DOCTYPE ...
- Spring Boot 返回 XML 数据,一分钟搞定!
Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...
- zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图 zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...
- zookeeper核心-zab协议-《每日五分钟搞定大数据》
上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...
- windows+mysql集群搭建-三分钟搞定集群
注:本文来源: 陈晓婵 < windows+mysql集群搭建-三分钟搞定集群 > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...
- 十分钟搞定pandas内容
目录 十分钟搞定pandas 一.创建对象 二.查看数据 三.选择器 十二.导入和保存数据 参考:http://pandas.pydata.org/pandas-docs/stable/whatsne ...
- HDFS-异常大全-《每日五分钟搞定大数据》
点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...
随机推荐
- PAT-2019年秋季考试-甲级
7-1 Forever (20 分) #include <bits/stdc++.h> using namespace std; int N,K,m,number[10]; multima ...
- Semaphore回顾
用途 在多线程访问可变变量时,是非线程安全的.可能导致程序崩溃.此时,可以通过使用信号量(semaphore)技术,保证多线程处理某段代码时,后面线程等待前面线程执行,保证了多线程的安全性.使用方法记 ...
- HTML+CSS的小实例
通过一个月以来对HTML5+CSS的学习.这篇随笔给大家来做一个简单的网页中常见的导航栏. 这些都称之为网页中的导航栏. 我简单的做了一个某宝和58同城的导航栏,供大家学习参考. 一.58同城导航栏: ...
- Ctrl + Shift + F7 ; F3、Shift + F3
pycharm 查找并高亮参数 选中某一参数,Ctrl + Shift + F7 高亮所有该文件中所有该参数 接下来, 按 F3 在所有高亮选择中向下移动一个, Shift + F3 在所有高亮选择 ...
- Spring AOP简介与底层实现机制——动态代理
AOP简介 AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想.AOP 是 OOP(面向对象编程 Object Oriented Programmi ...
- 简单http和https服务器python脚本
欢迎加入python学习交流群 667279387 工作经常要用到测试http和https协议,这里写了两个简单的脚本实现简单的http服务器和https服务器. http服务器代码 import s ...
- I/O中断原理
目录 I/O中断原理 前言 什么是中断 中断类型 硬件中断 软件中断 I/O中断流程 无中断 有中断 中断处理 相关文献 I/O中断原理 前言 在Windows内核原理-同步IO与异步IO和<高 ...
- java之JVM内存模型
简而言之: 基础数据类型,值是保存在栈中: 引用数据类型,值保存在堆中,栈中保存的是引用数据类型在堆中的地址: 方法区:保存所有的class和static变量:
- 大数据之Linux服务器集群搭建
之前写过一篇关于Linux服务器系统的安装与网关的配置,那么现在我们要进一步的搭建多台Linux服务器集群. 关于单台服务器的系统搭建配置就不在赘述了,详情见https://www.cnblogs.c ...
- 笔记||Python3之对象的方法
什么是对象的方法? python中的一切类型的数据都是对象. 对象:数据和方法 对象数据:如 a = 'sfd' 对象方法:其实就是属于该对象的函数 对象的方法调用:对象.方法 字符串对象常用的方法: ...