50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

CI/CD 工具选型:GitLab 还是 AWS?

  • 2020-11-29
  • 本文字数:3518 字

    阅读完需:约 12 分钟

CI/CD 工具选型:GitLab 还是 AWS?

本文最初发布于 beSharp,经原作者授权由 InfoQ 中文站翻译并分享。


GitLab 已成为一款广受欢迎的、集众多功能于一身的 DevOps 工具,它既可以在内部部署,又有 SaaS 版本供人选择。


代码库维护、流水线运行,以及管理项目信息等常用任务,免费版 GitLab 足矣。亚马逊云服务(AWS)则采用按实际使用量付费的模式,借助一系列包括 AWS CodeCommitAWS CodeBuildAWS CodePipeline 在内的服务,实现了 CI/CD 的最佳实践。


在规划新业务,或是将老应用迁移到云端时,如何选择合适的工具一直都是个伤脑筋的事。但不要担心,我亲爱的开发者们——这篇文章将通过一场终极巅峰对决来帮你理清头绪!既然目标是云环境,那么我们首先需要找到一个共同的战场来展开决斗:公平起见,我们将应用 AWS 架构完善的框架详解(AWS Well-Architected Framework),该框架由 AWS 设计,旨在帮助用户设计可维护、安全、弹性、高效,且具有成本效益的应用程序和架构。


我们将以 AWS 的五大基础支柱:卓越操作、安全性、可靠性、性能效率,以及成本效益为设计参考。因为这五大支柱并不涉及 AWS 的具体服务项目,所以可以被广泛应用在任何服务或基础设施的构建上。


接下来让我们热烈欢迎选手入场!两方选手,GitLab 和 AWS CodePipeline,正在进行热身!

比赛规则


在这场 GitLab 和 AWS CodePipeline 的虚拟比赛中,规则如下:五大支柱中每一条算作一轮,最终根据支柱的设计原则进行评分。

第一轮:卓越操作


在这一轮比赛中,我们将依据以下规则进行评分:


  • 以代码形式进行操作

  • 频繁进行小规模、可逆修改

  • 频繁完善操作程序

  • 预测失败

  • 从所有的操作失败中吸取教训


GitLab 和 CodePipeline 可以为不同的任务定义不同的流水线,项目的构建和部署也都可以用 yaml 模板解决。因此,定义不同阶段,并在每个阶段中执行步骤是可行的。


我们将使用这个示例。


GitLab 服务器端:


image: python:latestvariables:  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"test:  script:  - python setup.py test  - pip install tox flake8  # you can also use tox  - tox -e py36,flake8run:  script:    - python setup.py bdist_wheel    - pip install dist/*  artifacts:    paths:      - dist/*.whl
复制代码


轮到 CodePipeline 上场:


version: 0.2env:  variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"phases:  test:        - python setup.py test        - pip install tox flake8  # you can also use tox        - tox -e py36,flake8run:        - python setup.py bdist_wheel        - pip install dist/*        artifacts:  files:      - dist/*.whl
复制代码


GitLab 允许定义构建用 image,而 CodePipeline 则允许在流水线中定义,而非是构建过程中定义 image。二者语法清晰且相当类似,派生也非常灵活。


1-1 平手。


无论如何,CodePipeline 允许使用 Cloud Formation 部署全部的基础架构堆栈。这就意味着整体架构的持续交付!


CodePipeline 暂时领先:2-1

第二轮:安全性


在这一轮比赛中,我们将根据以下规则进行评分:


  • 允许追溯

  • 在所有层面中实施安全防护

  • 自动化最佳安全措施

  • 保护传输状态与非传输状态中的数据

  • 确保非授权人员无法接触数据

  • 为安全事件做好准备


GitLab 提供的认证机制让用户可以利用其他 IdP,诸如 Active Directory 和 SAML 的联盟,如果有好好规划过配置的话,就将能享受到集中式用户管理的优势。总之,如果你的组同样需要 SAML SSO 的话,那么你恐怕只能选择付费计划了。


AWS CodePipeLine 使用与 AWS 相同的身份验证与授权层:其具有 Active Directory、SAML,以及......为 group 服务的 SAML SSO。鉴于 GitLab 免费版并不能提供所有的身份验证功能,AWS 领先一分。


下面让我们来看看可追溯性和让人们远离数据:GitLab 中的审计日志仅在可在付费版中查看,而 CloudTrail 的审计日志则是注册可用,并且账户中所有服务均可使用。


AWS 得分:3-1


