持续集成之jenkins基础

Jenkins基本概念
- 基于JAVA开源的自动化系统平台
  - 在servlet容器中运行,如apache tomcat
- 提供CI,CD任务及流水线的服务
  - 所有类型的任务:构建、测试、部署等
  - apache ant和apache maven项目以及任意shell脚本和windows批处理命令
- 支持各种SCM源码控制工具
  - git,subversion,cvs,perforce,clearcase,rtc等
- 丰富的插件生态系统支持功能扩展
  - 1400+插件,含SCM,测试,通知,报告,artifact,触发,外部集成等
- 基于web的管理和使用界面
- 源于Hudson
  - Hudson由Sum公司在2004年启动,第一个版本基于2005在java.net发布
  - 2010年11月期间,Oracle对Sun的收购,引起商标权之争
  - 2011年1月29日,项目名称从"hudson"改为"jenkins"



Jenkins的使用原因
- jenkins本身就是一个高度可配置的系统
- 由开发者主导、面向开发者、全开源
- 治理(独立董事会)和社区
- 稳定性
  - LTS长期支持发布线
  - 每三个月发布一次稳定版本
- 插件的平台
  - 1400多件插件

 

Jenkins的特点
- 免费且开源
- 与Jenkins共享了很多多代码,安装还是挺简单的关键的环境变量可以安全存储
- 支持多个SCM,包括SVM,Mercurial,Git
- 集成了Github和Bitbucket
- 高度可配置
- 资源和教程很多
- 安装运行简单
- 分布式的构建也能高效运行
- 可跨平台部署
- 很多高质量的插件
- 得奖无数
- 庞大的社区
释:SCM http://www.cnblogs.com/itech/archive/2011/08/02/2125032.html

 

Jenkins工作流程
创建一个项目时,操作选项
- 通用配置
  - 工作空间管理,参数化设置,工具配置等全局管理
- 源码管理
  - 配置代码源
- 构建触发器
  - 与版本控制服务器集成,自动触发构建
  - 或者基于其他项目生成轮询,定时构建
- 构建环境
- 构建
  - 运行shell脚本,python/groovy等脚本,ant/maven/gradle等
- 构建后操作
  - 制品归档
  - 发布JUnit测试结果和javadoc
  - 直接部署到生产或测试环境
  - 电子邮件(或即时工具IM等)通知相关人
  - 触发其他的子任务或者下游任务

 

Jenkins的使用对象
- jenkins是一个工具,任何人都可以很快上手
- 建议以下团队或个人掌握jenkins
  - 负责建设产品持续集成/交付流水线的人员(SCM,release/DevOps Engineer)
  - 领导敏捷团队的敏捷管理者,希望理解诸如持续集成/交付等概念
  - 在DevOps领域内探索
  - 想成为"jenkins developer"的开发人员、管理人员

 

Jenkins安装和运行
- 支持以下平台的OS
  - docker
  - war
  - macOS
  - Linux
  - Windows
  - Solaris,OmniOS,SmartOS

安装准备
- 最低硬件需求
  - 256MB内存
  - 1GB磁盘空间(Docker安装方式需要至少10GB)
- 推荐硬件需求
  - 1GB + 内存
  - 50GB + 磁盘空间
- 软件需求
  - Java 8 -JRE/JDK均可
  - 注:Docker方式无需单独安装java

(1).Docker方式
- macOS/Linux

docker run -u root --rm -d -p 8080:8080 --name jenkinsci \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean


下载完后执行
- docker exec -it jenkinsci bash

- windows

docker run -u root --rm -d -p 8080:8080 --name jenkinsci ^
-v jenkins-data:/var/jenkins_home ^
-v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

- 打开浏览器 访问http://localhost:8080
- 安装完成后根据向导进行初始化配置

(2).WAR文件安装方式 - 推荐使用
- 本方式适用于任何java的操作系统或者平台
- 下载最新的jenkins war包
  http://mirrors.jenkins.io/war-stable/latest/jenkins.war
- 运行命令

  java -jar jenkins.war #默认使用8080端口
  java -jar jenkins.war --httpPort=49001 #指定端口

- 打开浏览器访问:http://localhost:8080
- 安装完成后根据向导进行初化配置

(3).WAR文件安装方式 -Java servlet containers
- 本方式适用于Jenkins部署到已经在Java servlet container内
- 可以运行Jenkins的Java servlet container为
  - Glassfish
  - Tomcat
  - JBoss
  - IBM WebSphere
  - Jetty
  - Jonas
  - Weblogic
  - Apache Geronimo 3.0
  - Liberty profile
打开浏览器访问: http://localhost:8080
安装完成后根据向导进行初始化配置

bash-4.4# cat /var/jenkins_home/secrets/initialAdminPassword
f822a0557c364ab0a05a8bb77574a8d0

(4)、windows安装
- 下载最新msi安装文件
  http://mirrors.jenkins.io/windows/latest
- 解压文件,双击msi根据指示进行安装
- 打开浏览器 访问http://localhost:8080

 

