热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎么用GitLab做CI/CD

这篇文章主要讲解了“怎么用GitLab做CICD”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用G

这篇文章主要讲解了“怎么用GitLab做CI/CD”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用GitLab做CI/CD”吧!

GitLab CI/CD 是一个内置在 GitLab 中的工具,用于通过持续方法进行软件开发:

  •  Continuous Integration(CI):持续集成

  •  Continuous Delivery(CD):持续交付

  •  Continuous Deployment(CD):持续部署

持续集成的工作原理是将小的代码块推送到 Git 仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。

持续交付和部署相当于更进一步的 CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。

这些方法使得可以在开发周期的早期发现 bugs 和 errors,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,改文件位于仓库的根目录下。文件中指定的脚本由 GitLab Runner 执行。

GitLab CI/CD 介绍

软件开发的持续方法基于自动执行脚本,以最大程度地减少在开发应用程序时引入错误的机会。从开发新代码到部署新代码,他们几乎不需要人工干预,甚至根本不需要干预。

它涉及到在每次小的迭代中就不断地构建、测试和部署代码更改,从而减少了基于已经存在 bug 或失败的先前版本开发新代码的机会。

  •  Continuous Integration(持续集成),假设一个应用程序,其代码存储在 GitLab 的 Git 仓库中。开发人员每天都要多次推送代码更改。对于每次向仓库的推送,你都可以创建一组脚本来自动构建和测试你的应用程序,从而减少了向应用程序引入错误的机会。这种做法称为持续集成,对于提交给应用程序(甚至是开发分支)的每项更改,它都会自动连续进行构建和测试,以确保所引入的更改通过你为应用程序建立的所有测试,准则和代码合规性标准。

  •  Continuous Delivery(持续交付),持续交付是超越持续集成的更进一步的操作。应用程序不仅会在推送到代码库的每次代码更改时进行构建和测试,而且,尽管部署是手动触发的,但作为一个附加步骤,它也可以连续部署。此方法可确保自动检查代码,但需要人工干预才能从策略上手动触发以必输此次变更。

  •  Continuous Deployment(持续部署),与持续交付类似,但不同之处在于,你无需将其手动部署,而是将其设置为自动部署。完全不需要人工干预即可部署你的应用程序。

GitLab CI/CD 是如何工作的

为了使用GitLab CI/CD,你需要一个托管在 GitLab 上的应用程序代码库,并且在根目录中的 .gitlab-ci.yml 文件中指定构建、测试和部署的脚本。

在这个文件中,你可以定义要运行的脚本,定义包含的依赖项,选择要按顺序运行的命令和要并行运行的命令,定义要在何处部署应用程序,以及指定是否 要自动运行脚本或手动触发脚本。

为了可视化处理过程,假设添加到配置文件中的所有脚本与在计算机的终端上运行的命令相同。

一旦你已经添加了.gitlab-ci.yml到仓库中,GitLab 将检测到该文件,并使用名为 GitLab Runner 的工具运行你的脚本。该工具的操作与终端类似。

这些脚本被分组到 jobs,它们共同组成一个 Pipeline。一个最简单的 .gitlab-ci.yml 文件可能是这样的:

before\_script:       - apt-get install rubygems ruby-dev -y       run-test:       script:         - ruby --version 6

before_script 属性将在运行任何内容之前为你的应用安装依赖,一个名为 run-test 的 job(作业)将打印当前系统的 Ruby 版本。二者共同构成了在每次推送到仓库的任何分支时都会被触发的 Pipeline(管道)。

GitLab CI/CD 不仅可以执行你设置的 job,还可以显示执行期间发生的情况,正如你在终端看到的那样:

怎么用GitLab做CI/CD

为你的应用创建策略,GitLab 会根据你的定义来运行 Pipeline。你的管道状态也会由 GitLab 显示:

怎么用GitLab做CI/CD

最后,如果出现任何问题,可以轻松地回滚所有更改:

怎么用GitLab做CI/CD

基本 CI/CD 工作流程

一旦你将提交推送到远程仓库的分支上,那么你为该项目设置的 CI/CD 管道将会被触发。GitLab CI/CD 通过这样做:

  •  运行自动化脚本(串行或并行) 代码Review并获得批准

    • 构建并测试你的应用

    • 就像在你本机中看到的那样,使用 Review Apps 预览每个合并请求的更改

  •  代码 Review 并获得批准

  •  合并 feature 分支到默认分支,同时自动将此次更改部署到生产环境

  •  如果出现问题,可以轻松回滚

