Jenkins之父KK谈持续交付流水线&华为专家谈DevCloud Cloudpipeline实践
1734
2022-05-29
@[toc]
前言
Jenkins 是一个持续集成工具,可用于自动化与构建、测试、交付或部署软件相关的各种任务。
Jenkins 可以通过本机系统包、Docker 安装,甚至可以由任何安装了 Java 运行时环境 (JRE) 的机器独立运行。
持续集成工具还有Drone、Gitlab-CICD(gitlab内置cicd)还要kubesphere容器云平台也能做持续集成(CICD)kubesphere是借助于Jenkins来实现CICD,本身没有该功能。
本章就带各位简单搭建Jenkins和使用Jenkins+Blue Ocean及编写Jenkinsfile流程。
Drone使用,请点击这里
:【Drone+Gitlab】一条龙服务,直接起飞 — 从介绍->部署->配置->写.drone.yml流水线+常见的报错解决
学习kubesphere前,强烈建议阅读
:【排坑指南之kubeSphere】2022年最新版-”kubeSphere3.2.1 Paas容器云平台“使用DevOps-CICD之”排坑指南“
准备篇
硬件要求
最小256MB内存, 推荐512MB以上
10GB硬盘空间
环境要求
Linux系统
docker
docker-compose
安装使用docker-compsoe点这里
操作篇
部署
这里介绍了三种方式部署,其他方式部署(WAR包部署、yum部署);
下面我们使用 jenkinsci/blueoceanDocker镜像运行,因为jenkinsci/blueocean集成了blueocean,省去Jenkins内部安装blueocean插件的步骤(方便快捷)。
使用docker部署
docker run \ -u root \ -dit \ --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v /var/jenkins-data:/var/jenkins_home \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
参数解释:
run: 启动运行一个容器;
-u:root身份启动容器,具有root权限;
dit:后台交互式方式运行容器(常用);
–name:指定容器名称为jenkins;
-p:8080是Jenkins web访问界面(容器的端口8080映射到主机上的端口8080);
基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站进行通信(容器的端口50000 映射到主机上的端口50000);
-v:/var/jenkins_home Jenkins主目录,每次重新启动Jenkins,会保持Jenkins当前状态(存放Jenkins服务器数据);
/usr/bin/docker 宿主机docker命令挂载给容器内使用(我们称为:docker in docker方式);
/var/run/docker.sock Docker守护程序监听通过基于Unix的套接字文件,这里用于与Dcoker守护进程通信(不添加的话容器内docker命令,不能与守护进程通信);
使用docker-comopse部署
不会docker-compsoe点这里
在宿主机编写docker-compose.yaml文件,文件内容如下;
下列参数具体意思和上述类似,这里不过多赘诉;
version: '3' #定义版本 services: jenkins: container_name: jenkins image: jenkinsci/blueocean:latest user: root priveleged: true #开启特权 ports: #定义映射端口 - 8080:8080 - 50000:50000 volumes: #定义挂载卷 - /var/jenkins-data:/var/jenkins_home - /usr/bin/docker:/usr/bin/docker - /var/run/docker.sock:/var/run/docker.sock
启动docker-compose对应的文件内容定义的services服务:
$ docker-compose up -d #后台启动 [+] Running 2/2 ⠿ Network test_default Created 0.1s ⠿ Container jenkins Started 1.3s
docker-compose常用指令:
$ docker-compose ps #查看状态信息 NAME COMMAND SERVICE STATUS PORTS jenkins "/sbin/tini -- /usr/…" jenkins running 0.0.0.0:8081->8080/tcp, 0.0.0.0:50001->50000/tcp, :::8081->8080/tcp, :::50001->50000/tcp $ docker-compose down #停止后移除 [+] Running 2/2 ⠿ Container jenkins Removed 0.8s ⠿ Network test_default Removed
kubernetes方式部署
参考地址:https://www.jenkins.io/doc/book/installing/kubernetes/
使用
浏览器访问 宿主机ip+8080端口:
出现如下页面我们可以使用两种方式查看密码:
查看宿主机上的密码文件(图片上是容器内的密码文件路径)
$ cat /var/jenkins-data/secrets/initialAdminPassword 3b1050b5ebbb4539a14588f0601e163b
使用查看jenkins启动日志方式,查看密码,如下图(两个星号中间)
$ docker logs jenkins
选择安装推荐的插件
这里需要等待几分钟(这里如果出现错误,检查一下网络是否可以上网):
创建管理员用户后,实例配置保持默认
流水线
创建多分支流水线
下面我们会使用多分支流水线、Jenkinsfile、Blue Ocean;
多分支流水线创建时会检查代码仓库所有分支的流水线任务(Jenkinsfile);
在创建流水线之前还需要明白一个概率叫Jenkinsfile,因为接下来的步骤在它基础之上(核心);
Blue Ocean是Jenkins Pipeline可视化界面,提高Jenkins用户体验;
官方定义:Jenkins Pipeline 用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件中(称为 Jenkinsfile ),该文件可以被放入项目的源代码控制库中;
总结一句话:Jenkinsfile是一个文本文件记录Pipeline (流水线)的执行Job(任务)的步骤;
创建多分支流水线:点击新建Item–>输入任务名称–>选择多分支流水线–>点击确定,如下图所示;
分支源:添加git仓库地址–>创建jenkins凭证–>点击保存;
这里仓库地址使用的是国内gitee(码云)仓库(拉取代码比较快),当然也可以使用github、gitlab、gogs等仓库服务器;
学习搭建gitlab个人仓库服务器,点击这里
本案例使用的gitee代码仓库地址(包含Jenkinsfile文件内容)各位自行获取吧!!!
点击保存后,Jenins会自动扫描运行Jenkinsfile文件任务;检查输出Log最后的状态是否出现 Finished: SUCCESS 字段(表示完成);
点击状态查看
打开Blue Ocean查看
Blue Ocean显示所有Jenkinsfile的阶段都成功完成(使用Blue Ocean创建流水线也是可以的)
总结
这里的演示的Jenkinsfile很基础,想深入学习Jenkinsfile请参考官方文档;
使用Jenkinsfile创建流水线的流程介绍完毕,各位快去试着学习部署自己的项目吧!!!
推荐阅读
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
【容器】docker-comopse安装+案例练习
【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库
【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
【openstack】cloudkitty组件,入门级安装(快速)
【openstack】Designate组件,入门级安装(快速)
【Istio是什么?】 还不知道你就out了,一文40分钟快速理解
【Istio实际操作篇】Istio入门10分钟快速安装
【代理是什么?】nginx快速入门+反向代理hexo个人博客
【还不会搭建博客吗?】centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
【没接触过kubevirt?】15分钟快速入门kubevirt
参考资料
https://www.jenkins.io/zh/doc/
Docker Jenkins 云计算
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。