CI/CD之jenkins

CI/CD简介

CI(Continuous integration持续集成):持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试
比如写个dockerfile,能不能通过gitlab或者jenkins来实现构建镜像和测试。
在这里插入图片描述
CD(Continuous Delivery持续交付) :是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
最后一步最好人工干预一下,否则草率的推到生产环境中是有很大的风险的。
在这里插入图片描述

jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

jenkins安装

软件下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安装jenkins及java开发环境,还有daemonize依赖项从清华的镜像站下载即可
在这里插入图片描述
开启jenkins
在这里插入图片描述
jenkins使用8080端口
在这里插入图片描述
网页访问http://192.168.122.12:8080,第一次登陆初始化较慢。
在这里插入图片描述
根据提示,进入目录,查看初始密码解锁jenkins
在这里插入图片描述
需要部署的主机能够上网,暂时不需要安装插件所以可以先离线配置跳过插件安装
在这里插入图片描述
先跳过
在这里插入图片描述
输入url,和浏览器上方输一样的就可以
在这里插入图片描述
开始使用jenkins
在这里插入图片描述
进入后界面如下
在这里插入图片描述
修改一下root用户密码
在这里插入图片描述
设置时区
在这里插入图片描述
重新用设置好的密码登录一下
在这里插入图片描述

安装jenkins插件

先上传ca证书

mkdir /var/lib/jenkins/update-center-rootCAs

wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt

chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs

在这里插入图片描述
按下图操作,管理插件
在这里插入图片描述
点击advace可以看到用的官方的更新站点
在这里插入图片描述
官方的太慢,我们使用下面的命令测试一下哪个站点比较快

[root@server2 ~]# curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash

清华的比较快,选择清华的站点
在这里插入图片描述
可以根据自己的测速换源
在这里插入图片描述
将清华的cdn输入后提交

https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/tsinghua/update-center.json

到文件里查看也已经自动更改(也可以直接到文件里改),换源后记得点check now检查一下
在这里插入图片描述

安装中文插件

安装中文环境,操作如图
在这里插入图片描述
注意装完中文插件后要重启服务才能生效。

安装流水线插件

操作如图
在这里插入图片描述

安装gitlab插件

操作如图
在这里插入图片描述
回到管理界面会发现提醒我们当前只有一个master,会比较繁忙,应该构建一个分布式环境,设置代理,master只负责调度,给agent布置任务
在这里插入图片描述
可以修改master的任务数,按下图操作
在这里插入图片描述
改为0就只能调度不能完成任务了,由于硬件限制,我这里就不做代理了
在这里插入图片描述

jenkins和gitlab联动

jenkins轮询检查gitlab代码变更

选择new item创建一个自由风格的新任务
在这里插入图片描述
到gitlab复制仓库地址
在这里插入图片描述
在任务设置里选择git输入仓库地址,添加失败,因为server2主机没有git工具
在这里插入图片描述
yum install -y git下载后刷新报了新的错误,因为远程仓库是加密的,需要ssh免密,要提供一个ssh私钥
在这里插入图片描述
在jenkins主机做免密
在这里插入图片描述
将公钥上传到gitlab
在这里插入图片描述在这里插入图片描述
选择添加jenkins,将私钥给jenkins,然后添加即可
在这里插入图片描述
注意分支填写要和仓库端的分支名一致
在这里插入图片描述
轮询就是隔一段时间到代码仓库看一下有没有更新
在这里插入图片描述
查看构建历史,查看控制台输出
在这里插入图片描述
输出正常,如果在仓库下创建新的文件,过一会查看就会更新
在这里插入图片描述

使用webhook实时检查gitlab代码变更