于 GitLab 而言,最难处理的部分可以在 GitLab 上关于运行程序安全性存储数据(缓存和构件)加密的公开 issue 和讨论中找到。


利用 AWS 服务部署应用则更需要考虑 runner-manager 角色的授权问题。部署使用不同服务的不同应用,需要授予 runner 更多的权限,或者你也可以选择生成更多的 runner,并授予他们最低访问权限。需要注意的是,这样做会导致资源数量和成本的增加。


因为 AWS 可以为每一款服务提供存储与传输时数据加密,这一轮的获胜者是 AWS。另外,IAM 角色还可以让你免去使用 token,密钥(access key)或者其他脆弱的服务认证机制。


CodePipeline 再得一分!目前比分:4-1

第三轮:可靠性


在这一轮比赛中,我们将根据以下几点进行评分:


  • 故障恢复自动化

  • 恢复测试程序

  • 横向扩展提高总工作负载的可用性

  • 停止猜测容量

  • 自动管理变更


在进一步讨论之前,请注意,这一次的结果很大程度上取决于,你对使用这两种服务中实现构建环境时的期望。


GitLab 和 AWS CodePipeline 都拥有横向可扩展的特点,二者都可以自动完成变更、无需人为干预即可自动进行高级容量规划(为 GitLab 使用单个大型内部 runner 除外)


二者各得一分,比分 5-2


而在扩展的灵活性上,GitLab 使用的是插件系统,用户也可以使用自定义执行器。这项功能可以称得上是意外之喜了,干得漂亮 GitLab:5-3


AWS CodePipeLine 允许用户使用多可用区部署。举例来说,这项功能可以确保在 eu-west-1-a 区出现故障时,用户的构建可以在另外两个可用区中运行。需要注意,如果你使用的是 GitLab 的 EC2 自动扩展插件,将无法实现多可用区部署。下面的配置示例来源于这个示例


[runners.machine]    IdleCount = 1    IdleTime = 1800    MaxBuilds = 10    MachineDriver = "amazonec2"    MachineName = "gitlab-docker-machine-%s"    MachineOptions = [      "amazonec2-access-key=XXXX",      "amazonec2-secret-key=XXXX",      "amazonec2-region=us-central-1",      "amazonec2-vpc-id=vpc-xxxxx",      "amazonec2-subnet-id=subnet-xxxxx",      "amazonec2-zone=x",      "amazonec2-use-private-address=true",      "amazonec2-tags=runner-manager-name,gitlab-aws-autoscaler,gitlab,true,gitlab-runner-autoscale,true",      "amazonec2-security-group=xxxxx",      "amazonec2-instance-type=m4.2xlarge",    ]
复制代码


由此可见,只设置一个子网和一个可用区是可行的。这样一来,当这个区域发生故障是,你的配置同样也会失败。AWS 得分,现在比分 6-3


注意,虽然你可以选择使用自定义执行器来提高可靠性,但这样一来,你就需要自己开发并测试,会浪费不少时间。


接下来让我们继续最后两轮的比赛。

第四轮:性能效率


在这一轮比赛中,我们将根据以下几点进行评分:


  • 先进技术的民主化

  • 只需几分钟便可全球化

  • 使用无服务架构

  • 多做实验

  • 在考虑到的情况下,请注意以下几点特殊情况


即使 GitLab 与 Code Pipeline 有许多共同点,但 GitLab 支持许多不同的部署和配置,在灵活性上更胜一筹。


GitLab 再得一分:6-4


另一方面,CodePipeline 对 Fargate 平台上的无服务器构建提供了更好的支持,相比之下,GitLab 对部分无服务器方式支持有限。举例来说,你不能在 fargate 自定义执行程序的同一个 Docker 套接字中使用 Docker 中的 Docker。


看来这一轮比赛又是平局收场。AWS Pipeline 和 GitLab 各得一分,现在比分:7-4

第五轮:成本效益


在这一轮比赛中,我们将根据以下几点进行评分:


  • 实现云财务管理

  • 采用消费模式

  • 衡量整体效率

  • 拒接将钱花费在无意义的重活上

  • 分析和分配支出


首先让我们来分析一下这两款服务的定价模式。GitLab 选择基于买家的定价模式,而 AWS 的账户则是免费的。CodeBuild的收费是根据用户使用资源构建的持续时间,按分钟计费。假设使用 general1.small(双核 3GB RAM),那么费用将会是 5 美元/1000 分钟。


而使用 GitLab 的共享 runner,费用将会是 10 美元/1,000 分钟(前 2,000 分钟免费)。


