1.Jenkins介绍
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
2.Jenkins安装
(1)获取java软件包和jenkins软件包,安装(先装java包,再装jenkins包)并启动jenkins
jenkins默认开启的端口是8080
(2)访问: http://172.25.12.6:8080
使用初始密码登录:cat /var/lib/jenkins/secrets/initialAdminPassword
(3)更新插件源:
vim /var/lib/jenkins/hudson.model.UpdateCenter.xml ##修改更新中心
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
cd /var/lib/jenkins/updates
sed -i.bak 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
修改default.json文件中的下载源为清华网站,谷歌改为百度
(4)改好后,重新访问 http://172.25.12.6:8080,拿到程序员管理密码,选择社区推荐安装
3.jenkins使用
实验环境:
server5(172.25.12.5)作gitlab私有仓库
server6(172.25.12.6) 作jenkins服务端
3.1 gitlab手动实现jenkins触发构建
(1)新建一个自由风格任务:
(2)在源码管理出选择git,输入仓库位置
(3)添加访问git仓库的私钥
点击添加选择jenkins后,类型选择SSH,username填root,在server5上粘贴私钥
此时还是无法连接是因为server6上没有安装git工具命令
安装git后,连接正常
*/mster是版本的主分支,已经默认就有的,用来控制代码的来源
(4)定义轮询间隔,有更新时触发jenkins构建
(5)构建选择执行shell命令
命令执行ls -l:抓回数据后进行列出
Git提交代码到gitlab,jinkens轮询检测到代码仓库的变更,触发构建
控制台管理通过git克隆远程仓库目录,数据克隆到本地,最后执行一个ls -l
(6)验证
在server6上的/var/lib/jenkins/workspace/demo下可以查看到来自于远端私有仓库的数据
3.2 用容器化方式构建
(1)在server6上安装docker-ce,并启动docker·
(2)去除警告(docker info)
vim /etc/sysctl.d/bridge.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl --system ##使配置生效
(3)测试镜像
docker pull nginx
docker run -d --name web nginx
docker inspect web ##获取到docker地址172.17.0.2
curl 172.17.0.2 ##可以访问到nginx,说明镜像可以正常使用
docker rm -f web ##删除容器web,保证实验环境纯净
上边实验都是手工来做,现在让jenkins来自动做这件事
(1)在server5上的demo目录下推送一个index.html文件到远程仓库
(2)在demo目录下编辑Dockerfile,将当前页面index.html复制到nginx默认发布目录中去
跟踪Dockerfile文件添加到暂存区中,递交Dockerfile推送到远程仓库
(3)在浏览器上查看
#1,#2,#3,都是构建号,查看第三次构建输出中有Dockerfile
根据dockerfile构建镜像
返回demo项目,点击插件管理,选择可选插件,找到与dockerfile相关的插件,直接安装
在server6上搭建docker仓库
curl localhost:5000/v2/_catalog ##仓库是空的
上传busybox镜像,表示仓库可用
连接docker时有权限问题,更改docker.sock权限为777(仅限于本地)
浏览器上:
在jenkins上删除之前的构建操作,重新定义
仓库名:myweb
tag(标签):${BUILD_NUMBER}变量
Docker host URL:unix:///var/lib/run/docker.sock ##unix代表本地,仅限于在当前本机
高级选项中,取消Force Pull,不让它强行拉取;勾选Skip Push,它帮我们构建好镜像再推送
在jenkins主机上可以查看到我们的仓库镜像myweb
配置demo,取消跳过推送,更改index.html后再次推送,触发
gitlab中信息更新
上传到我们的私有仓库myweb中
单元测试
在jenkins主机上对jenkins用户进行权限下放
新建任务docker测试上传的镜像
在demo任务成功后触发docker任务
构建执行shell,在本地主机运行一个webserver镜像
手动触发
成功执行
查看运行后的webserver镜像,访问webserver的ip,同步到的是gitlab上的index.html默认发布信息
再次构建执行shell增加端口映射
在gitlab主机更改index.html
在浏览器上查验,gitlab中信息已更新
jenkins中demo和docker任务自动触发(下图中的构建号7和3)
自动化触发完成