Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用 GitLab 做 CI/CD 是什么感觉,太强了!!

用 GitLab 做 CI/CD 是什么感觉,太强了!!

作者头像
xcbeyond
发布于 2020-08-21 07:26:33
发布于 2020-08-21 07:26:33
11.1K02
代码可运行
举报
文章被收录于专栏:技术那些事技术那些事
运行总次数:2
代码可运行

作者丨废物大师兄

来源丨 www.cnblogs.com/cjsblog/p/12256843.html

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

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

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

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

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

1. GitLab CI/CD 介绍

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

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

Continuous Integration(持续集成)

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

Continuous Delivery(持续交付)

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

Continuous Deployment(持续部署)

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

1.1. GitLab CI/CD 是如何工作的

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
before_script:  - apt-get install rubygems ruby-dev -yrun-test:  script:    - ruby --version 6

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

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

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

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

1.2. 基本 CI/CD 工作流程

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

GitLab CI/CD 通过这样做:

  • 运行自动化脚本(串行或并行) 代码Review并获得批准
  • 构建并测试你的应用
  • 就像在你本机中看到的那样,使用Review Apps预览每个合并请求的更改
  • 代码Review并获得批准
  • 合并feature分支到默认分支,同时自动将此次更改部署到生产环境
  • 如果出现问题,可以轻松回滚

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

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

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

1. Verify

  • 通过持续集成自动构建和测试你的应用程序
  • 使用GitLab代码质量(GitLab Code Quality)分析你的源代码质量
  • 通过浏览器性能测试(Browser Performance Testing)确定代码更改对性能的影响
  • 执行一系列测试,比如Container Scanning , Dependency Scanning , JUnit tests
  • 用Review Apps部署更改,以预览每个分支上的应用程序更改

2. Package

  • 用Container Registry存储Docker镜像
  • 用NPM Registry存储NPM包
  • 用Maven Repository存储Maven artifacts
  • 用Conan Repository存储Conan包

3. 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)检查应用程序漏洞

2. GitLab CI/CD 快速开始

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

管道在 CI/CD > Pipelines 页面

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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下的命令

2.2. 推送 .gitlab-ci.yml 到 GitLab

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git add .gitlab-ci.ymlgit commit -m "Add .gitlab-ci.yml" git push origin master

2.3. 配置一个Runner

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

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

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

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

2.4. 查看 pipeline 和 jobs的状态

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

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

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

回顾一下:

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

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

3、最后,配置Runner,用于运行job

3. Auto DevOps

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

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

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

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

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

3.1. 从GitLab模板创建项目

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

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

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

3.2. 从GitLab模板创建Kubernetes集群

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

安装Helm, Ingress, 和 Prometheus

3.3. 启用Auto DevOps (可选)

Auto DevOps 默认是启用的。

导航栏 Settings > CI/CD > Auto DevOps

勾选 Default to Auto DevOps pipeline

最后选择部署策略

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

3.4. 部署应用

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

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

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

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

首先,导航到 Operations > Environments

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

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

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

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

4. Examples

使用GitLab CI/CD部署一个Spring Boot应用。快速上手Spring Boot请关注公众号Java技术栈回复boot获取系列实战教程。

示例 .gitlab-ci.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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

5. Docs

https://about.gitlab.com/solutions/kubernetes/

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

https://docs.gitlab.com/ee/ci/introduction/