通过 GitLab UI 所有的步骤都是可视化的 。

怎么用GitLab做CI/CD

深入了解CI/CD基本工作流程

如果我们深入研究基本工作流程,则可以在 DevOps 生命周期的每个阶段看到 GitLab 中可用的功能,如下图所示:

怎么用GitLab做CI/CD

Verify:

  •  通过持续集成自动构建和测试你的应用程序

  •  使用 GitLab 代码质量(GitLab Code Quality)分析你的源代码质量

  •  通过浏览器性能测试(Browser Performance Testing)确定代码更改对性能的影响

  •  执行一系列测试,比如 Container Scanning,Dependency Scanning,JUnit tests

  •  用 Review Apps 部署更改,以预览每个分支上的应用程序更改

Package:

  •  用 Container Registry 存储 Docker 镜像

  •  用 NPM Registry 存储 NPM 包

  •  用 Maven Repository 存储 Maven artifacts

  •  用 Conan Repository 存储 Conan 包

Release:

  •  持续部署,自动将你的应用程序部署到生产环境

  •  持续交付,手动点击以将你的应用程序部署到生产环境

  •  用 GitLab Pages 部署静态网站

  •  仅将功能部署到一个 Pod 上,并让一定比例的用户群通过 Canary Deployments 访问临时部署的功能(PS:即灰度发布)

  •  在 Feature Flags 之后部署功能

  •  用 GitLab Releases 将发布说明添加到任意 Git tag

  •  使用 Deploy Boards 查看在 Kubernetes 上运行的每个 CI 环境的当前运行状况和状态

  •  使用 Auto Deploy 将应用程序部署到 Kubernetes 集群中的生产环境

使用 GitLab CI/CD,还可以:

  •  通过 Auto DevOps 轻松设置应用的整个生命周期

  •  将应用程序部署到不同的环境

  •  安装你自己的 GitLab Runner

  •  Schedule pipelines

  •  使用安全测试报告(Security Test reports)检查应用程序漏洞

GitLab CI/CD 快速开始

.gitlab-ci.yml 文件告诉 GitLab Runner 要做什么。一个简单的管道通常包括三个阶段:build、test、deploy

管道在 CI/CD > Pipelines 页面。

创建一个 .gitlab-ci.yml 文件

通过配置 .gitlab-ci.yml 文件来告诉 CI 要对你的项目做什么。它位于仓库的根目录下。

仓库一旦收到任何推送,GitLab 将立即查找 .gitlab-ci.yml 文件,并根据文件的内容在 Runner 上启动作业。

下面是一个 Ruby 项目配置例子:

image: "ruby:2.5"     before\_script:       - apt-get update -qq \&\& apt-get install -y -qq sqlite3 libsqlite3-dev nodejs       - ruby -v       - which ruby       - gem install bundler --no-document      - bundle install --jobs \$\(nproc\)  "\$\{FLAGS\[\@\]\}"       rspec:       script:        - bundle exec rspec    rubocop:       script:         - bundle exec rubocop

上面的例子中,定义里两个作业,分别是 rspec 和 rubocop,在每个作业开始执行前,要先执行 before_script 下的命令。

推送 .gitlab-ci.yml 到 GitLab

git add .gitlab-ci.yml    git commit -m "Add .gitlab-ci.yml"     git push origin master

配置一个 Runner

在 GitLab 中,Runner 运行你定义在 .gitlab-ci.yml 中的作业(job)。

一个 Runner 可以是一个虚拟机、物理机、Docker 容器,或者一个容器集群。

GitLab 与 Runner 之间通过 API 进行通信,因此只需要 Runner 所在的机器有网络并且可以访问 GitLab 服务器即可。

你可以去 Settings ➔ CI/CD 看是否已经有 Runner 关联到你的项目,设置 Runner 简单又直接。

怎么用GitLab做CI/CD

查看 Pipeline 和 jobs 的状态

在成功配置 Runner 以后,你应该可以看到你最近的提交的状态。

怎么用GitLab做CI/CD

为了查看所有 jobs,你可以去 Pipelines ➔ Jobs 页面。

怎么用GitLab做CI/CD

通过点击作业的状态,你可以看到作业运行的日志。

怎么用GitLab做CI/CD

回顾一下:

  •  首先,定义 .gitlab-ci.yml 文件。在这个文件中就定义了要执行的 job 和命令

  •  接着,将文件推送至远程仓库

  •  最后,配置 Runner,用于运行 job

Auto DevOps

