jenkins介绍部署及三种构建方式配置

[隐藏]

1.前言

1.1.jenkins介绍

jenkins是基于java开发的一种持续集成工具,用于监控持续重复的工作,功能包括。

1、持续的软件版本发布/测试

2、监控外部调用执行项目

Jenkins其实很早之前就有了,最近火起来的原因是,大家都在关注devops,关注如何来做持续集成,持续交付,如何来做CI/CD。Jenkins作为持续集成的工具,他其实只是一个平台或者是一个大的框架,它的工作完全就是依靠插件,也就是说你想使用什么功能,你就找到什么样的插件。

1.2.jenkins好处

1、我在工作中部署jenkins的最大好处就是每次在开发、测试环境代码,都无须运维部署,而是相关的开发人员,测试人员登录jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力。

2、安卓,IOS自动打包:虽然打包和运维关系不大,但是运维实现自动打包,使得产品同学,运营和测试同学可以每日验证产品开发进度以及及时反馈开发功能的方向是否正确,对公司贡献还是不小的。

1.3.我的jenkins实践

由于我们在使用jenkins之前,有自动化部署的shell脚本和上线流程,使用jenkins也就是让开发,测试人员可以通过一个web界面来执行脚本,实现部署。

我们公司一个产品线有四个环境,开发环境,测试环境,预上线环境,生产环境。除了生产环境之外都是通过jenkins来部署代码。

我们在生产实践中,jenkins使用到了下面三种部署方式:

jenkins触发式构建:用于开发环境部署开发人员push代码或者合并代码到gitlab项目的master分支,jenkins就部署代码到对应服务器。

jenkins参数化构建:用于测试环境预上线环境部署,开发push代码或者合并代码到gitlab项目的master分支之后,并不会部署代码,而是需要登录到jenkins的web界面,点击构建按钮,传入对应的参数(比如参数需要构建的tag,需要部署的分支)然后才会部署。

jenkins定时构建:用于APP自动打包,定时构建是在参数化构建的基础上添加的,开发人员可以登录jenkins手动传入tag进行打包,如果不手动打包,那么jenkins就每天凌晨从gitlab拉取最新的APP代码打包。

补充一下:jenkins不光可以用来部署代码,还可以这么玩(虽然我没有这么干过,但是你有兴趣可以试试):

1、各种服务的备份也可以放到jenkins上面,每天使用jenkins定时备份,还可以在jenkins看每天备份的输出信息。

2、各种开发需要找你的工作,比如同步生产数据库到开发环境,这个也可以放到jenkins上面,开发每次需要同步,就登录jenkins找到数据库同步的job,点击构建,就自动同步了。

1.4.jenkins使用前提

(1)得到领导的支持,我在公司推动jenkins部署APP自动打包,可以说是前段,后端,移动端,测试,产品等人员都需要沟通,这种情况下得到领导的支持在推动好处还是大大的。

(2)你们公司的代码需要一个分支管理规范,代码没有一个好的分支管理规范,自动部署是玩不了的。可以参考Git 分支管理最佳实践看看那种方式适合你们公司。

(3)使用jenkins之前,你需要有通过shell实现自动化部署代码的成功经验。

(4)持续集成最好有自动化测试,没有也行,但是最好让开发人员提供一些api的监控脚本,每次构建之后验证部署是否正常。

2.jenkins部署

2.1.下面内容介绍

(1)jenkins的安装配置

(2)jenkins插件自动/手动安装

(3)jenkins触发式构建配置

(4)jenkins参数化构建配置

(5)jenkins定时构建配置

(6)jenkins用户权限配置

2.2.环境介绍

操作系统:Centos 7.2

jenkins版本:2.33

gitlab版本:8.13.6

两台服务器:

192.168.100.10:jenkins Server

192.168.100.11 :gitlab Server

2.3.jenkins安装

(1)jenkins是java编写的,所以需要先安装jdk,这里使用yum安装。


1

yum -y install java-1.8.0 java-devel-1.8.0

jenkins还需要从gitlab拉取代码,所以我们需要安装git命令行客户端


1

[[email protected] ~]# yum -y install git

(2)安装jenkins


1

2

3

4

5

cd /etc/yum.repos.d/

wget http://pkg.jenkins.io/redhat/jenkins.repo

rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key

yum install -y jenkins

systemctl start jenkins

(3)访问jenkins
在浏览器打开输入http://IP:8080/访问jenkins。

