目录
一、jenkins简介
1、Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
2、Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
3、CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
二、jenkins持续集成
1.jenkins安装
准备新虚拟机lr3(分配至少2G内存)确保可以上网
一共需要下载三个文件,国内镜像网站下载软件包:点击
我们下载以下版本的jenkins
真机将jdk安装包发送给lr3
接着我们需要下载jenkins安装所需的一个依赖项daemonize;
首先安装 epel-release
安装 daemonize,这里加入两个参数;
yum-downloadonly用于下载所需要的软件包而并不真正的安装;
–downloaddir=dir/:表示将所下载的安装包放到dir目录(自定义)
真机将daemonize安装包传给lr3
lr3安装jdk、daemonize 和jenkins
开启服务
可以看到开放的8080端口
网页访问http://172.25.36.3:8080,第一次登陆初始化较慢
进入目录,查看初始密码
输入初始密码
选择插件安装
先不要选择插件,因为没有更新国内的下载源,速度会很慢
直接选择使用admin账户继续
保存并完成
修改密码
修改时区
设置完成后需要重新输入密码
2.插件安装
网页中在dashboard界面中选择manage jenkins,点击插件管理
选择advanced,这里要设置插件源地址
安装wget,先测试哪个源的速度比较快
通过下面命令测试哪个插件源速度快
我这里ustc快,因此更改镜像下载地址为ustc
创建更新源文件,并给定权限
lr3切换到/var/lib/jenkins目录下,查看hudson.model.UpdateCenter.xml文件内容,可以看到插件源已经修改成了ustc的源
对照网站,更改镜像拉取地址为ustc,点击测试
ustc:https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/ustc/update-center.json
腾讯:https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/tencent/update-center.json
清华大学:https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/tsinghua/update-center.json
阿里云:https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/aliyun/update-center.json
华为云:https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/huawei/update-center.json
然后可以下载中文插件
成功
安装流水线插件,Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施
成功
三、结合gitlab建立任务
1.轮询方式监控gitlab
创建一个项目
项目名为demo,选择自由风格
为项目配置gitlab私有仓库,安装gitlab插件,jenkins连接Gitlab代码仓库
可以看到新建的项目
Jenkins本机lr3安装git工具
创建密钥、查看公钥
把公钥给gitlab,使jenkins可以调用gitlab
复制私钥
配置demo项目
在源码管理一栏添加私有仓库地址
接下来添加证书
使用ssh的方式
输入描述、用户名称,并将刚才复制的私钥粘贴在此处
选择刚设定的证书
选择分支默认为master(与gitlab中一致)
选择触发器的类型为轮询,* * * * * 表示每分钟查看一次gitlab的代码变化,执行的命令为简单的查看
一分钟后查看控制台
输出正常
在/var/lib/jenkins/workspace就可以同步gitlab的文件
在lr2更新仓库,新建一个index.html文件,添加提交上传;
这里提示我们要配置邮箱和姓名
进行上传
在页面已经可以看到提交的内容了
在Dashboard的demo项目中,查看构建历史
控制台可以看到成功了
一分钟以后,lr3在/var/lib/jenkins/workspace就可以同步gitlab的文件
2.实时监控gitlab
在gitlab中允许外发请求
进入jenkins,更换触发器类型,有变动就重新拉取;
可以看到URL地址;
打开高级,可以看到生成的令牌
进入github的demo项目,设置webhooks,填写jenkins地址和令牌
此时可以看到配置已经生效,进行测试
在jenkins端,可以看到控制台输出
lr2将新的内容写入到index.html中
然后提交改动并上传
在页面中查看,可以看到控制台输出
lr3的jenkins实现实时同步,可以看到改动
3.结合dockfile自动构建镜像并上传到本地仓库registry
lr2编写dockerfile文件并添加提交上传
因为jenkins实时同步lr3也看到dockerfile,lr3安装docker并启动
lr3执行docker info,出现警告
因此lr3需要修改内核参数并重载
lr3准备好所需要的镜像myapp
接下来在jenkins页面安装docker插件,选择Docker Build and Pubish
lr3上传registry本地仓库镜像,并后台启动,开启5000端口(搭建本地仓库)
由于jenkins程序运行时是以jenkins身份运行的,other对于socker没有访问权限;
因此需要赋予权限,使得jenkins能用套接字使用docker
接下来,lr3配置项目demo,选择docker构建,设定上传镜像的名字和标签(就是构建版本号),使用docker套接字,设定仓库地址
高级里面,注意关闭强制拉取,保存配置
点击右上方绿色按钮进行手工触发
查看控制台输出正常
在lr3测试,镜像已上传到registry
4.结合dockfile自动构建镜像并上传镜像到网络仓库harbor
lr3将上个实验构建的registry仓库删除;
打开虚拟机server1(之前部署的habor仓库),server1将自己docker目录下的cert.d发送至lr3的docker目录
lr3修改仓库镜像地址并重启docker服务,为docker.sock文件设置权限,使jenkins通过套接字使用docker,然后添加本地域名解析(注意重启docker服务后,socket权限会还原需要重新赋予777权限)
docker info可以查看到仓库
进入jenkins,修改demo项目的配置,上传镜像的名称要对应harbor仓库的目录,标签和构建版本号一致,设定套接字,修改仓库地址,由于harbor是加密认证的,所以还需要证书
添加证书凭据,输入harbor仓库的用户名和密码
选择证书,保存,执行
进行手工触发,查看控制台输出正常(第19次构建)
在harbor仓库查看镜像的标签也是19
5.从harbor仓库拉取镜像并运行
新建项目docker
配置项目docker,修改触发器类型,当前面的demo项目稳定运行后,运行docker项目,具体操作是运行一个容器,点击保存
手工触发后,控制台可以看到配置成功
lr3测试访问可以看到myapp正在运行
jenkins修改docker项目的配置,执行命令改为删除以前的镜像,运行最新版本的镜像,避免冲突
lr2修改dockerfile文件为v2版本,添加提交上传至gitlab代码仓库(测试镜像版本更新)
进行手工触发,查看控制台输出成功
lr3再次测试,变为v2版本
6.SSH的方式对远程节点jenkins操作
lr3是jenkins的matser节点工作,不想把任务部署在lr3上,可以使用ssh的方式,将任务部署到另一台虚拟机lr4上。
新创建一台虚拟机lr4,安装docker-ce,开启docker,server1发送证书,内核参数docker.conf文件,damen.json文件(同之前部署docker操作)
jenkins添加ssh插件
jenkins系统设置
添加远程主机lr4,端口为22,添加jenkins凭据
凭证类型选择用户名和密码,输入ssh登陆操作的服务器的账号和密码
凭证配置完成
回到docker项目,修改配置,不用之前的shell,使用远程的shell,命令还是运行容器,保存,构建
查看控制台输出,镜像拉取成功
lr4测试访问本地容器正常运行,查看镜像信息
当本地已经存在指定docker镜像时,不会在仓库再次拉取镜像;
将执行命令改为删除以前的容器,再删除对应的镜像,然后运行最新版本的镜像
可以看到控制台显示找不到镜像,将重新从仓库拉取镜像