如何安装插件
- 系统管理-插件管理-可选插件(有还没安装)
- 根据需要选择安装的插件
- 点击直接安装或下载待重启安装

 

job使用介绍
- job类型
- 配置SCM(source code management)
- git/svn
- 构建触发器

 

主要的Job类型
- freestyle project
  自由风格项目,jenkins最主要的项目类型
- maven project
  maven项目专用,类似freestyle,更简单
- multi-configuration project
  多配置项目,适合需要大量不同配置(环境,平台等)构建
- pipeline
  流水线项目,适合使用Pipeline(workflow)插件功能构建流水线任务,或者使用freestyle project不容易实现的复杂任务
- multibranch pipeline
  多分支流水线项目,根据SCM仓库中的分支创建多个pipeline项目

 

Freestyle项目
- General
  项目基本配置
  项目名字,描述,参数,禁用项目,并发构建,限制构建默认node等
- Source code managemet
  代码库信息,支持Git,Subversion等
- Build Triggers
  构建触发方式
  周期性构建,poll scm,远程脚本触发构建,其他项目构建结束后触发等
- Build Environment
  构建环境相关设置
  构建前删除workspace,向Console输出添加时间戳,设置构建名称,插入环境变量等
- Build
  项目构建任务
  添加1个或者多个构建步骤
- Post-build Actions
  构建后行为
  Artifact归档,邮件通知,发布单元测试报告,触发下游项目等
注:restrict where this project can run 限定这个项目只能在某个节点上运行

 

Source Code Manaagement
- git
- Subversion
- 其他80+插件支持其他SCM系统

 

Git 全局配置
- Build Node上安装Git tool
- Global Tool Configuration配置

 

常用的Triggers
- Build periodically
  设定类似Cron周期性时间触发构建
- Poll SCM
  设定类似Cron周期性时间触发检查代码变化,只有当代码变动时才触发构建
- Hooks
  gitlab hooks
  github hooks
- Events
  Gerrit events 时件触发

 

安全管理策略
- 安全概述
- 认证和授权
- 访问控制
- 忘记密码处理

 

安全概述
1.X默认配置下,没有开启安全检查(任何人都可以去查看)
2.X默认开启安全检查
Jenkins提供了两种维度的安全策略
- 用户认证
  Security Realm(安全域):决定用户名和密码,且指定用户属于的组(允许的登陆用户)
- 权限控制
  Authorization Strategy(授权策略):分配用户执行某些操作的权限
如何进入Jenkins安全控制界面:
  系统管理(manage jenkins)-->configure global security -->启用安全(enable security)

访问控制详述:
安全域:
Jenkins专有用户数据库:公司中用户比较少的情况
公司规模使用人员多推荐使用AD或者LDAP
Servlet容器代理:比较老的或者容器代理的使用

授权策略:
Role-based strategy:设置创建一定的用户策略,针对不同的用户指定不同的角色,进行不同权限管理
任何用户可以做任何事(没有任何限制):即使没有登陆
安全矩阵:设置一个安全的矩阵,比较复杂,推荐使用
登陆用户可以做任何事:即使是管理员的操作
遗留模式:旧版本使用
项目矩阵授权策略:比较细的授权策略,创建项目的admin可以创建一些比较细的项目级权限限制

 

忘记密码的处理
如果权限设置错误,或者忘记密码,导致admin自己都无法登陆Jenkins的处理
- 命令行停止Jenkins
- 先备份$JENKINS_HOME中的config.xml
- 用编辑器打开$JENKINS_HOME中的config.xml
- 将<useSecurity>true</useSecurity>元素中的true改为false
- 将<authorizationStrategy>和<securityRealm>元素的内容删掉
- 命令行启动Jenkins

 

jenkins分布式构建
描述: 是一个master/slave的方式创建,通过tcp进行通信,对于master要求并不高,可以使用vm,container,服务器等做master或slave

配置分布式构建
1.在master创建分布式构建的节点
  - 系统管理-管理节点-新建节点
  - 标签(输入规范的名称)
  - 注意4种的启动方法
    - java web start: docker或k8s使用比较多
    - execution of command on the master
    - slave agents via ssh
2.配置分布式构建
  - job的配置页面-General
  - Restrict where this project can be run 限定项目只能在某个节点上运行,如ios的项目只能在某一类的服务器中运行
  - 输入标签

 

规范项目必要配置
注:本规范尤其适用于较多项目共同一jenkins的场景
- 项目命名规范
- 设置项目描述
- 设置历史构建清理规则(节约磁盘空间)
- 设置构建节点Label
- 邮件通知
修改默认显示语言:https://www.jianshu.com/p/f94d617e260e

 

常用插件
- Jenkins定时的备份:ThinBackup(备份在远程服务器)
- 邮件发送插件:Email Extension Plugin
- 空间清理扩展插件: Distributed Workspace Clean plugin
- Android/IOS设备管理
  - Android Device connector plugin
  - IOS Device connector plugin

 

posted @ 2018-04-16 09:25  Reid21  阅读(248)  评论(0)    收藏  举报