文章目录

  • 什么是CI/CD?
  • 1 环境准备
  • 2 组件部署
    • 2.1 jenkins快速部署
    • 2.2 gitlab快速部署
    • 2.3 harbor快速部署
  • 3 CI/CD交付

什么是CI/CD?

CI/CD即持续集成与持续交付持续部署。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。

参考文章:什么是 CI/CD

CI/CD流程图

本文将使用GitLab+Jenkins+Kubernetes来实现CI/CD的简单自动化发布场景

1 环境准备

确保各个节点服务器防火墙、selinux都关闭,做好域名解析

10.0.0.200 master01 jenkins.rsq.com
10.0.0.201 node01
10.0.0.202 node02
10.0.0.203 gitlab.rsq.com
10.0.0.204 store.rsq.com

2 组件部署

2.1 jenkins快速部署

可以考虑helm部署,也可以单机部署,这里我选择了单机部署,比较方便一点
1、yum安装jenkins

# 配置jenkins源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo# yum安装jenkins和java环境
yum install jenkins java java-1.8.0-openjdk-devel -y

2、修改配置

vim /etc/sysconfig/jenkins# 监听端口
JENKINS_PORT="8080"# 为了不因为权限出现各种问题,这里直接使用root用户
$JENKINS_USER="root"# 修改目录权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins# 启动jenkins
systemctl start jenkins

2.2 gitlab快速部署

之前有用过helm部署gitlab-ce,但是发现被废弃了,里边deployment的apiVersion还是extensions/v1beta1,跟现有deployment的apps/v1不相符,若要使用还需要修改postgresqlredis chart的deployment文件,添加selector字段,遂放弃。

1、点击下方下载链接选择所需要的gitlab-ce版本rpm包

单机下载路径

2、安装gitlab-ce

# 安装依赖文件
yum -y install policycoreutils openssh-server openssh-clients postfix# 获取rpm包并安装
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm# 修改gitlab配置文件指定服务器ip和自定义端口
vim  /etc/gitlab/gitlab.rb
external_url 'http://gitlab.rsq.com'
# 注意这里设置的端口不能被占用,默认是80端口,如果80已经使用则需要替换成其它端口# 重置配置并启动gitlabgitlab-ctl reconfigure # 第一次执行时间会久一点gitlab-ctl restart # 出现全部 ok: run: 即代表gitlab启动成功

显示如下界面即成功

创建一个项目供代码push上传

名字自定义

在客户端即K8s主节点上配置ssh-key免密钥登录

# 这里的-C指定我们gitlab中创建的邮箱账号
ssh-keygen -t rsa -C "cactirsq@163.com"# 然后拷贝 ~/.ssh/id_rsa.pub 公钥至gitlab中


找到SSH Keys

在K8s主节点上创建代码仓库

[root@master01 ~]# mkdir /home/rsq/www
[root@master01 ~]# cd /home/rsq/www
[root@master01 www]# git init
Initialized empty Git repository in /home/rsq/www/.git/
[root@master01 www]# git remote add origin git@gitlab.rsq.com:rsq/www.git
[root@master01 www]# git add .
[root@master01 www]# git commit -m "init"
[root@master01 www]# git push -u origin master
The authenticity of host 'gitlab.rsq.com (10.0.0.205)' can't be established.
ECDSA key fingerprint is SHA256:Yg2SX+FS7+aEFjqCu5g4h4g98RVBacG3a669M8Bw8eA.
ECDSA key fingerprint is MD5:f5:cb:69:36:63:3d:92:da:c7:4d:7b:d7:df:ba:dc:e0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.rsq.com,10.0.0.205' (ECDSA) to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git@gitlab.rsq.com/rsq/www.git* [new branch]      master -> master
Branch master set up to track remote branch master from origin.

参考文章:

centos7安装部署gitlab服务器

2.3 harbor快速部署

1、获取harbor安装包

# 进入github选择harbor所需release版本,我这里用的v1.7.4
# 下载包有点慢
https://github.com/goharbor/harbor/releases# 解压缩至/usr/local/目录下
tar -xf harbor-offline-installer-v1.7.4.tgz -C /usr/local/

2、修改harbor配置文件

vim /usr/local/harbor/harbor.cfghostname = store.rsq.com
harbor_admin_password = Harbor12345   # 初始密码
db_password = root123                # 数据库初始密码

3、安装之前需要用pip3安装compose-harbor,否则会报错

# yum安装pip
yum -y install epel-release
yum install python3-pip# 更新国内pip源
mkdir  ~/.pip/
vim ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/[install]
trusted-host=mirrors.aliyun.com# 安装docker-compose
pip3 install docker-compose

4、安装harbor

cd /usr/local/harbor
./install.sh

3 CI/CD交付


接下来会按照上图一步一步操作,当我们往gitlab上push代码后,会自动触发Jenkins的构建,这个是在gitlab上设置实现的。
jenkins中创建一个pipeline


gitlab中调试

添加完Webhook之后可以进行测试

若通过,既可进行下一步构建代码,不过这里就不演示如何进行构建,直接贴上代码
一个CI/CD简单的groovy脚本