为了安全考虑,需要解锁jenkins,把/var/lib/jenkins/secrets/initialAdminPassword文件内容复制到administrator password下方即可。


1

2

[[email protected] ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

2862d2ffc9aa40e1b80039e8ad9810ea

(4)选择安装的插件:只需要安装gitlab plugin,git plugin,还有ssh plugin插件即可,其他插件无须安装。

gitlab 和 git插件:我们的代码都放在gitlab上面,这两个插件用来做源码管理。

ssh插件:需要使用jenkins来执行shell命令。

创建admin用户:按照提示填写即可

密码创建完成之后就可以登录jenkins了。

3.插件安装

如果在安装jenkins的时候没有安装相关插件,可以按照如下方式安装(已经安装,则不需要)

1、安装gitlab插件,直接在系统管理>插件管理中搜索gitlab相关插件安装即可。

2、shell插件:还是刚才的位置搜索ssh 选择ssh plugin插件安装即可。

3.1.手动下载jenkins插件

插件下载地址:http://updates.jenkins-ci.org/download/plugins/

如果有插件一直安装失败的情况,可以从jenkins官网下载插件,然后导入到jenkins。

示例:我从官方下载gitlab-plugin插件到本地,然后导入到jenkins中。

在jenkins插件管理->高级选择上传插件进行安装。

4.Jenkins密钥配置

(1)jenkins生成密钥对
设置jenkins的shell终端为/bin/bash


1

2

[[email protected] ~]# grep jenkins /etc/passwd

jenkins:x:993:990:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash

登录到jenkins用户生成密钥


1

2

3

4

[[email protected] ~]# su - jenkins

bash-4.2$ ssh-keygen -t rsa

bash-4.2$ cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwIdUk3+V8aL2/oMfvwCxp5AiyctL4bnYFnsKOcQz8w/MuAehy9/EEeT0HNQCSs0NQ3veFurWlKUB4tntNA7bMcZS/UWBSXh2uAJQCMcXbIWfdngaQwVVP+s5WvDbtL5Jk6mQch22aIIw4JaJh4L8dl1oyviwoBgOnscXVC/kDWgFM4BrHC4QNyzt6PdtuzX3RkMa4w7bqDvUWMqIyRBScW1fbfJeAwAK1tCQ7ZjfAoTcWpmoBlurH1P6SuWR3rYIPyhGDqjPQnlohqSX/vCrLWoHoYazETHfW2azzzBSGqMeCw3hlbSV/12kRQv0kGfnbhmnHZ1CBgX23N3ktqtzL [email protected]

把这个密钥添加到gitlab还有jenkins服务器的root用户

为什么把jenkins公钥添加到root用户?
因为jenkins执行部署操作,会出现很多权限问题,一个一个解决比较麻烦(而且不同项目权限问题都不同),就算sudo授权也是需要授予最少10几条命令的权限,而且不能保证以后不会出现新的命令,所以我直接让jenkins用户通过root方式执行部署操作,简单粗暴。

(1)添加公钥到gitlab服务器,用来clone代码

添加完成之后从gitlab服务器clone下自己的工程,会在.ssh/known_hosts添加gitlab服务器记录


1

-bash-4.2$ git clone [email protected]:root/jenkins_test.git

(2)添加公钥到jenkins服务器root用户,用来执行部署脚本


1

2

-bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[email protected]‘s password:

5.jenkins触发式构建

(1)准备一个测试脚本,看开发如何提交代码就执行这个构建操作。


1

2

3

4

[[email protected] ~]# cat /shell/deploy/test/jenkins_trigger.sh

#!/bin/bash

echo "部署脚本被执行"

[[email protected] ~]# chmod +x /shell/deploy/test/jenkins_trigger.sh

注意:如果是生产配置,直接把这个脚本换成对应项目的上线脚本即可,jenkins配置无须修改。

(2)创建一个触发构建的项目,选择自由软件风格即可

(3)源码管理选择git,然后只需要在repository url中输入git仓库地址即可。

(4)构建,选择execute shell,执行部署脚本即可

(5)触发器配置:即gitlab有提交操作,则自动部署,这里只需要设置一个认证的token即可,gitlab调用触发器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

(6)在系统管理–>用户管理–>查看用户id和token,需要把用户id和API Token加入触发器中,做用户验证


根据触发器验证令牌和用户id+token会生成一个下面的url,只需要访问这个URL地址jenkins就会自动部署对应项目的代码。


1

http://admin:[email protected]:8080/job/jenkins_trigger/build?token=hehe

(7)gitlab配置webhooks,每次提交代码就访问这个url,执行构建

URL这里输入上面上面用户ID+API token+job token生成的URL地址即可。触发工作选择,push event,merge request event即可。

(8)在jenkins全局在jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。

(9)添加完成测试:点击test模拟提交操作,看看是否会执行自动构建

如果执行成功会返回如下显示,说明执行钩子成功

Jenkins查看,可以看到构建也是成功的。

6.jenkins参数化构建

(1)准备一个测试的脚本


1

2

3

4

5

6

#!/bin/bash

git_pro(){

  echo "拉取$1代码"

}

git_pro $1

(2)创建一个参数化构建的项目

(3)选择构建的参数:这里设置一个tag参数,就是每次执行job之前都需要传入这个tag

(4)设置执行部署的脚本

(5)选择创建的job执行构建

Tag处传入需要部署的tag即可

构建完成查看构建的结果

7.jenkins定时构建

定时构建一般用在安卓,ios打包,每天凌晨会拉取安卓,ios进行编译打包,并自动推送到共享。

示例:在上面的参数化构建示例上添加如下触发器,就是每天凌晨1:30分自动执行安卓或ios打包脚本,上面的参数化构建默认值是master就是每天从代码仓库的master分支拉取最新的代码打包。

8.Jenkins用户权限设置

现在各种job已经设置好了,但是如果开发测试人员需要部署一个tag到服务器进行测试,那么就需要登录jenkins,这个时候就需要给开发和测试人员创建一个可以执行job的用户,方法如下。

8.1.新创建一个用户

系统管理–>用户管理–>新建用户,按照提示填入信息即可

8.2.用户权限设置

系统管理–>Configure Global Security–> 给develop用户授权,主要给job build,cancel,read权限。用户登录jenkins就可以构建我们创建的job了。

转载请注明:西门飞冰的博客-专注于Linux运维 ? jenkins介绍部署及三种构建方式配置

时间: 2024-10-11 06:17:27

jenkins介绍部署及三种构建方式配置的相关文章

分布式锁简单入门以及三种实现方式介绍

前言 很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制. 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁.非公平锁.自旋锁.可重入锁.偏

CSS的三种定位方式介绍(转载)

在CSS中一共有N种定位方式,其中,static ,relative,absolute三种方式是最基本最常用的三种定位方式.他们的基 本介绍如下. static默认定位方式relative相对定位,相对于原来的位置,但是原来的位置仍然保留absolute定位,相对于最近的非标准刘定位,原来的位置消失,被后边的位置所顶替 下面先演示相对定位的案例 [html] view plain copyprint? <!DOCTYPE html> <html> <head> <

Apache HTTP Server 与 Tomcat 的三种连接方式介绍

Apache HTTP Server 与 Tomcat 的三种连接方式介绍 整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能.利用 Web 服务器来做负载均衡以及容错.无缝的升级应用程序.本文介绍了三种整合 Apache 和 Tomcat 的方式. 3 评论: 刘 冬 ([email protected]), 开发工程师, 2007 年 1 月 15 日 内容 首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomca

Kubernetes(四)部署的三种方式

Kubernetes部署的三种方式 Minikube  是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于日常尝试或者开发 部署地址  https://kubernetes.io/docs/setup/minikube/ Kubeadm 也是一个工具,提供Kubeadm init和kubeadm join,用于快速部署Kubernetes. 部署地址 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm

Ant、Gradle、Python三种打包方式的介绍

博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 今天谈一下Androdi三种打包方式,Ant.Gradle.Python. 当然最开始打包用Ant 很方便,后来转Studio开发,自带很多Gradle插件就用了它,然后随着打包数量越多,打包时间成了需要考虑的事,前两者平均打一个包要花费2-3分钟,打30个就要差不多2个小时:而前两者打包的思路主要是,替换AndroidManifest.xml的meta-da

2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式,所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求. M

vue.js三种安装方式

Vue.js(读音 /vju?/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合. 下面介绍三种 Vue.js 的安装方法: 独立版本 我们可以在Vue.js的官网上直接下载vue.js,并在html中通过<script>标签中引用.<script src = ../vue.js> </script> 开发环境不要使用最

使用JavaScript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二