1.基本概念

1.1 CI/CD

CI,Continuous Integration,为持续集成。即在代码构建过程中持续地进行代码的集成、构建、以及自动化测试等;有了 CI 工具,我们可以在代码提交的过程中通过单元测试等尽早地发现引入的错误;
CD,Continuous Deployment,为持续交付。在代码构建完毕后,可以方便地将新版本部署上线,这样有利于快速迭代并交付产品。

1.2 GitLab CI/CD

GitLab CI/CD是一套基于 GitLab 的 CI/CD 系统,可以让开发人员通过 .gitlab-ci.yml 在项目中配置 CI/CD 流程,在提交后,系统可以自动执行任务,完成 CI/CD 操作。而且,它的配置非常简单。GitLab CI/CD是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响。

2.GitLab CI/CD与其他CI/CD工具的区别及其优势

相比其他的CI/CD工具,gitlab CI/CD配置简单,很容易与gitlab集成,与jenkins相比,不需要配置webhook回调地址,也不需要同时在jenkins新建这个项目的编译配置,只需在工程中配置gitlab-ci.yml文件,就可以让这个工程可以进行编译。而且gitlab CI/CD的过程通过gitlab上的界面可以看到。

3.执行流程

整个 CI 环节有三个默认的Stage:build、test 和deploy。

build 被首先执行。如果发生错误,本次 CI 立刻失败;
test 在 build 成功执行完毕后执行。如果发生错误,本次 CI 立刻失败;
deploy 在 test 成功执行完毕后执行。如果发生错误,本次 CI 失败。
如果一个job没有指定stage,默认为test stage。

3.示例项目

3.1 项目详情

tutorial是一个简单的flask应用。

bp = Blueprint('tutorial', __name__)@bp.route('/', methods=['GET'])
def hello():return "Hello World!!!"

docker-compose.yml、Dockerfile为docker的配置文件,用于部署上面的flask 应用。
Dockerfile:

FROM python:3.6.5RUN mkdir -p /var/www/gitlab-ci-exampleWORKDIR /var/www/gitlab-ci-exampleADD . /var/www/gitlab-ci-example/RUN pip install -U pip && pip install -r requirement.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

docker-compose.yml:

version: "3"services:app:build: .container_name: tutorial_appcommand: gunicorn -c gunicorn.py app:appports:- "50001:5000"volumes:- .:/var/www/gitlab-ci-examplenetwork_mode: bridge

3.2 CI/CD 配置

在项目中的根目录创建 .gitlab-ci.yml 文件,来配置 CI/CD 流程。
在 .gitlab-ci.yml 的开头,定义好所有阶段、以及执行每个任务之前所需要的环境变量以及准备工作,然后定义整个流程中包含的所有任务。
下面示例主要流程有测试→部署。

image: "instrumentisto/rsync-ssh"variables:PIP_CACHE_DIR: "~/.cache/pip/"cache:paths:- ${PIP_CACHE_DIR}stages:- build- test- deploybuild_job:stage: buildscript:- echo "build something"- echo "build_job done"test_job:stage: testimage: "python:3.6.5"before_script:- pip -V- pip install -r requirement.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.comscript:# 运行测试命令或脚本- python tests/test_view.py- echo "test something"- echo "test_job done"deploy_job:stage: deploywhen: manualbefore_script:- target_address= "服务器地址"- ssh-keyscan ${target_address} > ~/.ssh/known_hosts- chmod 644 ~/.ssh/known_hostsscript:# ssh连接远程服务器执行相应命令# 更新代码、重启docker等操作- project_name=gitlab-ci-example- stage_srv=gamesdk@${target_address}- work_dir=/home/apps- rsync -av -e ssh --exclude='*.git' ./ ${stage_srv}:${work_dir}/${project_name}- ssh ${stage_srv} "docker-compose -f ${work_dir}/${project_name}/docker-compose.yml up -d --build"- ssh ${stage_srv} "docker-compose -f ${work_dir}/${project_name}/docker-compose.yml ps"- echo "deploy something"- echo "deploy_job done"only:- master

3.3 自动测试

在测试任务中,准备工作是把需要的环境和库安装上,在before_script中完成。
完成该准备工作后就可以在script在执行测试命令或执行测试脚本等。

3.4 自动部署

在部署任务中,准备工作是把需要操作的服务器的公钥指纹收集到known_hosts中。
接着,把最新代码同步到服务器对应目录,然后通过ssh在服务器上执行相应的部署操作(启动或重启docker服务)。
运行成功后访问相应地址的50001端口即可看见“Hello World!!!”。

4.关键字参数

参考或引用链接

https://docs.gitlab.com/ee/README.html

https://blog.csdn.net/Choerodon/article/details/97751754

https://segmentfault.com/a/1190000011890710