#!groovy
pipeline {agent anyenvironment {REPOSITORY="ssh://git@gitlab.rsq.com:2222/tom/gocode.git"MODULE="user-edge-service"  // 要更新的pod名字SCRIPTS_PATH="/home/rsq/scripts"  // 脚本都在这里执行}stages {stage('获取代码') {steps {echo "start fetch code from git:${REPOSITORY}"deleteDir()git "${REPOSITORY}"}}stage('静态分析') {steps {echo "start code check."}}stage('编译+单元测试') {steps {echo "start complie"sh "mvn -U -pl ${MODULE} -am clean package"}}stage('构建镜像') {steps {echo "start build image"sh "${SCRIPTS_PATH}/build-images.sh ${MODULE}"}}stage('发布系统') {steps {echo "start deploy"sh "${SCRIPTS_PATH}/deploy.sh user-service-deployment ${MODULE}"}}}
}

在K8s主节点的/home/rsq/scripts目录下创建如下两个bash脚本,供jenkins调用执行
build-images.sh

#!/bin/bashMODULE=$1
TIME=`date "+%Y%m%d%H%M"`
GIT_REVERSION=`git log -1 --pretty=format:"%h"`
IMAGE_NAME=hub.rsq.com:8080/micro-service/${MODULE}:${TIME}-${GIT_REVERSION}cd ${MODULE}# 编译镜像
docker build -t ${IMAGE_NAME} .
cd -# 推送代码
docker push ${IMAGE_NAME}# 把镜像名字写入文件,供脚本获取使用
echo ${IMAGE_NAME} > IMAGE_NAME

deploy.sh

#!/bin/bashIMAGE=`cat IMAGE_NAME`
DEPLOYMENT=$1
MODULE=$2echo "update image to:${IMAGE}"
kubectl set image deployments/${DEPLOYMENT} ${MODULE}=${IMAGE}

最后可以实现每当往gitlab中进行一次push代码的操作,gitlab就会自动触发webhook操作,直到完成持续部署,代码上线,这样就实现了一个简单的CI/CD流程,但是静态分析的代码需要自己根据实际代码去编写。

基于K8s的CI/CD自动化持续集成部署框架相关推荐

  1. CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)

    Table of Contents CI(Continuous integration,持续集成) CD(Continuous Delivery, 持续交付) Different types of t ...

  2. k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...

    这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...

  3. GitOps—通过CI/CD自动化构建虚拟机模版

    <CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)> <什么是DevOps?人员,流程和产品的结合,过程.方法与系统的统称&g ...

  4. CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

    构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么? 持续集成(CI)/持续交付(CD)的优势 自动化部署流程图 Git Github Gi ...

  5. kubedog:解决K8S在CI/CD中无法持续追踪问题

    需求 在Jenkins的CI/CD流水线中,无论是通过Kubernetes CLI还是Kubernetes Continuous Deploy插件,在应用yaml后无法检查资源是否部署成功,只能通过k ...

  6. Jenkins X:基于Kubernetes的CI/CD平台

    背景 Jenkins自动化服务器一直都是DevOps工具链的重要组成部分,并且已发展成为开源持续集成和持续部署(CI&CD)软件的领导者.据不完全统计,截至2019年6月,已有将近26万的Je ...

  7. 可落地微服务on k8s的持续集成/部署方案

    我们隔一流的软件生产工艺还有多远?在距离15000公里外,Amazon一年可以进行5000万次部署,在这一边某电商平台的研发部门里,让他们引以为傲的是他们正在进行"敏捷"开发模式, ...

  8. 3天学会Jenkins_1_Jenkin与CI(Continuous Integration,持续集成)?

    转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net 文章目录 1 什么是持续集成? 2 什么是Jenkin? 3 Jenkin历史 4 ...

  9. 持续集成与持续部署(三)——实现持续集成的效率工具对比之Jenkins、Travis CI、Circle CI和其他持续集成工具

    持续集成与持续部署(三)--实现持续集成的效率工具对比之Jenkins.Travis CI.Circle CI和其他持续集成工具 效率工具对比 点击查看效率工具 1. Jenkins Jenkins, ...

最新文章

  1. jupyter配置默认启动目录
  2. AI如何在安防行业更加深入?可从超高清视频监控切入
  3. java观察者设计模式
  4. svn 分支主干相互合并
  5. iOS- 如何改变section header
  6. Mac OS X Glut build instructions
  7. python format格式化输出填充符号不起作用_Python格式化输出——format用法示例
  8. jenkins使用哪个版本号_Linux下安装JDK及jenkins
  9. linux nfs mysql_MySQL实现高可用+共享存储NFS
  10. (计算机组成原理)408之外内容补充(非统考考生需要了解|以白中英教材为准)
  11. java td背景色_jQuery:无法更改表格单元格的背景颜色
  12. java基础知识梳理_java基础知识点梳理3
  13. 华为折叠手机是鸿蒙系统吗,华为发布新一代折叠屏手机 将首批升级鸿蒙系统...
  14. SQL SERVER数据库日常使用总结
  15. ps 抠图 修改背景颜色
  16. 小米Pad退出开发者模式
  17. JS中的debugger调试(谷歌浏览器)
  18. TeamTalk的windows客户端流程
  19. Shell的解释和一些用法
  20. 团建游戏----气球大赛

热门文章

  1. 得到一件东西的感觉,是不过如此,还是爱不释手‬呢?取决于……
  2. Microsoft Office 2019 Mac版 v16.53 微软office办公套件
  3. 网络流 费用流 模板 ISAP+SPFA+ZKW
  4. nodejs微信公众号教程
  5. XMind使用技巧2
  6. [内附完整源码和文档] 基于java web的台球厅管理系统的设计与实现
  7. 关于UFW防火墙应用小结
  8. python音乐播放器代码_python3.2 音乐播放器源码
  9. 微信红包居然可以撤回?这功能我猜你应该还不知道!
  10. LoadRunner开始录制时启动浏览器卡死的解决办法