Auto DevOps 提供了预定义的 CI/CD 配置,使你可以自动检测,构建,测试,部署和监视应用程序。借助 CI/CD 最佳实践和工具,Auto DevOps 旨在简化成熟和现代软件开发生命周期的设置和执行。

借助 Auto DevOps,软件开发过程的设置变得更加容易,因为每个项目都可以使用最少的配置来完成从验证到监视的完整工作流程。只需推送你的代码,GitLab 就会处理其他所有事情。这使得启动新项目更加容易,并使整个公司的应用程序设置方式保持一致。

下面这个例子展示了如何使用 Auto DevOps 将 GitLab.com 上托管的项目部署到 Google Kubernetes Engine。

示例中会使用 GitLab 原生的 Kubernetes 集成,因此不需要再单独手动创建 Kubernetes 集群。

本例将创建并部署一个从 GitLab 模板创建的应用。

从 GitLab 模板创建项目

在创建 Kubernetes 集群并将其连接到 GitLab 项目之前,你需要一个 Google Cloud Platform 帐户。

下面使用 GitLab 的项目模板来创建一个新项目。

怎么用GitLab做CI/CD

给项目起一个名字,并确保它是公有的。

怎么用GitLab做CI/CD

从 GitLab 模板创建 Kubernetes 集群

点击 Add Kubernetes cluster 按钮,或者 Operations > Kubernetes。

怎么用GitLab做CI/CD

怎么用GitLab做CI/CD

怎么用GitLab做CI/CD

安装 Helm,Ingress 和 Prometheus。

怎么用GitLab做CI/CD

启用 Auto DevOps(可选)

Auto DevOps 默认是启用的。

导航栏 Settings > CI/CD > Auto DevOps。

勾选 Default to Auto DevOps pipeline。

最后选择部署策略。

怎么用GitLab做CI/CD

一旦你已经完成了以上所有的操作,那么一个新的 Pipeline 将会被自动创建。为了查看 Pipeline,可以去 CI/CD > Pipelines。

怎么用GitLab做CI/CD

部署应用

到目前为止,你应该看到管道正在运行,但是它到底在运行什么呢?

管道内部分为4个阶段,我们可以查看每个阶段有几个作业在运行,如下图:

构建 -> 测试 -> 部署 -> 性能测试

怎么用GitLab做CI/CD

现在,应用已经成功部署,让我们通过浏览器查看。

首先,导航到 Operations > Environments。

怎么用GitLab做CI/CD

在 Environments 中,可以看到部署的应用的详细信息。在最右边有三个按钮,我们依次来看一下:

第一个图标将打开在生产环境中部署的应用程序的 URL。这是一个非常简单的页面,但重要的是它可以正常工作!

紧挨着第二个是一个带小图像的图标,Prometheus 将在其中收集有关 Kubernetes 集群以及应用程序如何影响它的数据(在内存/ CPU使用率,延迟等方面)。

怎么用GitLab做CI/CD

第三个图标是Web终端,它将在运行应用程序的容器内打开终端会话。

Examples

使用 GitLab CI/CD 部署一个 Spring Boot 应用。

示例 .gitlab-ci.yml

image: java:8     stages:       - build       - deploy      before\_script:       - chmod +x mvnw     build:       stage: build       script: ./mvnw package      artifacts:         paths:           - target/demo-0.0.1-SNAPSHOT.jar       production:       stage: deploy       script:       - curl --location "https://cli.run.pivotal.io/stable\?release=linux64-binary\&source=github" | tar zx       - ./cf login -u \$CF\_USERNAME -p \$CF\_PASSWORD -a api.run.pivotal.io      - ./cf push       only:       - master

感谢各位的阅读,以上就是“怎么用GitLab做CI/CD”的内容了,经过本文的学习后,相信大家对怎么用GitLab做CI/CD这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 本文将详细介绍如何在Webpack项目中安装和使用ECharts,包括全量引入和按需引入的方法,并提供一个柱状图的示例。 ... [详细]
  • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
  • 如何在方法上应用@ConfigurationProperties注解进行属性绑定 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 本文探讨了在使用 Outlook 时遇到的一个常见问题:无法加载 SAVCORP90 插件,导致软件功能受限。该问题通常表现为在启动 Outlook 时会收到错误提示,影响用户的正常使用体验。文章详细分析了可能的原因,并提供了多种解决方法,包括检查插件兼容性、重新安装插件以及更新 Outlook 版本等。通过这些步骤,用户可以有效解决这一问题,恢复 Outlook 的正常运行。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
author-avatar
夜的泪2502877077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有