使用GitLab CI/CD进行自动测试和部署相关推荐

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

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

  2. Springboot 项目通过 gitlab CI/CD 集成 k8s 自动部署

    本章节主要讲的是 springboot 项目发到 gitlab 仓库,触发 gitlab ci/cd 实现项目自动集成和部署,其中部署是以 k8s 方式部署 关于 gitlab-runner 安装和注 ...

  3. Gitlab CI/CD教程以及实战docker自动部署前端项目(全)

    目录 前言 1. 技术知识 1.1 docker安装gitlab 1.2 docker安装gitlab-runner 1.3 .gitlab-ci.yml编写 1.4 使用docker部署前端项目 1 ...

  4. jenkins 增量发布插件_CI/CD工具:Jenkins还是GitLab CI/CD?

    十年来,持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)领域都取得了很大的进步.DevOps 测试的兴起导致了对 CI/CD 工 ...

  5. GitLab CI/CD

    GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuous Integration (CI)  持续集成 Continuous Delivery ...

  6. 带你深入了解 GitLab CI/CD 原理及流程

    作者:狂乱的贵公子 cnblogs.com/cjsblog/p/12256843.html GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuo ...

  7. winform 项目 发布后比本地运行慢_前端团队基于 GitLab CI/CD 的自动化构建、发布实践,快来学习吧...

    在公司搭建内部 GitLab 平台后,前端活动项目从 SVN 迁移到 GitLab.本文介绍如何基于 GitLab CI/CD 实现自动化构建及发布. 在从 SVN 迁移到 GitLab 和接入 Gi ...

  8. 【GitLab】GitLab CI/CD 模型部署自动化超详细介绍

    文章目录 一.GitLab 二.GitLab-CI/CD 2.1 gitlab-ci.yml 2.1.1 基础概念 2.1.2 创建 yml 文件 2.1.3 yml 文件中的关键字 2.2 GitL ...

  9. 晨光科力普基于GitLab CI/CD持续集成服务的应用

    科力普省心购是晨光文具集团在2019年初为了拓展综合办公物资采购业务成立的B2B电商平台.随着云时代容器技术的火热发展,Docker.Kubernetes等容器化技术越来越受到研发团队的喜爱.因此,省 ...

  10. Gitlab CI/CD:入门指南

    功能概览 CI/CD工作流 上图是基本的CI/CD工作流,与之对应的,gitlab几乎提供了上述流程节点所需的所有相关功能: 阶段 功能 1. Verify 通过持续集成自动构建和测试你的应用程序 使 ...

最新文章

  1. .net core 17
  2. 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)
  3. 值得收藏的信息安全知名博客
  4. 用C实现任意一年的日历
  5. Flink : exitCode=1 the main method caused an error: could not deploy yarn job cluster
  6. Android开发笔记(八十四)使用Properties读写属性值
  7. java static关键字_Java基础:static关键字作用总结
  8. mysql修改数据库与级别_数据库MySQL查看和修改事务隔离级别的实例讲解
  9. 乒乓球比赛赛程_2020乒乓球比赛赛程表
  10. android写日记app,写日记的app哪个好用 写日记的软件有哪些
  11. 大数据技术之_13_Azkaban学习_Azkaban(阿兹卡班)介绍 + Azkaban 安装部署 + Azkaban 实战
  12. cityengine导入并创建路网
  13. 正则表达式在线测试通过,java运行通不过
  14. 有自学能力的人,赚钱极其简单—来福宝盒
  15. C++ error C2059: 语法错误:“常数”
  16. 真香!用Python检测和识别车牌(附代码)
  17. 大唐波斯将军 机器人_波斯帝国被阿拉伯所灭,末代王子三次求助大唐,为何唐朝没有出兵?...
  18. 知道焊缝长度如何确定节点板尺寸_钢桁架节点图 中各尺寸确定原则 总结
  19. java 如何建立servlet_Servlet怎么新建
  20. QT5.9.0配置opencv

热门文章

  1. 可乐要加冰才好喝啊 --- 装饰模式
  2. 12.图形裁剪——二维裁剪+三维裁剪+Sutherland-Cohen裁剪算法+中点分割算法
  3. 本周AI热点回顾:波士顿动力机器狗去新西兰放羊了、微软WSL将支持GPU、ERNIE-GEN刷新SOTA
  4. u盘启动会进入w ndows安装程序,u启动一键u盘安装Ghost Win7系统教程_u启动
  5. iphone科学计算器使用
  6. 小技巧2:Python 实现阿拉伯数字转化为中文数字
  7. mysql 联合主键_mysql 联合主键和复合主键的区别
  8. 成年人的世界,不过如此
  9. cass等距离等分线段的命令键_cass线段怎么等分命令是什么
  10. Android常用十大框架