Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jinkens+gitlab针对k8s集群实现CI/CD

Jinkens+gitlab针对k8s集群实现CI/CD

作者头像
小手冰凉
发布于 2020-09-21 01:59:21
发布于 2020-09-21 01:59:21
1.1K00
代码可运行
举报
文章被收录于专栏:小手冰凉小手冰凉
运行总次数:0
代码可运行

环境如下

//前三个为K8s集群中的节点

主机名

IP

运行服务

docker-k8s01

192.168.171.151

docker+registry

docker-k8s02

192.168.171.150

docker

docker-k8s03

192.168.171.152

docker

Jenkins

192.168.171.153

Jenkins+gitlab+docker

Jenkins采用war包的方式部署,需要用到tomcat环境,自行参考博文,进行部署;

Docker 部署

Tomcat 的安装与优化

K8s 安装部署

一、部署registry私有仓库

//任意节点都可部署**

1、运行registry容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# docker run -itd --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry 

2、配置各个节点指向私有仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//选择其中一个节点操作
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 
//修该下面的配置项,以便指定其私有仓库的监听地址
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000
//将已经配置好的文件发送到各节点
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s02:/usr/lib/systemd/system/
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s03:/usr/lib/systemd/system/ 
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service jenkins:/usr/lib/systemd/system/

3、各节点重启docker服务,使之生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//每个节点都需要执行
[root@docker-k8s01 ~]# systemctl daemon-reload 
[root@docker-k8s01 ~]# systemctl restart docker 

二、部署Jenkins服务

//部署Jenkins之前,自行部署Tomcat服务,参考开头链接即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//进入tomcat的webapps目录,根据实际情况而定,这里我直接删除了
[root@jenkins ~]# cd /usr/local/tomcat/webapps/
[root@jenkins webapps]# rm -rf *
[root@jenkins webapps]# ls      //刚刚上传上来发现tomcat自动给我解压了
jenkins  jenkins.war
//接下来指定Jenkins的家目录
[root@jenkins webapps]# vim ../bin/catalina.sh 

#!/bin/sh
//在开头添加如下内容
export CATALINA_OPTS="-DJENKINS_HOME=/data/jenkins"
export JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true"
[root@jenkins webapps]# cd ../bin/
[root@jenkins bin]# ./catalina.sh start   //启动tomcat
//确定端口已启动
[root@jenkins bin]# ss -anput | grep 8080
tcp    LISTEN     0      100    [::]:8080               [::]:*                   users:(("java",pid=12236,fd=49))

三、配置Jenkins服务

要想实现Jenkins的CI/CD,必须有GitLab、GitLab HOOK、Git Lab Authentication这三个插件,国内不太好下载这几个插件。

1、配置Jenkins web界面

//浏览器访问tomcat服务的IP+端口/Jenkins(访问前最好先断掉外网,否则在输入密码后,会让在线安装插件,比较慢,而且很有可能安装失败)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//查看密码
[root@jenkins ~]# cat 
/data/jenkins/secrets/initialAdminPassword 
3eb89452e2614173a548a9d4cfe9fcc3

//输入密码后稍等一会出现如下图

//创建相应用户

登录成功后,如下**

2、配置所需插件

