什么是Jenkins

什么是Jenkins,第1张

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

黑马程序员的软件测试课程里详细的讲解了持续集成的相关技术。

方法/步骤

安装jenkins

参照官网wiki,如下图:

安装后的jenkin在/var/lib/jenkins启动关闭jenkins:

sudo /etc/initd/jenkins startsudo /etc/initd/jenkins stop

Jenkins安装完毕后,可以通过浏览器,例如19216816183:8080,此处IP地址为Jenkins所在机器的IP地址。

配置jenkins

Jenkins安装好之后,需要为其安装gitlab插件:在主面板上点击Manage Jenkins -> Manage Plugins,选择安装Gitlab Plugin和Gitlab Hook Plugin。

搭建gitlab源码服务器

参照官网wiki,如下图:

安装完之后默认是只能本机通过localhost访问的,修改/etc/gitlab/gitlabrb中的对应配置项如下:external_url ‘>

配置SSH key

由于jenkins需要从gitlab上拉取代码,通过ssh方式。所以需要在jenkins机器上安装git,并且将jenkins机器上生成的ssh密钥的公钥(id_rsapub中的内容)添加到gitlab的ssh keys中:

在jenkins安装机器上安装git

sudo apt-get install git

配置username和Email,生成ssh密钥

git config –global username “your name”git config –global useremail “your email”ssh-keygen -t rsa -C “10010@gmailcom”

拷贝公钥内容填到gitlab服务器

配置GitLab connections连接到gitlab拉取代码使用,配置证书,使用gitlab api token。token从gitlab中获取,在个人设置中有Access Token一栏,创建一个token,填入jenkins的系统管理 -> 系统设置 -> gitlab配置中。

Test Connection,显示success则表示配置成功。

测试集成环境

新建一个项目,源码管理选git,填入对应的仓库URL,配置 Credentials,这里可以选择用ssh username with private key(其他的我也没试成功过。。),输入用户名和对应的私钥即可

接下来构建触发器选择Build when a change is pushed to GitLab GitLab CI Service URL: …

添加hook

由于我们的jenkins任务由webhook事件来通知,所以需要将上面的CIservice URL添加到gitlab对应项目的Integrations配置中。

RUN

配置完之后apply,保存。jenkins任务就新建完成了此时我们在本地push代码到gitlab服务器,可以看到:成功地触发一次jenkins构建,效果如下:

至此jenkins+gitlab持续集成环境搭建完成!

jenkins # [2129+]版本之后,出于安全性考虑修改了API Token的规则,官方说明: Security Hardening: New API token system in Jenkins 2129+

这个改变包括:

所以如果你的Jenkins版本大于2129,那么除非你已经知道当前user的一个token,否则可以到user下的配置里去为你的应用生成新的api token:

比如我是admin user:

admin->configuration:

>

建议你这样试试看:

在每个stage{} 中, 用 post {} 上传日志

再整个 pipeline{} 末尾, 用 post{} 上传日志

这样做的好处:

层次清晰

可以聚合各个 stage 的日志, 如 robotframework log, build log

By Xiak

Jenkins 刚开始搭建的时候,我们惊叹,这也太方便了吧?功能还这么强,慢慢的,我们会发现对方的缺点了,嗯,恋爱的味道,不对,似乎扯远了,还是说回来 Jenkins 了。

我们很难想象 Jenkins ,这么庞大的一个应用,居然没有数据库。那配置在哪保存呢?运行日志了?构建数据了?等等这些都是需要保存的啊。

屏幕快照 2019-12-19 下午82910png 屏幕快照 2019-12-19 下午82910png

当jenkins job数量达到一定量级,访问量大时候,会非常卡顿,仿佛回到了零几年的时候,网页那么卡。

查原因我们会发现瓶颈在 I/O 。因为jenkins每次访问,都需要读取配置,都需要读写日志,这些都是以文件方式写入磁盘的,是 所有slave 节点 一台master 通信。

可是我们是没有办法做负载均衡的

当我们部署后端服务时候,肯定做 LB(负载均衡) , Jenkins master 因为只能单节点,啊,挂了master,所有slave都掉链子了。

配置 存储 master节点磁盘,嗯,还好,比较小

构建日志 存储在master节点磁盘,这个,百万行代码的编译日志几百M大小,每天N个业务构建M次,存储在master,哈哈,每天上班第一件事清磁盘?

构建产物 存储在master节点磁盘,这个,占磁盘,不安全

针对这种情况了,日志用 ELK ,产物放到到 对象存储

调度,一个好高深的话题,教材上学过 *** 作系统对进程的各种调度算法,什么 先入先出 最短耗时 最高优先级(PRI,NI) 等等,而类似的集群调度, k8s 可能是最常见的了,但是 Jenkins 对于任务调度这块,实际来讲,确实很弱, 虽然 调度 也是 Jenkins 的核心能力之一

k8s 里面有 node节点 概念, Jenkins 也有

k8s 里面有 pod 概念, Jenkins 没有,类似的, Jenkins 是限制 node 的最大并行个数

k8s 里面有调度器, 进行 Predicates Priorities 两个过程, Jenkins 算法很简单,默认就是调度到 最近一次成功节点 上。

这样会带来一个比较严重的问题,会导致 部分机器处于极度打满,部分机器确空转,资源利用率严重两级分化

针对这点,我们其实有两种小的补救。

一种是降低node节点并行数量,比如原来是最大限制是10,下降到2后,第三个任务,比如调度另一个节点了,缺点就是可能造成更多排队情况

一种就是利用插件了,比如插件 throttle-concurrents 会比较均匀分配 >

以上就是关于什么是Jenkins全部的内容,包括:什么是Jenkins、jenkins+git详细配置及使用方法是什么、如何获取jenkins api token等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10177943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存