https://docs.gitlab.com/ee/topics/autodevops/

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿技术大咖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用 GitLab 做 CI/CD 是什么感觉,太强了
GitLab CI/CD 是一个内置在 GitLab 中的工具,用于通过持续方法进行软件开发:
子润先生
2021/06/18
2.9K0
Gitlab-CICD最简单明了的入门教程
由于目前公司使用的gitlab,大部分项目使用的CICD是gitlab的CICD,少部分用的是jenkins,使用了gitlab-ci一段时间后感觉还不错,因此总结一下
全栈程序员站长
2022/09/07
7K0
Gitlab-CICD最简单明了的入门教程
从GitLabCE CI/CD方法论中探索实践
软件开发的连续方法基于自动执行脚本,以最大程度地减少在开发应用程序时引入错误的机会。从开发新代码到部署新代码,他们几乎不需要人工干预,甚至根本不需要干预。
公众号: 云原生生态圈
2020/11/02
2.3K0
从GitLabCE CI/CD方法论中探索实践
GitLab CI/CD 自动化构建与发布实践
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。这篇文章中,我将会介绍基于 GitLab CI/CD 的自动化构建与发布实践。如下图所示,整个流程将分为几个部分:
Se7en258
2021/11/30
5.1K1
GitLab CI/CD 自动化构建与发布实践
GitLab 内置了一个强大的 CI/CD 系统
GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发:
用户8639654
2021/08/10
1.3K0
CI/CD 工具选型:Jenkins 还是 GitLab CI/CD?
近十年来,持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)领域都取得了很大的进步。DevOps 测试的兴起导致了对 CI/CD 工具的快速需求。现有的解决方案总是随着时间的推移而改进,大量新产品或新版本正在进入 QA 领域。当你手头有这么多选项时,选择正确的工具确实会有一点儿挑战。
Guide哥
2020/10/30
3.5K0
CI/CD 工具选型:Jenkins 还是 GitLab CI/CD?
基于 GitLab CI 搭建自动构建环境
持续集成(Continuous integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。
DevOps时代
2020/06/16
3.3K0
基于 GitLab CI 搭建自动构建环境
使用 GitLab CI 与 Argo CD 进行 GitOps 实践
在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,在网上也可以找到很多关于它的资源,但是关于 GitOps 相关的工作流实践的示例却并不多见,我们这里就将详细介绍一个使用示例,希望对大家实践 GitOps 有所帮助。
我是阳明
2020/07/17
6.1K0
使用 GitLab CI 与 Argo CD 进行 GitOps 实践
GitLab CI/CD:开发和运维管理的效率神器
效率,是所有互联网公司追求的。新服务/产品上线之时,往往是全团队最紧张的时刻。一旦出现异常情况,大家熬通宵全网替换程序,一旦出现异常情况还得全部回滚。然后开发人员白天紧急改 bug,又到深夜来找运维升级。可以说是苦不堪言。
IT运维技术圈
2023/09/07
6880
GitLab CI/CD:开发和运维管理的效率神器
花椒前端基于 GitLab CI/CD 的自动化构建、发布实践
在公司搭建内部 GitLab 平台后,前端活动项目从 SVN 迁移到 GitLab。本文介绍如何基于 GitLab CI/CD 实现自动化构建及发布。
ConardLi
2019/07/04
3.1K0
通过 .gitlab-ci.yml配置任务
从7.12版本开始,GitLab CI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。
leon公众号精选
2022/04/27
6K0
通过 .gitlab-ci.yml配置任务
GitLab CICD与Kubernetes实践·部署Flask Web服务
上篇?Gitlab CICD 与Kubernetes实践·部署GitLab Runner文章内通过Kubernetes已经完成Gitlab Runner的部署的,现在我通过一个实际的案例来测试和使用G
公众号: 云原生生态圈
2020/11/02
2.1K0
GitLab CICD与Kubernetes实践·部署Flask Web服务
Gitlab CI 搭建持续集成环境
在软件工程里,持续集成(Continuous Integration, CI)是指这样的一种实践:在一天里多次将所有开发人员的代码合并到一个共享的主干里,每次合并都会触发持续集成服务器进行自动构建,这个过程包括了编译、单元测试、集成测试、质量分析等步骤,结果只有两个:成功或者失败。如果得到失败的结果,说明有人提交了不合格的代码,这就能及时发现问题。
YP小站
2020/06/04
2.9K0
Gitlab CI 搭建持续集成环境
什么是CI/CD
大家好,我是洋子。CI/CD这个词大家或多或少都听过,甚至在进行软件测试面试时经常会进行考察
Bug挖掘机
2022/09/28
5.2K0
什么是CI/CD
Gitlab CI 配置文件 .gitlab-ci.yaml 详解(上)
本文档用于描述 .gitlab-ci.yml 语法,.gitlab-ci.yml 文件被用来管理项目的 runner 任务。如果想要快速的了解GitLab CI ,可查看快速引导。 从 7.12 版本开始,GitLab CI 使用YAML文件 (.gitlab-ci.yml) 来管理项目配置。该文件存放于项目仓库的根目录,它定义该项目如何构建。
Debian中国
2018/12/21
24.9K0
gitlab 持续集成CI/CD
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。 看完这段话,估计还是有点懵。怎么理解呢?我是这样理解的: 软件集成是软件开发过程中的一个环节,这个环节的工作一般会包括以下流程:合并代码---->安装依赖---->编译---->测试---->发布。软件集成的工作一般会比较细碎繁琐,为了不影响开发效率,以前软件集成这个环节一般不会经常进行或者只会等到项目后期再进行。但是有些问题,如果等到后期才发现,解决问题的代价很大,有可能导致项目延期或者失败。因此,为了尽早发现软件集成错误,鼓励团队成员应该经常集成他们的工作,通常每个成员每天应该至少集成一次。这就是所说的持续集成。所以说,持续集成是一种软件开发实践。 软件集成的工作细碎繁琐,以前是由人工完成的。但是现在鼓励持续集成,那岂不是要累死人,还影响开发效率。所以,应该考虑将软件集成这个工作自动化,这就出现了所谓的持续集成系统。
py3study
2018/08/02
8660
实践分享!GitLab CI/CD 快速入门
用过 GitLab 的同学肯定也对 GitLab CI/CD 不陌生,GitLab CI/CD 是一个内置在 GitLab 中的工具,它可以帮助我们在每次代码推送时运行一系列脚本来构建、测试和验证代码的更改以及部署。
Rainbond开源
2022/09/01
2.1K0
用Gitlab玩CI/CD
持续集成(CONTINUOUS INTEGRATION)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
李俊鹏
2021/02/23
1.5K0
用Gitlab玩CI/CD
1.基于GitLab代码仓库的持续集成基础配置和使用
[TOC] 0x00 前言简述 CI/CD介绍 Q:我们常说的CI/CD是什么? CI 为 Continuous Integration 的缩写持续集成,可以理解为代码变动提交后,自动执行代码编译、代
全栈工程师修炼指南
2022/09/29
4K0
1.基于GitLab代码仓库的持续集成基础配置和使用
GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段
使用在每个项目中调用的YAML文件配置GitLab CI / CD 管道.gitlab-ci.yml。
拿我格子衫来
2022/01/24
23.4K0
相关推荐
用 GitLab 做 CI/CD 是什么感觉,太强了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档