//关闭浏览器页面,对Jenkins添加插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@jenkins ~]# rm -rf /data/jenkins/plugins/
[root@jenkins ~]# tar zxf plugins.tar.gz -C /data/jenkins/
//重启tomcat使之生效
[root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh stop 
[root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh start 

//再次访问Jenkins的web界面

//可以看到已经变成了中文页面,说明插件配置生效

四、部署gitlab

1、安装gitlab

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//下载gitlab的rpm包
[root@jenkins ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm
[root@jenkins ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm 
[root@jenkins ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://192.168.171.153:90'      //将原本的域名更改为本机IP
unicorn['listen'] = '192.168.171.153'   //这两行在下方是有注释的,这里我直接添加了
unicorn['port'] = 3000
[root@jenkins ~]# gitlab-ctl reconfigure 

接下来的操作可参考文章开头链接中的Gitlab安装部署来接着部署,最后保证可以将远端的库克隆到本地即可

**

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//可以看到本地已经访问到gitlab
[root@jenkins ~]# ls -d test1/
test1/

五、配置Jenkins创建一个任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//脚本中的IP,192.168.171.151为私有仓库的IP,最后的192.168.171.151为k8s集群中master的IP地址
#!/bin/bash
backupcode="/data/backcode/$JOB_NAME/$BUILD_NUMBER"   #这里引用了Jenkins的默认变量
mkdir -p $backupcode
chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/*
rsync -acP   "$JENKINS_HOME"/workspace/"$JOB_NAME"/*  $backupcode
echo From  192.168.171.151:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 192.168.171.151:5000/nginx        
docker build -t 192.168.171.151:5000/nginx /"$JENKINS_HOME"/workspace/.
docker push 192.168.171.151:5000/nginx
ssh root@192.168.171.151 kubectl delete deployment nginx
ssh root@192.168.171.151 kubectl apply -f /root/nginx.yaml

//脚本填写后,先别保存,根据以下操作复制一下Jenkins的地址

六、开启Jenkins的匿名访问权限

七、gitlab上开启允许向自己发送web hook

//这是因为我是把Jenkins和gitlab装在了一台服务器

//保存后,下拉页面,即可看到新添加的web-hook,点击如下,进行测试

//返回状态码200,则表示配置无误

八、配置Jenkins免密登录k8s群集的master节点

//Jenkins配置如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//下方IP为k8s群集master的IP
[root@jenkins ~]# ssh-copy-id root@192.168.171.151

九、测试持续CI/CD效果

1、k8s群集运行nginx资源对象

2、客户端访问nginx

3、在gitlab进行版本的更新迭代测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@jenkins ~]# cd test1/
[root@jenkins test1]# git config --global user.name "test"
[root@jenkins test1]# git config --global user.email "test@test.com"
[root@jenkins test1]# echo "test--version==v1" > index.html
[root@jenkins test1]# git add *
[root@jenkins test1]# git commit -m "Test CI/CD"
[root@jenkins test1]# git push origin master 

//在进行上述操作后,即可在Jenkins新建的任务中,看到构建成功的信息

//再次访问nginx首页,发现已经变成了我们在gitlab上提交的内容

//历史版本内容存放路径如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@jenkins data]# pwd
/data
//这个目录下记录的是历史版本的代码
[root@jenkins data]# tree backcode/
backcode/
└── test-01
    ├── 1
    │   └── README.md
    └── 2
        ├── index.html
        └── README.md

[root@jenkins workspace]# pwd
/data/jenkins/workspace
//此目录下是将新代码构建成镜像的关键所在,Dockersfile就在这个目录下
[root@jenkins workspace]# ls
Dockerfile  test-01
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/12/24
6K2
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
k8s资源对象的升级、回滚、扩容、缩容
命令的方式创建资源,理解命令运行之后的动作,通过查看资源的方式,总结Pod名称的由来
小手冰凉
2020/08/27
7050
Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo)
如果你讨厌一个人,你实际讨厌的是你自己的某些部分。我们自身没有的东西,是不会干扰到我们的。仁者见仁,智者见智。——德尔曼 黑塞《德米安》
山河已无恙
2023/03/02
2.4K0
基于Jenkins+Gitlab+Harbor+Rancher+k8s CI/CD实现
     通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机、虚拟机、代码运行环境、数据库安装配置、各种帐号创建,、运行后期的系统监控、应用的日志收集,性能优化等一系列的工作。
py3study
2020/06/18
4.2K0
基于Jenkins+Gitlab+Harbor+Rancher+k8s CI/CD实现
k8s的持续集成(jenkins+gitlab+k8s)
root@k8s-master1 docker.yml# kubectl get node
不凡
2021/08/19
3.7K1
k8s——针对有状态服务实现数据持久化
对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而对于无状态请求,服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。 无状态的服务器程序,最著名的就是WEB服务器。每次HTTP请求和以前都没有什么关系,只是获取目标URI。得到目标内容之后,这次连接就被杀死,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如COOKIE。服务端在响应客户端的请求的时候,会向客户端推送一个COOKIE,这个COOKIE记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个COOKIE,服务端可以根据这个COOKIE判断这个请求的上下文关系。COOKIE的存在,是无状态化向状态化的一个过渡手段,他通过外部扩展手段,COOKIE来维护上下文关系。 状态化的服务器有更广阔的应用范围,比如MSN、网络游戏等服务器。他在服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。这样,客户端可以很容易使用缺省的信息,服务端也可以很容易地进行状态管理。比如说,当一个用户登录后,服务端可以根据用户名获取他的生日等先前的注册信息;而且在后续的处理中,服务端也很容易找到这个用户的历史信息。 状态化服务器在功能实现方面具有更加强大的优势,但由于他需要维护大量的信息和状态,在性能方面要稍逊于无状态服务器。无状态服务器在处理简单服务方面有优势,但复杂功能方面有很多弊端,比如,用无状态服务器来实现即时通讯服务器,将会是场恶梦。
小手冰凉
2020/09/15
2.3K0
基于 Kubernetes 的持续部署CD方案详解
本技术方案为基于 kubernetes (下文简称 K8S )为核心的持续部署(下文简称CD)方案,可以满足开发方的程序级日志查看分析,运维方的快速扩容与日常运维分析,并且可以保证用户的服务体验。并且整套放在可以在资源利用率上进一步提升,在不降低服务可靠性的前提下降低资源使用成本。
DevOps时代
2019/08/29
2.3K0
基于 Kubernetes 的持续部署CD方案详解
Jenkins与Docker的自动化CI/CD实战
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。
星哥玩云
2022/07/28
7780
Jenkins与Docker的自动化CI/CD实战
Kubernetes(k8s)之jeckins自动化构建docker镜像并部署到k8s集群
安装完毕,配置gitlab(gitlab是使用ruby编写的一个工具,所以配置文件是rb的后缀),第一点是修改gitlab的访问地址,第二点是修改普罗米修斯的监控关闭掉,节省资源,如下所示:
别先生
2020/07/06
2.3K0
Kubernetes(k8s)之jeckins自动化构建docker镜像并部署到k8s集群
Jenkins+maven+gitlab+Tomcat自动部署版本更新及回滚
Jenkins、gitlab服务部署可参考:部署Jenkins+Gitlab实现持续集成 Tomcat1用于测试环境,Tomcat2用于生产环境,部署可参考:Tomcat 的安装与优化 在进行真正的配置前,优先确保可以访问到以下几个页面: 1、gitlab
小手冰凉
2020/05/06
1.6K0
Jenkins+harbor+gitlab+k8s 部署maven项目
由于资源紧张,Jenkins+harbor合并为一台了。实际上,应该是要单独部署的。
py3study
2020/03/06
3.3K2
CI / CD+ Docker 综合实战
3、打包生成的代码,生成一个新版本的镜像,push到本地docker仓库harbor
BUG弄潮儿
2021/05/17
6690
CI / CD+ Docker 综合实战
K8s 安装部署
k8s为什么叫k8s呢? 因为k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s。 k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目。
小手冰凉
2020/08/19
10K0
基于 Jenkins、Gitlab、Harbor、Helm 和 Kubernetes 的 CI/CD
我们利用 Kubernetes 来动态运行 Jenkins 的 Slave 节点,可以和好的来解决传统的 Jenkins Slave 浪费大量资源的缺点。之前的示例中我们是将项目放置在 Github 仓库上的,将 Docker 镜像推送到了 Docker Hub,这节课我们来结合我们前面学习的知识点来综合运用下,使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业。
jwangkun
2021/12/23
2.6K0
基于 Jenkins、Gitlab、Harbor、Helm 和 Kubernetes 的 CI/CD
基于GitLab+Docker+K8S的持续集成和交付
此文档主要说明怎样基于GitLab进行持续集成和持续交付,该持续集成与交付集成了gitlab-runner 、mvnw、Docker、harbor、k8s等技术,同时展示了在k8s平台利用EFK(elasticsearch,fluentd,kibana)技术完成了集群统一日志管理,使用kube-prometheus技术进行集群实时监控以及kube-dashboard管理集群中的应用部署,为了不引入网络问题,本环境的相关VPC机器已经关闭了本机防火墙。
互扯程序
2019/05/14
3.1K0
基于GitLab+Docker+K8S的持续集成和交付
1.Jenkins入门基础介绍与持续化集成部署
Tips :个人理解 Jenkins 是一个调度平台,本身不需要处理任何事情,而是通过众多的插件来完成所有的工作;
全栈工程师修炼指南
2022/09/29
6.3K0
1.Jenkins入门基础介绍与持续化集成部署
Jenkins+Maven+Gitlab+Nexus持续集成环境搭建
Jenkins是实现代码自动化流程上线的工具,Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行
仙人技术
2020/04/29
2.8K0
K8S的名称空间创建&&版本的升级、回滚操作
2、在master节点,自定义一个镜像,基于nginx镜像,默认界面内容改为:Version:v1,版本2内容为:Version:v2.版本3内容为:Version:v3
小手冰凉
2020/08/28
4880
K8S的名称空间创建&&版本的升级、回滚操作
K8s——Ingress-nginx原理及配置
在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes中目前提供了以下几种方案:
小手冰凉
2020/09/15
6.5K0
K8s——Ingress-nginx原理及配置
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署
192.168.1.10 由于刚才已经与gitlab进行sshd密钥部署,就不重新获取了
互联网-小阿宇
2022/11/21
1.1K0
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署
推荐阅读
相关推荐
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验