如果你不想使用 GitLab 的共享 runner,那么你还有 AWS 的 Auto Scaling 可选。但请记住,你需要为 runner 管理准备一个 EC2 示例,而为了构建能够扩展,你还需要再准备一个示例。你也可以可以在业务允许的情况下,选择提前购买预购示例,或者使用现货示例。


对于这一轮比赛,胜者毫无疑问:AWS CodePipeline 以更多的预建和开箱即用的集成解决方案夺得最后一分!

结论


两款最广泛使用的服务之间的友谊赛已经结束。以 8-4 的比分,让我们欢迎 AWS CodePipeline 登上冠军的领奖台!


AWS 会保持它的霸主地位吗?


不要误会,GitLab 仍然是个非常优秀的服务。对团队而言,它拥有强大的功能;对开发者来说,它拥有顶级的用户体验。在某些特定的条件、特定的用例下,它仍是最好的选择。


而在其他的情况下,二选一永远不是个好主意。根据不同的需求,两种服务的共同使用可能是个更明智的选择。


原文链接


GitLab VS AWS CodePipeline: the ultimate Battle Royal!

2020-11-29 16:595369

评论 1 条评论

发布
用户头像
垃圾,看似有用的对比,实际无价值,视角不同,场景不同
2020-11-29 17:41
回复
没有更多了
发现更多内容

CSS 新特性,建议收藏!

秃头小帅oi

CSS 前端

一文看懂:5分钟玩转容器云,彻底化解业务上云烦恼

统信软件

使用1688开放平台API接口获取商品详情信息

Noah

无服务器开发实例|微服务向无服务器架构演进的探索

亚马逊云科技 (Amazon Web Services)

Serverless 微服务 API Amazon Lambda Amazon API Gateway

Amazon EC2 新手初探:更多实例连接方式

王强

Amazon EC2 亚马逊云服务

Navicat 基于 GaussDB 主备版的快速入门

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

ON1 Photo RAW 2024 for Mac(RAW照片编辑软件)

展初云

Mac 照片编辑软件

AWS向量数据库Amazon OpenSearch Service使用测评

查拉图斯特拉说

亚马逊云科技 向量数据库 opensearch service

现身说法:2023中级程序员进阶之路

伤感汤姆布利柏

程序员 程序员成长

AWS云服务器EC2实例实现ByConity快速部署

乌龟哥哥

AWS

Wireshark网络工具是什么?

小魏写代码

Amazon EC2 新手初探:操作我们的实例

王强

Amazon EC2 亚马逊云服务器

BetterDisplay Pro for Mac v2.0.11激活版

加油,小妞!

BetterDisplay Pro 显示器校准工具

00后如何组织双十一大促看这一篇就够了! | 京东云技术团队

京东科技开发者

监控 电商大促 容灾备份 企业号11月PK榜 大促备战

使用 VuePress 和 Vercel 打造个人技术博客:实现自动化部署

小白Coding日志

GitHub 个人博客 自动部署 Vuepress2.X Vercel

SynVision AI: 虚拟助手的革命

Synvision.AI

人工智能 AI 智能助手 问答助手 聊天助手

向量数据库——AI时代的基座

陈老老老板

#人工智能

解锁未来:通过数字孪生和区块链进行物联网管理

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

关注潜在的整数越界问题 | 京东物流技术团队

京东科技开发者

spring 企业号11月PK榜 整数越界

PullTube for Mac(在线视频下载工具)

展初云

视频下载 Mac软件

在你购买小间距led显示屏时需要注意这些事项

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家 户内led显示屏

Parallels Desktop 18 虚拟机 支持M1

彩云

虚拟机 Parallels Desktop 18

达达埋点迁移京东子午线实践 | 京东云技术团队

京东科技开发者

埋点设计 企业号11月PK榜 埋点迁移 架构迁移

高效开发与设计:提效Spring应用的运行效率和生产力 | 京东云技术团队

京东科技开发者

spring 性能优化 SpringBoot启动流程 企业号11月PK榜

BetterDisplay Pro for Mac(显示器校准软件)

展初云

Mac软件 BetterDisplay

Mac电脑视频剪辑Final Cut Pro激活版中文最新

胖墩儿不胖y

Mac软件 视频处理工具 视频剪辑软件 视频编辑器

NFTScan | 11.13~11.19 NFT 市场热点汇总

NFT Research

NFT\ NFTScan nft工具

Xmind for Mac(思维导图软件) 24.01中文版

加油,小妞!

思维导图 mac软件下载

CI/CD 工具选型:GitLab 还是 AWS?_服务革新_beSharp_InfoQ精选文章