CI CD(gitlab ci来实现)
CI && CD
如果你是个初创公司,苦于svn代码管理,发布的繁琐。那么为什么不用git呢。本文就是使用开源的软件gitlab+gillab-ci+docker来完美的搭建代码持续集成,持续部署的系统。码字不易。各位看官多多给赞!!!
1 安装gitlab
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fIcLeXQ-1668671555828)(https://github.com/jeremyke/PHPBlog/raw/master/Pictures/20190606173440.png)]
安装步骤
- 安装依赖
yum install -y git vim gcc glibc-static telnetyum install -y curl policycoreutils-python openssh-serversystemctl enable sshdsystemctl start sshdyum install postfixsystemctl enable postfixln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/systemctl start postfix
- 设置gitlab安装源
vim /etc/yum.repos.d/gitlab-ce.repo
文件内容:
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=o
enabled=1
- 安装
EXTERNAL_URL="http://[你的域名]" yum install -y gitlab-ce
安装完成之后:
gitlab-ctl reconfigure
- 访问
默认80端口 可以直接输入你设置的访问
2. 本地安装gitlab CI
- 安装Docker
curl -sSl https://get.docker.com/ | sh
- 安装gitlab ci runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bashsudo yum install gitlab-ci-multi-runner -y查看是否正常运行:gitlab-ci-multi-runner status
- 设置Docker权限(将gitlab-runner用户添加到docker group里面)
usermod -aG docker gitlab-runnerservice docker restartgitlab-ci-multi-runner restart
- 把gitlab-ci-runner 注册到gitlab服务器里面(让服务器知道有这个ci-runner)
gitlab-ci-multi-runner register
具体如图:
- 把gitlab web上添加.gitlab-ci.yml。就可以实现持续集成了!
3. 真实python项目的CI步骤
实验步骤
- 在gitlab web上创建一个flask-demo项目(可以通过import github的项目方式)
github url为:https://github.com/imooc-course/docker-cloud-flask-demo
在本地通过docker run跑起来这个flask-demo项目
在gitlab-ci-runner服务器使用docker来进行CI操作(代码风格检查,语法检查…)
首先解决dns问题,使得ci上的docker能够访问gitlab的域名:
(1)在另一台独立主机启动dns服务:docker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN --name dns-server andyshinn/dnsmasq
(2)配置dns服务:docker exec -it dns-server /bin/sh
配置服务器地址:vi /etc/resolv.dnsmasq添加内容:nameserver 114.114.114.114 nameserver 8.8.8.8
配置本地解析规则:vi /etc/dnsmasqhosts 添加gilab域名解析:192.168.101.128 gitlab.example.com
修改dns服务的配置文件:vi /etc/dnsmasq.conf 内容:resolv-file=/etc/resolv.dnsmasq addn-hosts=/etc/dnsmasqhosts
(3)重启dns-server:docker restart dns-server
修改gitlab服务器的nameserver:vi /etc/resolv.conf nameserver [dns服务器地址]
- 在gitlab-ci-runner服务器创建2个runners(python3.4和python2.7)
gitlab-ci-multi-runner register(excutor选择docker)
- 在gitlab-ci-runner服务器首先pull2个需要的docker镜像(这里是python2.7和python3.4)
docker pull python:3.4/2.7
- 在gitlab web上创建.gitlab-ci.yml会在pipeline上创建running,这就是整个ci过程。
stages:- style- test
pep8:stage: stylescript:- pip install tox- pip -e pep8tags:- python2.7
unittst-py27:stage: testscript:- pip install tox- tox -e py27tags:- python2.7
unittst-py34:stage: testscript:- pip install tox- tox -e py34tags:- python3.4
4. 真实python项目的CD
基于上面CI流程
实验步骤
- 修改.gitlab-ci.yml文件
stages:- style- test- deploy
pep8:stage: stylescript:- pip install tox- tox -e pep8tags:- python2.7
unittst-py27:stage: testscript:- pip install tox- tox -e py27tags:- python2.7
unittst-py34:stage: testscript:- pip install tox- tox -e py34tags:- python3.4
docker-deploy:stage: deployscript:- docker build -t flask-demo .- if [ $(docker ps -aq --filter name=web) ]; then docker rm -f web; fi- docker run -d -p 5000:5000 --name web flask-demotags:- shellonly:- master
注意
1在上述实验过程中,可以在gitlab界面上设置master分支保护,只能允许hotfix或者realease分支merge。只有ci-runner通过后才能push到master分支
2在上述yml文件中,deploy只限制在master分支(only master)。也就是说master分支才出发deploy,其他分支不触发部署,只触发代码检查…等操作。
缺点
以上CD只部署在CI服务器,真实情况下是不行的,会使其部署在其他服务器。
5. CI实现版本自动发布
实验步骤
- 在之前dns服务器搭建私有的docker registry
(1)docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2
(2)在dns-server的docker里面添加记录:[这台主机的ip] registry.example.com
(3)重启dns-server的docker.这样就能在CI服务器上ping通registry.example.com了
(4)在CI服务器上创建文件:vim /etc/docker/daemon.json写入内容:{“insecure-registries”:[“registry.example.com:5000”] }
(5)测试:在ci服务器pull一个busybox镜像,然后push到registry.example.com:5000
docker pull busybox
docker tag busybox registry.example.com:5000/busybox
docker push registry.example.com:5000/busybox(测试成功会出现pushed字眼)
- 修改.gitlab-ci.yml文件
stages:- style- test- deploy- release
pep8:stage: stylescript:- pip install tox- tox -e pep8tags:- python2.7except:- tags
unittst-py27:stage: testscript:- pip install tox- tox -e py27tags:- python2.7except:- tags
unittst-py34:stage: testscript:- pip install tox- tox -e py34tags:- python3.4except:- tags
docker-deploy:stage: deployscript:- docker build -t flask-demo .- if [ $(docker ps -aq --filter name=web) ]; then docker rm -f web; fi- docker run -d -p 5000:5000 --name web flask-demotags:- shellonly:- master
docker-image-release:stage: releasescript:- docker build -t registry.example.com:5000/flask-demo:$CI_COMMIT_TAG .- docker push registry.example.com:5000/flask-demo:$CI_COMMIT_TAGtags:- shellonly:- tags
说明:except:除去什么什么操作不触发;only tags 只在打tags的时候触发
- 在gitlab web上new一个tab就能触发pipeline,使其push到registry服务器
- 最后在docker host上使用k8s或者docker swarm 或者docker原生的方法去update image就可以实现无宕机的更新线上代码。
CI CD(gitlab ci来实现)相关推荐
- Vite(三)部署静态站点(wordpress与hugo与Vercel、CI/CD、Travis CI、GitLab CI)、环境变量与模式、服务端渲染(SSR)
Vite(三)部署静态站点(wordpress与hugo与Vercel.CI/CD.Travis CI.GitLab CI).环境变量与模式.服务端渲染(SSR) 文章目录 Vite(三)部署静态站点 ...
- CI/CD: GitLab Runner安装注册配置管理
点击上方蓝字⭐️关注"DevOps云学堂",接收最新技术实践 今天是「DevOps云学堂」与你共同进步的第 21 天 本文是<GitLabCI实践>教程部分内容 Git ...
- Jenkins和GitLab CI/CD:CI/CD工具之战
持续集成(CI)和持续交付(CD)在过去十年左右时间里取得了长足的进步.DevOps测试的兴起引发了针对CI/CD工具的强烈需求.现有的解决方案一直在与时俱进,无数的新产品或新版本正在进入质量检查领域 ...
- Gitlab配置Gitlab-Runner实现简单的CI/CD
其他博文连接 Ubuntu Server 16.04LTS 搭建GitLab服务器 ubuntu server 16.04 使用docker搭建jenkins和sonarqube Gitlab配置Gi ...
- CI/CD之搭建私有git仓库gitlab
私有仓库Gitlab Gitlab简介 CI/CD 安装Gitlab Gitlab使用 Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起 ...
- GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段
亚搏体育app文件 亚搏体育app CI / CD GitLab CI / CD管道配置参考 GitLab CI / CD管道配置参考 GitLab CI/CD pipeline configurat ...
- iOS之深入解析CocoaPods的GitLab CI与组件自动化构建与发布
一.Gitlab CI/CD 简介 ① GitLab GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或 ...
- Gitlab CI集成sonarqube实现静态代码检查
其他博文连接 Ubuntu Server 16.04LTS 搭建GitLab服务器 ubuntu server 16.04 使用docker搭建jenkins和sonarqube Gitlab配置Gi ...
- 基于docker-compose的Gitlab CI/CD实践排坑指南
长话短说 经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解. 看过博客园<docker ...
最新文章
- Ubuntu 11.1012.04 apt更新错误:Failed to fetch bzip2 packages:...Hash Sum
- 漫谈时序设计(3)走进时序约束的大门!
- AutoCAD.net: DXF群码
- Vue之通过连接数据库的接口获取列表实现添加删除功能
- 工作中收集JSCRIPT代码之(下拉框篇)
- ASP.NET状态管理
- TF实战:(Mask R-CNN原理介绍与代码实现)-Chapter-8
- ts可展开注释_Nike控告WL的始末,和它被TS带货后的几近成名
- 【数据分析】目标优化矩阵表确定权重
- 金蝶k/3 K3云之家消息查询发送是否成功SQL语句
- xp系统安装ftp服务器,xp系统安装ftp服务器
- SLAM领域著名实验室及大牛、SLAM领域大佬(不定期更新)
- w ndows7如何清理垃圾,Win7系统垃圾一键清理工具 一键清除windows7系统垃圾文件
- 10个必备的AutoCAD插件
- Word怎么删除空白页?6个方法随便用!
- 刚学的一招呵呵,愚人节到了,教个大家最强的整人方法
- Linux服务器挂载ntfs硬盘,Linux中挂载NTFS格式的硬盘的方法
- 水质检测 — TDS模块
- namedtuple 具名元组详解
- FPGA自学笔记--串口通信发送多字节数据(verilog版)
热门文章
- 滴滴出行模拟系统C语言,【滴滴出行】2017秋招笔试真题(智力题)
- ITEye改版 今天看仍是不舒服
- 《Decentralized_Privacy_Using_Blockchain-Enabled_Federated_Learning_in_Fog_Computing》精读
- 12.5.2 升12.5.3的补丁 linux下载,lolv3.2.3.2-V4.0.5.1升级-lolv3.2.3.2-V4.0.5.1升级补丁【7.12版本】下载官方最新版-西西软件下载...
- iOS中 UISearchController 搜索栏 UI技术分享
- Joint Extraction of Retinal Vessels and Centerlines Based on Deep Semantics and Multi-Scaled Cross-T
- 利用python编写祝福_Python节日祝福实现
- Anaconda3 + PyQt5 + Eric6 安装
- 第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数
- JS代码实现击鼓传花【队列】