我们在网上做的工作,大部分其实就是事件,webhooks 已经成为了连接系统的主要方式,不管是用户创建、支付成功、DockerHub 镜像推送或者 Git 仓库上的合并请求,这些都是非常有用并且轻量级的共享信息的方式。
webhook 是应用给其它应用提供实时信息的一种方式。信息一产生,webhook 就会把它发送给已经注册的应用,这就意味着你能实时得到数据。不像传统的 APIs 方式,你需要用轮询的方式来获得尽可能实时的数据。这一点使得 webhook 不管是在发送端还是接收端都非常高效。由于大部分服务提供商对 API 的访问有一定限制,所以要么采用 webhook 方式,要么采用传统的轮询方式,不过这样客户端数据会有一些(或者比较多的)滞后。上面的图是用户发起的一个典型的支付流程的示例。

在gitlab端到管理中心设置
在这里插入图片描述
允许外发请求
在这里插入图片描述
再到jenkins端取消轮询的方式,改为使用GitLab webhook的方式提供实时信息
在这里插入图片描述
选择高级的,产生一个私密token并复制然后保存
在这里插入图片描述
到gitlab将token粘贴上去,并将 GitLab webhook URL: http://192.168.122.12:8080/project/demo写入,然后点击添加webhook即可,触发来源我们只选择推送事件
在这里插入图片描述
webhook创建成功测试一下
在这里插入图片描述
这时到jenkins查看就会有自动化构建的列表出来
在这里插入图片描述
在本地仓库修改一下文件推上去验证一下
在这里插入图片描述
jenkins这边已经收到状态更改,又构建了列表
在这里插入图片描述
实际生产环境中轮询和webhook可以同时使用

推送dockerfile文件自动构建镜像

原理过程阐述:
user写好dockerfile -> git push (dockerfile) -> gitlab -> webhooks实时更新 -> 事件触发tigger -> 触发jenkins -> 调用插件docker plugins -> 构建镜像build images -> 推到harbor镜像仓库push harbor
需要jenkins主机下载好docker并准备好一个镜像,jenkins也要下载好docker的插件;
仓库端写好dockerfile并提交上传到gitlab;
harbor仓库的证书要记得给jenkins。

新增agent节点

前面一直是在master上部署任务,这样当任务多起来的时候master会比较繁忙,所以添加一个agent节点,master节点只负责调度任务,agent来执行任务。

新建一个server3虚拟机作为agent端,安装git和jdk

[root@server3 ~]# rpm -ivh jdk-8u171-linux-x64.rpm
[root@server3 ~]# yum install -y git

jenkins安装agent插件
在这里插入图片描述
把master节点的任务数量设为0,这样master端就不能部署任务了,只负责调度
在这里插入图片描述
创建新节点
在这里插入图片描述
按下图操作添加agent节点的信息,启动方式为ssh
在这里插入图片描述
添加ssh证书
在这里插入图片描述
输入server3用户名和密码即可
在这里插入图片描述
不验证的意思就是在ssh连接的时候不会问你yes or no
在这里插入图片描述
agent添加成功
在这里插入图片描述
重新构建demo任务
在这里插入图片描述
任务会在agent上创建
在这里插入图片描述

jenkins用户管理

之前一直使用的root账户,具有所有权限,实际中应该使用普通用户,并且权限进行一定的限制

添加基于角色控制的插件
在这里插入图片描述
点击管理用户面板
在这里插入图片描述
新建一个普通用户
在这里插入图片描述
使用该新建用户身份登录,会发现该用户是有所有权限的
在这里插入图片描述
这是因为安全设置里登录用户可以做任何事情
在这里插入图片描述
改为基于角色的策略
在这里插入图片描述
到面板点击管理和分配角色
在这里插入图片描述
管理角色
在这里插入图片描述
添加全局角色,users,权限只有读;添加项目角色demo,可以看凭据,可以读写运行任务,对demo开头的项目都生效,最后记得保存
在这里插入图片描述
分配角色,最后记得保存
在这里插入图片描述
再以lucky用户的身份登录,会发现权限已经少了很多,因为上面我们并没有给全部的权限。现在就可以用普通用户的身份进行操作啦
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值