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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)