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来实现)相关推荐

  1. Vite(三)部署静态站点(wordpress与hugo与Vercel、CI/CD、Travis CI、GitLab CI)、环境变量与模式、服务端渲染(SSR)

    Vite(三)部署静态站点(wordpress与hugo与Vercel.CI/CD.Travis CI.GitLab CI).环境变量与模式.服务端渲染(SSR) 文章目录 Vite(三)部署静态站点 ...

  2. CI/CD: GitLab Runner安装注册配置管理

    点击上方蓝字⭐️关注"DevOps云学堂",接收最新技术实践 今天是「DevOps云学堂」与你共同进步的第 21 天 本文是<GitLabCI实践>教程部分内容 Git ...

  3. Jenkins和GitLab CI/CD:CI/CD工具之战

    持续集成(CI)和持续交付(CD)在过去十年左右时间里取得了长足的进步.DevOps测试的兴起引发了针对CI/CD工具的强烈需求.现有的解决方案一直在与时俱进,无数的新产品或新版本正在进入质量检查领域 ...

  4. Gitlab配置Gitlab-Runner实现简单的CI/CD

    其他博文连接 Ubuntu Server 16.04LTS 搭建GitLab服务器 ubuntu server 16.04 使用docker搭建jenkins和sonarqube Gitlab配置Gi ...

  5. CI/CD之搭建私有git仓库gitlab

    私有仓库Gitlab Gitlab简介 CI/CD 安装Gitlab Gitlab使用 Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起 ...

  6. GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段

    亚搏体育app文件 亚搏体育app CI / CD GitLab CI / CD管道配置参考 GitLab CI / CD管道配置参考 GitLab CI/CD pipeline configurat ...

  7. iOS之深入解析CocoaPods的GitLab CI与组件自动化构建与发布

    一.Gitlab CI/CD 简介 ① GitLab GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或 ...

  8. Gitlab CI集成sonarqube实现静态代码检查

    其他博文连接 Ubuntu Server 16.04LTS 搭建GitLab服务器 ubuntu server 16.04 使用docker搭建jenkins和sonarqube Gitlab配置Gi ...

  9. 基于docker-compose的Gitlab CI/CD实践排坑指南

    长话短说 经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解. 看过博客园<docker ...

最新文章

  1. Ubuntu 11.1012.04 apt更新错误:Failed to fetch bzip2 packages:...Hash Sum
  2. 漫谈时序设计(3)走进时序约束的大门!
  3. AutoCAD.net: DXF群码
  4. Vue之通过连接数据库的接口获取列表实现添加删除功能
  5. 工作中收集JSCRIPT代码之(下拉框篇)
  6. ASP.NET状态管理
  7. TF实战:(Mask R-CNN原理介绍与代码实现)-Chapter-8
  8. ts可展开注释_Nike控告WL的始末,和它被TS带货后的几近成名
  9. 【数据分析】目标优化矩阵表确定权重
  10. 金蝶k/3 K3云之家消息查询发送是否成功SQL语句
  11. xp系统安装ftp服务器,xp系统安装ftp服务器
  12. SLAM领域著名实验室及大牛、SLAM领域大佬(不定期更新)
  13. w ndows7如何清理垃圾,Win7系统垃圾一键清理工具 一键清除windows7系统垃圾文件
  14. 10个必备的AutoCAD插件
  15. Word怎么删除空白页?6个方法随便用!
  16. 刚学的一招呵呵,愚人节到了,教个大家最强的整人方法
  17. Linux服务器挂载ntfs硬盘,Linux中挂载NTFS格式的硬盘的方法
  18. 水质检测 — TDS模块
  19. namedtuple 具名元组详解
  20. FPGA自学笔记--串口通信发送多字节数据(verilog版)

热门文章

  1. 滴滴出行模拟系统C语言,【滴滴出行】2017秋招笔试真题(智力题)
  2. ITEye改版 今天看仍是不舒服
  3. 《Decentralized_Privacy_Using_Blockchain-Enabled_Federated_Learning_in_Fog_Computing》精读
  4. 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版本】下载官方最新版-西西软件下载...
  5. iOS中 UISearchController 搜索栏 UI技术分享
  6. Joint Extraction of Retinal Vessels and Centerlines Based on Deep Semantics and Multi-Scaled Cross-T
  7. 利用python编写祝福_Python节日祝福实现
  8. Anaconda3 + PyQt5 + Eric6 安装
  9. 第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数
  10. JS代码实现击鼓传花【队列】