关于cicd:项目开展CICD的实践探路-京东物流技术团队

本文介绍了作者对CICD的了解以及在我的项目中发展CICD的几种场景,总结了每种场景实际的要害节点、带来的收益,以及联合具体我的项目发展的理论利用。读者能够借鉴本文中形容的场景,或借鉴文中提到的实际形式,在我的项目中发展CICD,为我的项目在继续集成部署上做具体的撑持。 1 前言基于公司Bamboo、EOS,SonarQube平台,在我的项目中发展CICD继续集成与部署。介绍CICD发展的场景,我的项目中的理论利用,以及后续布局。 2 CICD根底概念CICD 是继续集成(Continuous Integration)和继续部署(Continuous Deployment)简称。指在研发过程中主动执行一系列脚本来升高开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的染指。 CICD 外围:继续集成、继续部署、继续交付。 CI:Continuous Integration,示意继续集成。 指在向近程仓库 push 代码后,在这次提交合并入主分支前进行一系列测试,构建等流程。 假如当初有个利用的代码存储在 仓库上,每天开发都会 push 很屡次提交,针对每次 push,你能够创立一系列脚本进行自动测试,升高往利用里引入谬误的概率。它能够利用在包含开发分支在内的多个分支上。 继续集成过程中很器重自动化测试验证后果,以保障所有的提交在合并主线之后的品质问题,对可能呈现的一些问题进行预警。 CD:Continuous Delivery,示意继续交付。 指在实现CI后可主动将已验证的代码公布到仓库。 继续交付的指标是领有一个可随时部署到生产环境的代码库。 CD:Continuous Deployment,示意继续部署。 指在继续集成的根底上更进一步,指将推送指仓库默认分支代码部署到特定环境。 通过自动化的构建、测试和部署循环来疾速交付高质量的产品。某种程度上代表了一个开发团队工程化的水平,任何批改通过了所有已有的工作流就会间接和客户见面,只有当一个批改在工作流中构建失败能力阻止它部署到产品线。 3 CICD的发展场景3.1 编译部署实现代码提交之后的主动编译-部署过程,取代j-one上构建-部署手动操作 内容: 代码提交后的主动构建、主动部署、构建部署后果告诉;收益: 去除Jone上代码构建实现后的手动部署操作中等待时间;3.2 单元测试发展基于Junit的单元测试 内容: 针对后端代码,基于Junit编写单元测试脚本,发展单测,获取单测报告、jacoco代码覆盖率报告;收益: 晋升测试覆盖率,进步代码品质;缩小bug,疾速定位bug;无限撑持重构;3.3 代码扫描实现基于SonarQube的代码品质检测 实现基于EOS的代码品质检测 内容: 实现基于SonarQube、或公司平台EOS的代码扫描检测;代码提交主动触发代码扫描,最终生成报告、后果告诉;扫描后果计入我的项目品质,记录跟踪问题,直至问题闭环解决。收益: 代码品质检测的伎俩丰盛;多层次的自动化测试,晋升代码品质;主动触发测试执行,缩减测试等待时间,提高效率,实现无人值守;3.4 自动化测试实现基于Python、EasyOne、DeepTest、Jmeter 的自动化测试。 内容: 实现基于SonarQube的代码品质检测;实现全链路各环节的自动化测试;代码提交主动触发测试执行、生成报告、报告告诉;收益: 多层次的自动化测试,晋升代码品质;主动触发测试执行,缩减测试等待时间,提高效率,实现无人值守;3.5 全链路测试摸索将上述单个场景进行组合造成全链路测试场景; 代码提交触发链路主动运行,以及报告生成、邮件发送。 4 我的项目实际联合公司外部平台在理论我的项目中发展CICD。 4.1 公司外部平台Bamboo Bamboo是京东自研的一套CI/CD流水线解决方案,笼罩软件开发的残缺生命周期。 EOS EOS是技术与数据中台自主研发的代码扫描零碎,通过扫描剖析代码,定位到工程中不标准的编码片段并给出批改倡议,能无效监督束缚开发人员对立编码习惯,缩小因编码不标准引起的低级谬误,进步代码可读性,进步团队合作效率。 4.2 我的项目理论利用1)编译-部署 ...

August 25, 2023 · 1 min · jiezi

关于ci-cd:如何扩展及优化CICD流水线

现在应用程序的开发通常由多个开发人员组成的团队实现。每个人或团队在我的项目中施展本人的作用,而后咱们发现在我的项目的开端总是有几段代码须要编译,依据每个人的工作办法,治理这种集成可能会节约很多工夫。继续集成和继续交付/部署(CI/CD)便用来解决该问题,确保公布更新顺利进行,防止不必要的提早和抵触。  因而为利用程序开发和施行 CI/CD 工作流程越来越广泛,与此同时,施行 CI/CD 时也面临许多挑战。在明天的文章中咱们将一起探讨这些挑战具体是什么,以及咱们该当如何对 CI/CD 进行扩大和优化。  CI/CD 流程中的挑战CI/CD 过程迟缓速度是任何 CI/CD 过程的重要因素之一。如果您的 CI 服务器和部署须要半小时能力实现该过程,并且您有多个团队,每个团队打算每天部署几次,那么您的 CI/CD 流水线的确会被阻塞。开发人员必须在队列中期待 CI/CD 可用。一些企业限度了能够在给定工夫运行的流水线,但这样仍旧无奈无效提供古代企业所需的疾速公布。  设置新流水线很简单当今 CI/CD 流水线应用的基础设施简单且难以设置。大多数新应用程序都应用微服务,这会频繁触发新的 CI/CD 流水线启动。然而当您扩大现有的 CI/CD 基础架构时,必须解决与云基础架构相干的许多简单问题。如果流水线和基础设施治理不是自动化的,这将节约许多工夫在为新流水线配置基础设施和配置上。  单个 CI 服务器产生阻塞在基于微服务的应用程序部署中,CI 服务器是安稳公布工作流程的关键点。如前所述,微服务疾速触发 CI 服务器,CI 服务器因为申请过多而阻塞是很常见的。您能够垂直扩大 CI 服务器,这将临时解决问题,但最终您将须要创立多个具备独立职责的 CI 服务器。即便是一个整体但一直增长的应用程序也会在冲刺完结时阻塞你的 CI 服务器,因为在最初一分钟有太多的代码更改,并且均匀每 30 分钟就会有不同的开发人员进行部署。  扩大 CI/CD当微服务数量减少时,对 CI/CD 进行扩大是不可避免的。微服务数量的减少导致不同的流水线连贯到单个 git 存储库,这减少了 CI 服务器的负载并升高了性能。要扩大 CI/CD,为所有团队创立一个标准化和自动化的开发流水线,确保开发人员交付和团队交付的品质,同时还让流水线的治理变得容易。  能够通过定义用于执行单元测试和验证交付代码品质的CI 流程来实现扩大,随后是用于构建镜像并将它们继续部署到环境中的 CD 过程,最初定义用于构建镜像并将它们部署到生产环境中的过程。接下来咱们将按步骤来解说如何对 CI/CD 进行扩大。  扩大 CI/CD 的步骤流水线遵循 Git 分支到环境的映射(开发 ➡️ 开发和主控 ➡️ 批准和生产)。而后在每次拉取申请时触发 CI 作业,在映射分支中的每次更改时触发 CD 作业。能够依照以下步骤来创立 CI 和 CD 工作流。  ...

June 26, 2023 · 1 min · jiezi

关于ci-cd:打通微信小程序自动化部署最后一步微信第三方平台

之前在公司搭建了一个前端部署平台(cb-cycle),波及小程序、网页利用的部署。(流程节点可自定义开发,原则上任意程序都能够实现部署,甚至不至于部署)。 无奈小程序自动化只能到上传代码(miniprogram-ci)这一步,连根本的主动设为体验版都做不到(当然能够手动固定机器人版本默认作为体验版),手工运维占了大部分,导致这小程序自动化部署性能被诟病。 当然如果前行是能够将这个流程跑通的:通过保护管理员账户通过无头浏览器进行主动保护,对我来说属于不到无可奈何不干的事件。 不过好巧工作这么久的常识让我受益匪浅,脑子里蹦出了“微信第三方平台”。 什么是“微信第三方平台”摘一段官网形容: 微信官网为了帮忙服务商开发者能够更加聚焦业务开发,缩小在环境搭建、管理工具建设等我的项目的老本投入,推出“一键搭建第三方平台后端服务、一键部署第三方平台管理工具”的性能,助力服务商更高效地基于第三方平台开展业务。 由官网保护迭代的“第三方平台后端服务”以及名称为【服务商微管家】的“第三方平台管理工具”,以镜像形式和开源的形式进行凋谢。开发者一键部署即可取得开箱即用的后端服务与服务商 saas 利用(服务商微管家),开发者也能够进行与业务的开发对接。 在该板块中次要介绍该工具的性能、使用指南、开发和保护指南等相干内容。 简略说:就是能够通过第三方对受权的公众号小程序进行部署保护和开发。 本文不介绍账户注册审核相干信息,如果须要请关注微信第三方文档。 https://developers.weixin.qq.... 官网提供了一套基于golang的程序跑起来就能够实现大部分事件了。 https://developers.weixin.qq.... 流程劣势原有根底流程: 开发 -> 手动上传代码 -> 手动 [体验版测试] -> 手动提交审核 -> 手动公布(灰度?) 现有自动化:比照上一个流程,只是标准了分支和上传。 开发 -> 上传到开发分支 -> 合并到[测试|公布分支] -> webhook触发构建 -> 上传代码  -> 手动 [体验版测试] -> 手动提交审核 -> 手动公布(灰度?) 接入第三方的自动化:残缺的从开发到公布的标准,几乎完满,就是步骤多了一点。 开发 -> 上传到开发分支 -> 合并到[测试|公布分支] -> webhook触发构建 -> 上传草稿代码 -> 设置成模版代码 -> 上传模版代码 ->  [体验版测试] -> 提交审核 -> 公布(灰度?) 从上传到公布都能够通过第三方平台进行。 利用接入当领有第三方平台利用后第一步就是接入了,这个很简略通过官网程序让管理员抉择小程序进行接入就好了。 利用开发相比旧的开发,这里的改变十分小,只减少了一个ext.json的配置文件。ext.json决定开发时采纳的小程序。 ...

February 9, 2023 · 1 min · jiezi

关于cicd:开个脑洞带你写一个自己的极狐GitLab-CI-Runner

极狐GitLab Runner 是极狐GitLab CI/CD 执行的利器,可能帮忙实现 CI/CD Pipeline Job 的执行。 目前极狐GitLab Runner 是一个开源我的项目(https://jihulab.com/gitlab-cn...),以 Golang 编写。 极狐Gitlab 有个不错的个性,就是你能够应用本人的极狐Gitlab CI Runner。可是,如果你没有本人的CI Runner该怎么办呢?别放心,咱们能够本人写一个。[]~( ̄▽ ̄)~* 在这篇文章里,咱们会: 论述极狐GitLab Runner的外围工作;剖析Runner工作时和极狐GitLab的交互内容;设计和施行一个咱们本人的Runner;让咱们的Runner运行本人的CI工作;埋一个彩蛋!当然,如果你习惯间接看代码,欢送拜访极狐GitLab仓库。如果喜爱,欢送留个star。 Here we go! 明确外围工作打蛇打七寸,极狐GitLab Runner最外围的工作是这些: 从极狐GitLab拉取工作;获取工作后,筹备一个独立隔离可反复的环境;在环境中运行工作,上传运行日志;在工作实现/异样退出后上报执行后果(胜利/失败)。咱们DIY的Runner同样要实现这些工作。接下来咱们按程序捋一捋各个外围工作,同时察看Runner是怎么和极狐GitLab交互的。 为了行文扼要,下文的API申请和返回的内容有所精简。 一、 注册如果你用过自托管的极狐GitLab Runner,你应该相熟这个页面: 用户在这个页面获取注册token,而后通过gitlab-runner register命令把Runner实例注册到极狐GitLab。这个注册过程实质上是在调用接口POST /api/v4/runners,其body形如: { "description": "一段用户本人提供的形容", "info": { "architecture": "amd64", # runner的架构 "features": { # runner具备的个性,极狐GitLab可能会回绝不具备某些个性的runner注册 "trace_checksum": true, # 是否反对计算上传日志的checksum "trace_reset": true, "trace_size": true }, "name": "gitlab-runner", "platform": "linux", "revision": "f98d0f26", "version": "15.2.0~beta.60.gf98d0f26" }, "locked": true, "maintenance_note": "用户提供的保护备注", "paused": false, "run_untagged": true, "token": "my-registration-token" #极狐GitLab提供的注册token}如果注册token有效,极狐GitLab会返回403 Forbidden。在胜利注册时会返回: ...

December 29, 2022 · 4 min · jiezi

关于ci-cd:工程化-CICD-管道安全实践

随着互联网越来越受器重,前端开发不再是简略的实现一个界面,应用 Javascript 让页面有肯定的交互特效。在同一个期间的迭代里,咱们可能须要同时开发浏览器利用、桌面端,甚至是 App、小程序等等。导致了咱们迫切的须要思考一种新的形式,优化咱们前端的开发工作。而 CI/CD 是工程化的重要环节之一。 为什么须要 CI/CD ?咱们每次我的项目迭代过程中都会听到的各种埋怨:来自测试的埋怨、开发的埋怨,甚至是技术主管、运维的埋怨...... 工夫一长,很可能会导致同一个项目组的成员关系越来越差,我的项目的品质也不会好。我的项目迭代过程中常随同着以下 5 大现状: 或者有人会说:我的项目发版一年只有那么几次,比起我的项目疾速的迭代,搭建 CI/CD 零碎只是一件必要然而不紧急的事件。 咱们先来看看 GitLab 2020 DevSecOps 的考察数据统计: 频繁的发版,可能导致咱们每天都得耗在发版里,基本没有工夫做新的迭代。这尚且是 2020 年的数据统计,如今已是 2022 年,发版只可能更加频繁。 那么,搭建 CI/CD 零碎还是一件不紧急的事件吗? 什么是 CI/CD ?CI/CD 起源于 70 年代,软件工程的概念被提出,通知咱们不仅须要会开发软件,还须要零碎的、标准的开发和保护软件,这标记着工程化意识的沉睡。直到几十年后,2015 年比尔团队的《凤凰我的项目: 一个 IT 运维的传奇故事》这本书才介绍了 CI/CD 的雏形。现今,CI/CD 已被宽泛地提起以及利用。 从字面意思了解,CI/CD 是由两局部组成的。CI 指代继续集成,是指咱们 Push 代码后对代码进行的一系列质保实际。通过继续集成,咱们能够更早地辨认和修复谬误以及平安问题。CD 是由继续交付和继续部署组成。简略了解是上线过程的一组实际,缩小人为误操作的危险。简略的了解就是,CI/CD 是继续集成和继续交付联合的一组实际。 传统上咱们将新代码从提交到生产中所需的大部分或全部都是人工干预,例如构建、测试和部署,以及基础设施的配置等等。而 CI/CD,是将所有都自动化了。应用 CI/CD 管道,开发人员只需将更改后的代码 Push 上代码仓库,而后 CI/CD 管道会主动构建和测试,最初进行交付和部署。 深刻理解 CI/CD回顾残缺的 CI/CD 过程图,咱们能够发现版本控制和自动化测试是整个 CI/CD 管道中重要的两个环节。 ...

December 22, 2022 · 3 min · jiezi

关于ci-cd:建木v257发布

建木是一个面向DevOps畛域的极易扩大的开源无代码(图形化)/低代码(GitOps)工具。能够帮忙用户轻松编排各种DevOps流程并散发到不同平台执行。 建木v2.5.7现已公布 性能优化与BUG修复将排序维度--最近执行开始工夫改成最近触发工夫 我的项目未开启并发执行,前序流程执行中或挂起,以后流程待启动,在日志中减少相应提醒 0s<=执行时长<1s时,应展现为“有余1s” 待启动我的项目执行时长应为“无” 节点运行工夫过长时,容器因超时强制进行缩短卡片状态切换的工夫卡片应展现最初一次触发的流程实例待启动我的项目点击终止,执行时长应间接变成无点击触发,应实时展现我的项目状态在搜寻我的项目页面,待启动我的项目点击终止按钮后,页面数据凌乱待启动的我的项目,其开始工夫为上一个流程实例的开始工夫,应该为空官⽹:https://jianmu.dev代码:https://gitee.com/jianmu-dev文档:https://docs.jianmu.dev示例:https://ci.jianmu.dev

October 21, 2022 · 1 min · jiezi

关于ci-cd:十大-CICD-安全风险二

在上一篇文章中,咱们次要介绍了 CI/CD 中流程管制机制有余和身份及拜访治理有余两大平安危险,并为企业及其开发团队在缓解相应危险时给出了一些倡议。明天咱们将持续介绍值得企业高度关注的 CI/CD 平安危险。 依赖链滥用依赖链滥用(Dependency Chain Abuse)危险是指攻击者滥用与软件开发工作站和构建环境如何获取代码依赖项相干的缺点,导致恶意程序包在拉取时无心中被提取并在本地执行。 危险形容随着企业中所有开发环境中波及的零碎数量越来越多,治理自编写代码应用的依赖项和内部包变得更加简单。通常应用每种编程语言的专用客户端来获取包,这些包来自自治理的包存储库(例如 Jfrog Artifactory)和特定语言的 SaaS 存储库(例如——Node.js 具备 npm 和 npm 镜像仓库,Python 的 pip 应用 PyPI , 并且 Ruby 的 gems 应用 RubyGems)。 大多数企业可能轻松地检测具备已知破绽的软件包的应用状况,并对自行编写的代码和第三方代码进行动态剖析。然而,在应用依赖项的上下文中,须要一组同样重要的管制来爱护依赖项生态系统,包含爱护定义如何拉取依赖项的过程。 不充沛的配置可能会导致安全意识不强的软件开发人员下载歹意包。在大多数状况下,因为预装置脚本和相似过程旨在在拉取包后立刻运行包的代码,因而这个过程不仅下载了包,并且在下载后立刻执行包。在这种状况下,次要的攻打向量是: 依赖性混同——在公共存储库中公布与外部包名称雷同的歹意包,试图诱使客户端下载歹意包而非公有包。依赖劫持——取得对公共存储库包的维护者帐户控制权,来上传宽泛应用的包的歹意版本,让用户拉取最新版本的包。Typosquatting - 公布与风行软件包名称类似的恶意软件包,在开发人员拼错软件包名称时无心中获取名称类似的恶意软件包。Brandjacking – 以与特定品牌包的命名约定或其余特色统一的形式公布歹意包,利用与品牌的谬误关联,试图让开发人员无心获取这些包。影响应用上述形式之一将包上传到公共包存储库的攻击者,其指标是在拉取包的主机上执行恶意代码。这能够是开发人员的工作站,也能够是拉取软件包的构建服务器。一旦恶意代码运行,就能够在执行的环境中利用它来窃取凭据和横向挪动。另一个潜在的状况是攻击者的恶意代码从构建服务器进入生产环境。在许多状况下,恶意程序包还将持续放弃用户冀望的原始平安性能,从而升高被发现的可能性。 倡议依据特定于不同语言特定客户端的配置以及外部代理和内部包存储库的应用形式,对应的危险缓解办法在具体执行时会有所不同,不过所有举荐的管制都具备雷同的领导准则: 不应容许任何拉取代码包的客户端间接从 Internet 或不受信赖的起源获取包。相同,应施行以下管制: 每当从内部存储库中提取第三方包时,请确保通过外部代理而不是间接从 Internet 中提取所有包。在代理层部署额定的安全控制,具备针对被拉取的包的进行平安考察的能力。在实用的状况下,不容许间接从内部存储库中提取包。将所有客户端配置为从外部存储库中提取蕴含预先审查的包的包,并建设平安机制来验证和强制执行此客户端配置。为拉取的包启用校验和验证和签名验证。防止将客户端配置为拉取最新版本的软件包。首选配置预先审查的版本或版本范畴。应用特定于框架的技术将组织所需的包版本继续“锁定”到稳固且平安的版本。范畴: 确保所有公有包都在组织范畴内注册。确保所有援用公有包的代码都应用包的范畴。确保客户端被迫仅从您的外部注册表中获取您组织范畴内的包。当装置脚本作为包装置的一部分执行时,请确保这些脚本存在独自的上下文,该上下文无权拜访构建过程中其余阶段可用的秘密和其余敏感资源。确保外部我的项目始终在我的项目的代码存储库中蕴含包管理器的配置文件(例如 NPM 中的 .npmrc),以笼罩在获取包的客户端上可能存在的任何不平安配置。防止在公共存储库中公布外部我的项目的名称。思考到企业同时应用的包管理器和配置的数量之大,齐全避免第三方链滥用(third party chain abuse)并不容易。因而,倡议确保对检测、监控和缓解措施给予适当的关注,以确保在产生事变时尽快发现并尽可能减少潜在侵害。基于流水线的访问控制有余流水线执行节点能够拜访执行环境内外的泛滥资源和零碎。在流水线中运行恶意代码时,攻击者利用有余的基于流水线的访问控制(Pipeline-based access control, PBAC)危险滥用授予流水线的权限,以便在 CI/CD 零碎外部或内部横向挪动。 危险形容流水线是 CI/CD 的要害外围。执行流水线的节点执行流水线配置中指定的命令,来进行大量的波及敏感信息的流动: 拜访源代码,并进行构建和测试。从不同地位获取机密信息,例如环境变量、保存库、基于云的专用身份服务(例如 AWS 元数据服务)和其余地位。创立、批改和部署工件。PBAC指的是每个流水线以及该流水线中的每个步骤正在运行的上下文。 鉴于每条流水线的高度敏感和要害性质,必须将每个流水线限度为它须要拜访的确切数据和资源集。现实状况下,每个流水线和步骤都应该受到限制,以确保在攻击者可能在流水线上下文中执行恶意代码的状况下,潜在的侵害水平最小。PBAC 包含与流水线执行环境相干的泛滥元素的管制: 在流水线执行环境中拜访:对代码、秘密、环境变量和其余流水线的拜访。对底层主机和其余流水线节点的权限。互联网出入口的过滤。影响一段可能在流水线执行节点的上下文中运行的恶意代码,领有其所运行的流水线阶段的齐全权限。它能够拜访秘密、拜访底层主机并连贯到有问题的流水线的任何零碎能够拜访。这可能导致秘密数据的泄露、CI 环境内的横向挪动,可能拜访 CI 环境之外的服务器和零碎,以及将歹意工件部署到流水线中,甚至生产环境中。攻击者毁坏流水线执行节点或将恶意代码注入构建过程的场景的潜在毁坏水平,取决于环境中 PBAC 的粒度。 ...

October 11, 2022 · 1 min · jiezi

关于ci-cd:CICD-大型企业与开发团队如何进行持续集成与持续发布

Jenkins是当今最风行的继续集成工具之一, 企业抉择Jenkins,能够从它的灵活性和自动化能力中获益。但除此之外的其余需要呢?企业规模在一直增大,他们如何在不减少管理负担的状况下,让CI扩大到整个组织,并满足平安和合规要求? 作为业余的DevSecOps解决方案提供商、CloudBees受权合作伙伴,龙智始终关注继续集成、继续公布,致力于为您带来最佳实际参考,欢送随时分割咱们,理解更多Jenkins企业版——CloudBees的相干信息。 Jenkins®领有超1800个插件,以及一个充满活力、一直发展壮大的社区。显然,它是寰球当先的继续集成(CI)和继续交付(CD)的开源自动化服务器,十分弱小、灵便,可能帮忙用户在各种软件开发环境中获得成功。 企业受害于Jenkins的灵活性和自动化能力,但同时,他们也有其余需要,比方,他们须要在不减少管理负担的状况下,将CI扩大到整个组织,并满足平安和合规要求。如何做到? 答案是应用CloudBees CI。这是一个由Jenkins的最大贡献者——CloudBees基于Jenkins构建的解决方案,被称为Jenkins的企业版。 CloudBees CI是一个对立的治理引擎,为实际继续集成的软件开发团队治理所有CI自动化的需要。它建设在Jenkins根底之上,并减少了对单个团队我的项目/Controller、弹性扩大、合规性和安全性的集中管理。这一切都是在业余Jenkins反对下,让人毫无顾虑。CloudBees CI能够让您播种两败俱伤的后果:Jenkins基础设施管理员实现了集中管理与工作量的升高,同时也让开发人员取得了自主权,能够更加专一于翻新。 集中管理Jenkins管理员能够通过一个地方控制台治理多个Controller、我的项目和团队,这将大大简化治理工作。开发团队能够建设本人的Jenkins实例和工具,同时由管理员集中处理反对和保护。同样,插件也能够集中管理,这样就能确保每个团队都有他们须要的集成,而不必担心平台的稳定性。 内置平安企业能够通过一个反对单点登录、事后配置的平安模型,疾速退出新我的项目和团队。基于角色的访问控制让您可能更精密地管制对流水线和工作的拜访权限。除了这一平安性能,还有其余许多平安性能独特作用,让变更在无心中进入生产的危险大大降低。 除此之外,CloudBees CI还提供一个牢靠的、通过验证的Jenkins版本,并通过更新被动解决开源的任何破绽。插件也通过稳定性和安全性测试,以便与Jenkins构建一起应用。如果构建中呈现问题,CloudBees能够很容易复制并找到修复办法,从而缩小了管理员调试问题所破费的工夫和资源。如果您打算在Kubernetes上运行CloudBees CI,则会提供一个通过签名的、平安加固的容器镜像。 弹性扩大CloudBees CI的扩大在两个维度下进行:基础设施层和组织层。当CloudBees CI托管在Kubernetes平台上时,它能够利用Kubernetes的弹性和还原力。这样,不论运行多少数量的测试或构建,企业都不会遭逢瓶颈,甚至能够同时运行。而且,如果某个Controller资源处于闲置状态,它能够休眠,缩小反对它的不必要的基础设施老本。 在组织层面,每个开发团队都有他们本人的虚构Jenkins Controller。这缩小了对基础设施的限度,并确保如果一个Controller产生故障,危险就会被隔离在该我的项目或团队,而不是波及整个组织。 合规性领有成熟CI实际的企业当初寻求的是更高层次的平安和治理,所以CloudBees自带的性能能够让员工疾速上手,遵循企业的最佳实际,合乎企业标准以及职责拆散模型。 开发团队能够应用他们本人的平安、隔离的工作区,这些工作区事后针对他们的需要配置了通过批准的、齐全反对的插件和平安设置。 规范的团队环境为了确保遵循平安最佳实际,会应用集中管理、独特配置的代码包。这些代码包中包含了集中管理的规范流水线,这样团队就能够专一于他们正在构建的代码,缩短产品的上市工夫,同时确保实际的规范化与安全性。 专家反对CloudBees作为Jenkins的贡献者,他们的工程师领导了Jenkins社区的许多要害动作。 作为CloudBees受权合作伙伴,龙智联结CloudBees的技术专家为您提供业余的技术支持,DevOps落地的最佳实际参考,以及CloudBees的相干培训。

September 5, 2022 · 1 min · jiezi

关于cicd:gitlabCICD共享runner基本配置

gitlab-CICD共享runner根本配置应用docker部署runner多个我的项目应用共享runner部署机器与runner不在同一台服务器上(应用ssh部署)部署runner部署镜像docker pull gitlab/gitlab-runner:latestdocker run -d --name gitlab-runner-shared \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest注册runnerdocker exec -it gitlab-runner-shared gitlab-runner \ register -n \ --tag-list "gitlab-runner-shared" \ --description "形容" \ --url <公有gitlab地址> \ --registration-token <我的项目/共享token> \ --executor docker \ --docker-privileged \ --docker-image "alpine:latest" \ --docker-pull-policy "if-not-present" \ --docker-volumes "/var/run/docker.sock:/var/run/docker.sock"SSH相干配置在linux服务器应用ssh-keygen创立一个ssh key ssh-keygen -t rsa -P "" ~/.ssh/id_rsa推送到部署服务器上 ssh-copy-id -i ~/.ssh/id_rsa.pub <近程服务器ip>测试登录ssh <近程服务器登录名>@<近程服务器ip># 按提醒输出明码将私钥复制下来 cat ~/.ssh/id_rsa将私钥设置到Gitlab的变量中(例如:SSH_PRIVATE_KEY)近程部署(编写ci文件) image_build:stage: buildimage: alpine:latestbefore_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 设置国内镜像源 - 'which ssh-agent || ( apk update && apk add openssh-client )' # 装置ssh - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" > deploy.key # 设置ssh私钥 - chmod 0600 deploy.key # 设置私钥权限 - ssh-add deploy.key # 增加到缓存中 - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' # 第一次登录不须要询问script: - ssh <用户名>@<服务器ip> "ls && exit" # 近程执行语句应用docker打包image-build: stage: build image: docker:18.09.7 services: - docker:18.09.7-dind script: - docker build --no-cache -t <镜像>:<镜像tag> . # 生成镜像 - docker login -u <docker用户名> -p <docker明码> <docker库地址> # 登录云端 - docker push <镜像>:<镜像tag> # 镜像推送到云端 after_script: - docker rmi -f <镜像>:<镜像tag> # 已上传云端,清理本地镜像,缩小占用内存 retry: max: 2 when: always告诉(curl)build-job-failure: stage: build-notify when: on_failure # 失败时告诉 image: alpine:latest before_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 设置国内镜像源 - apk update && apk add curl # 装置curl script: - if [ "$CI_COMMIT_REF_NAME" == "dev" ]; then env_name="dev"; else env_name="prod"; fi - echo '{"content":"@'$GITLAB_USER_LOGIN' '${CI_COMMIT_TITLE}'\n'$CI_PROJECT_NAME' 构建'$env_name'环境 [ 失败 ]"}' > content.json # 防止提交文字中有空格导致报错,应用json的形式 - curl -X POST -H "Content-Type:application/json" -d @content.json "$NOTIFY_URL"残缺.gitlab-ci.ymldefault: tags: - gitlab-runner-shared variables: NOTIFY_URL: "告诉地址" IMAGE_REPOSITORIES: "docker地址" IMAGE_NAME: "docker镜像名" SSH_USERNAME: "SSH用户名" SSH_IP: "部署服务端IP"workflow: rules: - if: $CI_COMMIT_TITLE =~ /^[skip ci]/ when: never - when: alwaysstages: - build - deploy - notify# 应用docker构建镜像image-build: stage: build image: docker:18.09.7 services: - docker:18.09.7-dind script: - docker build --no-cache -t $IMAGE_NAME:$CI_COMMIT_REF_NAME . - docker login -u $IMAGE_REPOSITORY_USER -p $IMAGE_REPOSITORY_PASSWORD $IMAGE_REPOSITORIES - docker push $IMAGE_NAME:$CI_COMMIT_REF_NAME after_script: - docker rmi -f $IMAGE_NAME:$CI_COMMIT_REF_NAME retry: max: 2 when: always# 部署镜像image-deploy: stage: deploy image: alpine:latest rules: - if: $CI_COMMIT_REF_NAME == "dev" variables: PORT: "8180" - if: $CI_COMMIT_REF_NAME == "master" variables: PORT: "8181" before_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories - 'which ssh-agent || ( apk update && apk add openssh-client )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" > deploy.key - chmod 0600 deploy.key - ssh-add deploy.key - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' script: - ssh $SSH_USERNAME@$SSH_IP "docker rm -f frontend-$CI_COMMIT_REF_NAME && docker run -itd --restart=always --name frontend-$CI_COMMIT_REF_NAME -p $PORT:80 $IMAGE_NAME:$CI_COMMIT_REF_NAME && exit" retry: max: 2 when: alwayssuccess: stage: notify when: on_success image: alpine:latest before_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories - apk update && apk add curl script: - if [ "$CI_COMMIT_REF_NAME" == "dev" ]; then env_name="dev"; else env_name="prod"; fi - echo '{"content":"@'$GITLAB_USER_NAME'\n'$CI_PROJECT_NAME' 部署'$env_name'环境 [ 胜利 ]\n'${CI_COMMIT_TITLE}'"}' > content.json - curl -X POST -H "Content-Type:application/json" -d @content.json "$NOTIFY_URL" retry: max: 2 when: alwaysfailure: stage: notify when: on_failure image: alpine:latest before_script: - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories - apk update && apk add curl script: - if [ "$CI_COMMIT_REF_NAME" == "dev" ]; then env_name="dev"; else env_name="prod"; fi - echo '{"content":"@'$GITLAB_USER_NAME'\n'$CI_PROJECT_NAME' 部署'$env_name'环境 [ 失败 ]\n'${CI_COMMIT_TITLE}'\n'$CI_PIPELINE_URL'"}' > content.json - curl -X POST -H "Content-Type:application/json" -d @content.json "$NOTIFY_URL" retry: max: 2 when: always参考文章:gitlab ssh ci文件 ...

July 6, 2022 · 3 min · jiezi

关于ci-cd:研讨会回放视频如何提升Jenkins能力使其成为真正的DevOps平台

“如何实现集中管理、灵便高效的CI/CD”在线研讨会精彩分享演讲嘉宾:杨海涛在2022年3月29日举办的“如何实现集中管理、灵便高效的CI/CD”在线研讨会中,嘉宾杨海涛为大家带来了主题为“从Jenkins到DevOps平台”的精彩演讲。 杨海涛是现任 CloudBees 亚太区资深解决方案工程师,他在帮忙企业实现麻利和云原生上领有丰盛的实践经验和深刻了解。CloudBees 是 Jenkins 的重要贡献者,其团队奉献了 Jenkins 中80%以上的代码。 方才两位老师从实践到实际,对于 CI/CD,包含DevOps技术进行了十分精彩的论述。我将进一步的跟大家收敛一下,具体的聊聊目前应用最广泛的 CI/CD 工具 —— Jenkins 。以及如何把现有的 Jenkins 能力再晋升一个级别,让它成为一个真正的 DevOps 平台。再看看从 CI/CD 到 DevOps 平台,两头到底短少了哪些,如何去把这些能力补足。 既然来讲 Jenkins ,那总得晓得点他人不晓得的货色,对不对?上面,就从两个插件开始讲起。这两个插件置信大家肯定都不太理解、不太晓得。但这两个插件性能十分特地。具体哪两个插件,咱们一个个来说。△ 研讨会现场ppt示例 第一个插件叫 Chunk Norris,不晓得大家有没有据说过。如果有趣味大家能够在网上搜一下。这老兄是一位好莱坞明星,同时也是一位空手道世界冠军。他已经主演了一部电影,这个电影名字叫做《猛龙过江》,另外一位演员就是李小龙。大家大略晓得这老兄的定位,就是功夫硬汉明星。 Jenkins 把他加到插件里,实现了什么性能?其实是一个十分有意思的性能,那就是每次你在 Jenkins 做一个 build,不论胜利或者失败或者怎么样,依据不同 build 的后果,都会展示他(Chunk Norris)各种各样不同的照片,以及他已经说过的话,还是很有意思的。这个(插件)在国外十分的广泛,我预计在国内用的人不多,晓得的人也不多。 第二个插件是什么?这个叫做 Emotional Jenkins ,就是情绪化的 Jenkins ,或是理性的 Jenkins 。因为Jenkins自身来源于一个具体的人物 —— Jenkins 学生,所以有人在开发过程当中,加点有意思的调料,像 Chunk Norris 插件一样。他加了几张不同的图片,比如说在 build 胜利的时候,会显示 Jenkins 学生快乐的图片。如果测试失败,会呈现发愁的图片,阐明没有通过。如果编译谬误,就是呈现发怒的图片。 可能有敌人会说,你这是在逗闷呢,对的,的确是开个玩笑。因为说实话,Jenkins 在开发团队、各个企业中应用切实太广泛了,社区中的高手太多,所以就我本人来讲,真不敢跟大家讲 Jenkins 更高级的性能和程度。我置信比我更理解开源 Jenkins 的人还有很多,所以也不敢卖弄。 Jenkins当初应用很广泛,广泛到什么水平?咱们能够看到,Jenkins 通过了十年多的倒退,到目前,寰球有超过70%的开发人员在应用开源的 Jenkins 。随着应用的人数越来越多,围绕着 Jenkins 也造成了一个十分宏大的生态系统。在这个生态系统里,当初有超过1,800个插件。 ...

April 26, 2022 · 1 min · jiezi

关于ci-cd:基于DroneGogs流水线全面认识轻量级云原生CI引擎Drone

1. 介绍Drone by Harness™ 是一个基于Docker容器技术的可扩大的继续集成引擎,用于自动化测试、构建、公布。每个构建都在一个长期的Docker容器中执行,使开发人员可能齐全管制其构建环境并保障隔离。开发者只需在我的项目中蕴含 .drone.yml文件,将代码推送到 git 仓库,Drone就可能自动化的进行编译、测试、公布。能够与Docker完满集成。https://docs.drone.io/ 特点Drone引入了Pipelnes的概念,管道可帮忙咱们自动化软件交付过程中的步骤,例如启动代码构建,运行自动化测试以及部署到暂存或生产环境。通过将.drone.yml文件放在git信息库的根目录中来配置管道。 yaml语法旨在易于浏览和表白,以便查看存储库的任何人都能够了解工作流程。Drone通过多个step来实现一系列的指令。为什么抉择Drone?和 Jenkins 相比, Drone 就轻量的多了,从利用自身的装置部署到流水线的构建都简洁的多。因为是和源码管理系统相集成,所以 Drone 天生就省去了各种账户权限的配置,间接与 gitlab 、 github 、 Bitbucket 这样的源码管理系统操作源代码的权限统一Drone 与风行的源代码治理提供商无缝集成,反对github、gitlab、gogs、gitea、gitee、bitbucket server/cloud, 这是应用Drone的第一印象,能够履行疾速打造GitOps场景流水线插件是执行预约义工作的 Docker 容器,通过将它们配置为Pipeline中的步骤。插件可用于部署代码、公布工件、发送告诉等。 2. 部署Gogs-极易搭建的自助 Git 服务 装置MySQLdocker run --name gogs-mysql --restart=always -v /opt/mysql/mysqlVolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19创立Gogs及drone数据库#mysql -uroot -p123456 -h 127.0.0.1CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;create database drone;# Pull image from Docker Hub.$ docker pull gogs/gogs# Create local directory for volume.$ mkdir -p /var/gogs运行Gogsdocker run --name=gogs --restart=always --link gogs-mysql:db -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs账号:admin明码:123456 ...

March 20, 2022 · 2 min · jiezi

关于ci-cd:Day-28100-CI-CD-基本入门概念

CI/CD 是一种通过在利用开发阶段引入自动化来频繁向客户交付利用的办法。CI/CD 的外围概念是继续集成、继续交付和继续部署。 1、CI继续集成(Continuous Integration)CI/CD 中的"CI"始终指继续集成,它属于开发人员的自动化流程。 胜利的 CI 意味着利用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案能够解决在一次开发中有太多利用分支,从而导致互相抵触的问题。 古代利用开发的指标是让多位开发人员同时解决同一利用的不同性能。然而,如果企业安顿在一天内将所有分支源代码合并在一起(称为"合并日"),最终可能造成工作繁琐、耗时,而且须要手动实现。这是因为当一位独立工作的开发人员对利用进行更改时,有可能会与其余开发人员同时进行的更改发生冲突。如果每个开发人员都自定义本人的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成统一,那么就会让问题更加雪上加霜。继续集成(CI)能够帮忙开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或"骨干"中。一旦开发人员对利用所做的更改被合并,零碎就会通过主动构建利用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对利用造成毁坏。这意味着测试内容涵盖了从类和函数到形成整个利用的不同模块。如果自动化测试发现新代码和现有代码之间存在抵触,CI 能够更加轻松地疾速修复这些谬误。 2、CD继续交付(Continuous Delivery)实现 CI 中构建及单元测试和集成测试的自动化流程后,继续交付可主动将已验证的代码公布到存储库。 为了实现高效的继续交付流程,务必要确保 CI 已内置于开发管道。继续交付的指标是领有一个可随时部署到生产环境的代码库。在继续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都波及测试自动化和代码公布自动化。在流程完结时,运维团队能够疾速、轻松地将利用部署到生产环境中。3、CD 继续部署(Continuous Deployment)对于一个成熟的 CI/CD 管道来说,最初的阶段是继续部署。 作为继续交付——主动将生产就绪型构建版本公布到代码存储库——的延长,继续部署能够主动将利用公布到生产环境。因为在生产之前的管道阶段没有手动门控,因而继续部署在很大水平上都得依赖精心设计的测试自动化。实际上,继续部署意味着开发人员对利用的更改在编写后的几分钟内就能失效(假如它通过了自动化测试)。这更加便于继续接管和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于升高利用的部署危险,因而更便于以小件的形式(而非一次性)公布对利用的更改。不过,因为还须要编写自动化测试以适应 CI/CD 管道中的各种测试和公布阶段,因而后期投资还是会很大。 参考链接https://www.redhat.com/zh/top...

February 18, 2022 · 1 min · jiezi

关于cicd:企业CICD规模化落地浅析

本次分享的题目是《企业CICD规模化落地》,因而咱们不会偏重解说CICD是什么以及怎么做CICD,而是你曾经晓得怎么“玩转”CICD了,要如何在一个比拟大的企业中规模化地落地。 本文整顿自阿里巴巴技术专家崔力强(怀虎)的分享《企业CICD规模化落地》。 研发流程与继续交付简析继续交付是随着互联网的迅猛发展逐步遍及的一种研发模式,它具备“疾速反馈”“品质内建”“自动化”“开发自运维”等特点。 这种研发模式次要蕴含如上图所示的四个环节,“分支治理”“测试验证”“制品治理”和“公布”。在业界有很多工具反对这些操作,在云效产品矩阵中也有对应的产品提供相应性能。 在一个中小型的研发团队(比方5-10人),无论你是应用商业软件还是开源的工具,通过一段时间的学习,你都能够把“继续交付”做起来。然而当须要规模化落地之后,就有更多的问题须要思考,如: 如何进步合作效率;新团队如何疾速接入;如何进行全局危险的管制;研发流程如何全局更新。继续交付在阿里巴巴的规模化接下来简略理解一下“继续交付”研发工具在阿里巴巴外部的演变历程。2009年,咱们开发了自动化公布工具;2013年,建设对立构建部署平台;到了2016年咱们曾经有了继续交付平台,外部称为“Aone”,该产品蕴含了从代码开发、构建、公布等性能,以一个一站式的研发平台,这个产品到当初也始终在演进;2017年时,咱们将“Aone”的外围性能凋谢进去,供宽广开发者应用,就是咱们的“阿里云·云效”。目前该产品在公测中,大家能够登录阿里云官网进行拜访、应用。 上面咱们介绍几个帮忙阿里巴巴实现继续交付规模化落地的研发实际。 要使继续交付规模化落地,很重要的一点是须要有一套工具对研发模式进行全自动反对。 “研发模式”是指你做事件的一种形式,在这里次要是指代码公布模式以及对应的分支应用形式,比方“骨干模式”,这也是继续交付比拟提倡的一种研发模式。然而“骨干模式”对研发人员的要求比拟高,并且也不能很好的体现出以后要进行公布的内容。作为一位研发负责人,你可能会抉择更灵便一些的研发模式,比方 “Aone Flow”或者 “Git Flow”等,这两种模式都须要肯定的自动化工具进行反对。 其中Aone Flow是在阿里巴巴外部支流的一种公布模式及分支治理形式,咱们这里简略介绍一下,感兴趣的同学能够在网上搜寻相干文章理解。Aone Flow应用三种分支类型:骨干分支、个性分支、公布分支。骨干分支上的代码跟线上版本的代码是统一的,当你要开发一个新的性能时,就会拉取一个个性分支作为开发分支,而后在这个分支上提交代码批改。当你须要公布的时候,须要先将不同的个性分支合并为开发分支再进行公布。公布到线上正式环境后,合并相应的公布分支到骨干,在骨干增加标签,同时删除该公布分支关联的个性分支。这个过程中波及到大量的“拉分支”“合分支”“打标签”“回滚版本”等等简单操作,这就须要有一系列自动化工具进行反对。在阿里巴巴外部咱们是通过Aone平台(即云效的外部版本)提供自动化反对的。 第二个实际是以利用为外围的一站式研发体验。“利用”是指一个服务或者微服务,能够间接对应一个代码库。以利用为核心,咱们又能够串联流水线、环境治理、构建配置、部署等工具链。能够让开发人员很好的了解和买通整个研发流程,同时也能够帮忙一个新团队疾速上手。 上图是咱们外部一个产品研发过程的截图,会有一个研发向导帮忙你提交各种信息、初始化代码库、源码主动生成、申请测试环境、进行线上公布等一系列操作。这种“以利用为外围的一站式体验”十分爽,能够帮忙研发团队节俭很多消耗在合作上的工夫,而且有了这套流程之后,只有依照向导的提醒去做就好了,很少出错。 接下来,咱们聊一下如何进行全局危险管控。 在部署正式环境之前,会有一个Checklist,进行平安审核、PE审核等等,咱们很多对外公布的利用都会通过这样的平安审核。在前DevOps时代(2016年以前),阿里巴巴外部还是有专门的运维团队的,咱们叫PE团队。在正式公布前,他们会去审核公布的工夫点、配置参数等。这就是全局危险管控,这些卡点会强制在一个流程中施行,不可能勾销。(当然当初曾经阿里巴巴外部曾经勾销了PE团队,这些卡点会通过自动化工具实现) 兼具灵活性与规范性的继续交付平台通过以上几个措施,就可能在阿里巴巴外部规模化的落地CICD,当新的研发团队退出时,也不必破费太多的工夫去了解这个事件,而是很快上手去操作。然而咱们这一套流程也遇到一些问题,这套流程面向Web端服务是能够很好去应答的,比方咱们只有一个版本的“天猫”“淘宝”,永远是面向最新版去交付的;然而随着阿里云业务的倒退,特地是呈现了混合云的业务,呈现了面向多Region和多版本交付的状况,咱们这套研发流程就有点顾此失彼了;因为咱们的研发理念是“以利用为核心”,当遇到一些跟利用无关的交付场景时这套研发流程也会显得不合时宜。 如何进步阿里巴巴继续交付平台的灵活性呢?咱们最早的研发架构如上图左侧所示,底层是研发平台,下面咱们做了很多“场景化”的研发组件,同时保留了肯定的扩展性,比方“自定义组件”,用户能够把本人的组件接入到咱们的流水线里来;也裸露了一部分API,次要只读接口,其余团队能够在这下面做一些他的场景化。 咱们认为这种研发架构的灵活性和扩大能力是有余的,(如上图右侧所示)起初咱们就把构建、编排、部署、制品这些能力独自拎进去,并凋谢对应的API,下层咱们再去编纂“场景化”,而且有可能这些“场景”都不是咱们开发的,而是应用这个产品的用户本人去开发,重点是咱们须要将这种扩大能力裸露进去。咱们还会有“自定义步骤”和“自定义组件”,这两个性能曾经在云效产品中提供。同时,咱们还会开发更多API、反对更多的源,也能够通过配置webhook在流水线的生命周期中(失败、胜利、暂停等)告诉第三方。 这样的研发架构就具备了肯定的灵活性和可扩展性,但对于企业来讲这是不够,还必须具备开箱即用的能力。 云效内置代码扫描、 平安扫描和各种自动化测试能力,并通过流水线模板串联起来 。如上图右侧所示,针对支流的开发语言Java、PHP、Node.js、Go、Python等提供从构建到部署公布的各种模板,能够帮忙你疾速开始。 模板化能力其实是推动CICD规模化落地的要害,云效不仅提供了数十种通用的模版来帮忙你疾速创立流水线,同时提供定制化能力,反对定制企业自有模版来治理企业继续集成和继续交付流程,将简单的流程通过可视化编排和后果展示,保障交付可见可控可度量。 总结:当你曾经对CICD有肯定理解,怎么样更好的在组织内规模化落地呢?第一,你须要抉择一款兼具灵活性和规范性的工具平台。第二,制订适宜本人企业的研发模式,并将其固化下来;第三,研发模式的变更能够利用到已有的团队;第四,通过适当的卡点来管制全局危险。 以上内容整顿自怀虎的视频分享《企业CICD规模化落地》,欢送大家退出云效开发者交换群(钉钉群号:34532418)观看视频回放,下载演讲PPT。 【对于云效】 云效,云原生时代一站式BizDevOps平台,反对公共云、专有云和混合云多种部署状态,通过云原生新技术和研发新模式,助力翻新守业和数字化转型企业疾速实现研发麻利和组织麻利,打造“双敏”组织,实现 10 倍效力晋升。 立刻体验

January 29, 2022 · 1 min · jiezi

关于cicd:分享实录降龙十八掌CICD持续集成持续部署-IDCF-DevOps案例研究

很快乐加入IDCF组织的第6期DevOps案例深度钻研,咱们小组的分享主题为《降龙十八掌—CI/CD继续集成继续部署》,以“企业CI/CD转型之路”为核心内容,较为残缺全面地梳理了CI/CD从征询到落地实际以及企业内一直优化的全生命周期的过程,和大家一起领略企业在复杂多变的环境之下如何胜利实现CI/CD转型。 一、飞龙在天1.1 CI/CD概览首先,咱们来回顾一下CI/CD的概念。 在工业实际中,工厂里的装配线以疾速、自动化、可反复的形式,从原材料生产出消费品。——自动化是现代化车间的一个重要规范,能够设想在将来会有更多先进的机器和工具去代替人工,人次要是负责保护和治理这些机器。 同样,在软件行业中,交付管道以疾速、自动化和可反复的形式从源代码生成公布版本。如何实现这项工作的总体设计称为“继续交付”(CD)。启动装配线的过程称为“继续集成”(CI)。确保品质的过程称为“继续测试”,将最终产品提供给用户的过程称为“继续部署”。——运维开发及DevOps践行者让这所有简略、顺畅、高效地运行。 1.1.1 继续集成 (CI)继续集成(CI)须要对开发人员每次的代码提交进行构建测试验证,确定每次提交的代码都是能够失常编译测试通过的。 继续集成为咱们的工作带来了很多便当, 它的长处包含: 尽早发现问题。由多个代码组合,因而,常常操作能够立刻晓得谬误何时何地呈现。轻松编写代码,以便与别人一起评论。代码评论可立刻取得反馈。其毛病是: 当我的项目变大时,很难集成。团队短少互动从而会产生一系列的代码问题。CI 不可避免地须要工具,这须要老本。传统 Source Integration vs Continuous Integration(继续集成) 传统集成:项目经理调配模块给开发人员, 每个模块的开发人员并行开发, 并行单元测试,一周到几个月,编写大量版本,如果两头有其余更新代码,则更新的代码也须要进行相应的批改。 这样一来,就可能呈现一些问题: 模块之间依赖关系简单,集成时发现大量的bug。测试人员期待测试工夫过长,造成资源节约。软件交付无奈保障。继续集成能够解决以上问题, 每个成员每天至多集成一次,每次都通过自动化的构建(编译、公布、自动化测试)来疾速验证,尽快发现错误。 1.1.2 继续交付(CD)继续交付(CD)是基于继续集成的根底上,将集成后的代码自动化地公布到各个环境中测试,确定能够公布的生产版本。能够借用制品库实现制品的治理,依据环境类型创立对应的制品库。一次构建,多处运行。 很多人会把继续交付误认为成继续部署,然而两者是两个不同档次的能力。 1.1.3 继续部署(CD)继续部署(CD)是继续交付的下一步,在继续交付的根底上,由开发人员或运维人员自助式地定期向生产环境部署稳固的构建版本。继续部署的指标是代码在任何时刻都是可部署的,并可主动进入到生产环境。 继续交付和继续部署的比照: 继续交付(Continuous Delivery)是指团队确保每个变更能够部署至生产环境,但兴许并不需要理论部署,这通常可能是出于业务方面的起因;继续部署(Continuous Deployment)是指每个变更能够主动部署到生产环境。只有胜利实现继续交付的前提下,能力进行继续部署。它基于一致性,齐全打消了人的干涉,所有已通过品质和测试的 Release 都立刻推送到操作环境。继续部署带来的益处是: 公布频率更快,因为不须要停下来期待公布。每一处提交都会主动触发公布流。在小批量公布的时候,危险升高了,发现问题能够很轻松地修复。客户每天都能够看到继续改良和晋升,而不是每个月或者每季度、每年。主动实时地部署上线,是最优的解决办法,但继续部署要求团队十分成熟,并且上线前需-要通过QA测试,所以实际上比拟难实现,挑战和危险都很大,个别的团队也很难承受。1.2 CI/CD的倒退历史当初,基本上每个IT公司都有本人的CI/CD零碎,有的公司甚至不止一套。从CI/CD倒退历史来说,大体经验了如下4个阶段: 人工公布阶段:CI/CD的操作都是由开发和运维人工染指的,通常是开发做CI生成可部署单元,运维将其部署到服务器上。人工形式是最间接、最无效、最易出错的形式。脚本公布阶段:咱们称之为“半自动化”阶段,人工公布过程的很多事件是重复性的,开发、运维人员深感其扰,于是开始寻求脚本帮忙,如shell、python脚本。脚本的退出极大缓解了开发运维的重复劳动,但脚本形式还须要很多人工操作,而且脚本的很多步骤会被人为跳过或篡改,造成公布的不标准、不胜利等问题。零碎公布阶段(自动化):当初大多数公司都在研发本人的CI/CD零碎,其目标就是标准公布流程,缩小人为失误,进步公布效率。系统对脚本最大的益处是暗藏细节,不可篡改。零碎公布阶段(智能化):大数据时代,一些优良的公司曾经开启智能化CI/CD零碎,通过引入数据分析、智能预测伎俩,进一步优化公布流程、进步公布效率。(内容原创:李帅DevOps DevOps技术说) 1.3 推动CI/CD的内外因素1.3.1 企业推动CI/CD的起因当今商业世界,须要比以往更快的翻新, 软件交付也须要更快更好。借助自动化,须要实现的手动工作较少,能够更频繁地公布较小的变更到生产环境,更快地交付产品,疾速取得最终用户反馈,帮忙企业更好、更高效地参加市场竞争。应用CI/CD,测试和部署过程是通明的。任何问题简直都能够立刻看到,并且能够疾速找到起因,从而缩小了之前在查明问题起因时无可奈何的猜想。谬误缩小。古代软件性能、我的项目和应用程序很简单,谬误也越来越简单。开发人员的手动工作更少,这意味着更少的人为谬误机会。运维部门会收到高质量的代码,QA须要解决的问题较少,客户服务也不会收到那么多宜人的客户投诉邮件或投诉电话。每个人的工作都失去改善。资源开释。如果将可反复和可预测的工作移交给自动化,则能够为开发人员腾出工夫来做他们喜爱的事件,在放弃原始业务束缚的同时,还能够实现更多工作。客户更称心。更快、更频繁的公布和更少的谬误使得开发人员与其余业务部门之间更加信赖,按时实现工作,取得牢靠的后果以及使最终用户更加称心。由此可见,CI/CD是双赢的。有了CI/CD和自动化,频繁的集成,可见性,手动操作造成的谬误等问题就打消了。因而,当初越来越多的企业正在向麻利方法论和自动化流程迈进。 1.3.2 案例 - NationwideNationwide(互惠保险,500强里排名第69的一家公司)的转型是从麻利开始的,从瀑布模型逐步转型到CI/CD,随后在多个团队实现全栈式麻利开发。 第一阶段:从3个麻利团队倒退到200个麻利团队 一年后麻利团队成熟了,开始规模化麻利。从3个团队开始,始终倒退到整个公司绝大多数开发团队都能做到成熟的麻利施行。这一过程花了五六年的工夫 ,因为公司规模大,问题也是很不错的,从品质、开发速率、零碎稳定性等多方面获得了很好的问题,这是第一阶段的胜利。 第二阶段:新的痛点 进入第二阶段,互惠保险遇到新的问题。 (图片起源:DevOpsDsys 2017 – 北京站) 公司发现整个交付曲线如上图,通过该曲线能够看到两头的设计、开发、测试都做得不错了,速度也很快。但从商业想法开始到包含需要剖析、年度我的项目估算等对 IT 的整体公布速率来讲是一个微小的瓶颈,这个瓶颈占到整个开发流程总工夫的60%。 另一个比较严重的瓶颈是开发之后始终到产品上线又花了大量的工夫。 公司发现只做麻利是不够的,于是开始依照解决这两个瓶颈的思路去解决问题。 解决新痛点的办法 用一个典型的价值流图去展现整个流程,并剖析这个价值流图。 ...

January 25, 2022 · 3 min · jiezi

关于cicd:装在笔记本里的私有云环境持续集成上

本篇是系列中的第五篇内容,咱们持续聊聊如何把一个简化过的公有云环境部署在笔记本里,以满足低成本、低功耗、低延时的试验环境。如果你有闲置的轻量云服务器,也能够入手试试。 写在后面作为“继续集成”章节的第一篇内容,咱们先来聊聊在单机服务器上的 CI 的应用。 对于根底的搭建,之前的文章中曾经屡次提到,所以我就不再赘述,本文将着重介绍过程中的一些细节,如果你对 Gitea 和 Drone 或者 GitLab 感兴趣,能够浏览之前的内容: 《容器形式下的轻量仓库与CI 应用计划:Gitea + Drone 根底篇》《应用容器形式编译无性能限度的 Drone CI》《轻量平安的部署计划》《应用 Docker 和 Traefik v2 搭建轻量代码仓库(Gitea)》一些 GitLab 相干的内容为了更低的保护老本,以及后续多机扩大应用,本文所有程序的应用均在容器环境下。 单机 CI 设计在开展实际细节之前,咱们得先来聊聊“设计”。 架构设计CI 过程中的参与者次要有上面这几类(本篇暂不聊软件仓库局部):用户、Git服务、CI 服务、CI 执行器。 简略针对下面的参与者进行定义:“用户”能够是有血有肉的人,也能够是自动化的脚本或者 BOT,各种数据的创造者;“Git 服务”,用于存储代码数据,提供根底的权限性能和界面治理的程序;“CI 服务”,提供继续集成的工作的调度和治理的程序;“CI 执行器”,用于执行具体的 CI 工作的程序。 思考到单机服务器上除了 Git 服务和 CI 服务之外,还会运行咱们须要更新和部署的程序,为了让资源应用效率更好、保护老本更低、防止咱们为每一个 Web 程序配置 HTTPS 证书,咱们能够增加一个反对服务发现的利用网关。 即便是单机服务器,咱们仍旧须要留神 SSH 的应用平安,在多机环境下,咱们会应用跳板机和云服务器安全策略来进行集中的平安治理,在单机场景下,我应用 SSH 服务开关来实现简略的平安防护(不必的时候,间接敞开,也为互联网上的嗅探机器人省点电)。 如果将下面的“参与者”用图例来示意,一个最根底的单机 CI 应用模式会相似上面这样: 我将图中不同角色的数据交互进行的数字序号标注,简略解释一下这些序号代表的具体内容: “1” 示意了用户应用具体的域名来拜访咱们的 Git 服务和 CI 服务,来进行仓库治理或者配置 CI 工作。这类交互应用的是 HTTP 的形式,比方在浏览器中拜访 https://gitea.lab.com、https://gitlab.lab.com、https://drone.lab.com。“2” 示意了用户或者客户端应用 SSH 的形式拜访 Git 仓库,须要搭配 RSA Key 应用。“3” 和 “4” 示意了 Traefik 应用服务发现的形式,聚合 Git 服务和 CI 服务,为用户提供域名模式的拜访形式,这里应用的代理模式同样也是 HTTP。“5” 示意了 SSH 开关和 Git SSH 服务之间的数据交互,交互模式为 TCP。“6” 和 “7” 示意了 CI 服务 别离和Git 服务、CI 执行器之间的数据交互,从 Git 获取仓库变动,而后创立 CI 工作,接着将 CI 工作执行状态一直推送至 Git 服务中,交互模式不限,能够应用 HTTP API,也能够应用各种基于 TCP 的 RPC 的形式。“8” 则示意了 CI 执行器如何从 Git 服务器的代码仓库中获取代码,或者将一些数据更新回 Git 服务器中,个别状况下是应用 HTTP 的形式,我更举荐应用 Git Over SSH 进行交互。部署模式在单机全容器模式下,咱们个别会用两种形式能够实现部署。 ...

January 3, 2022 · 3 min · jiezi

关于cicd:kubernetes-基于jenkins-spinnaker的cicd实践一增加制品镜像扫描

前言:晚期jenkins承当了kubernetes中的ci/cd全副性能Jenkins Pipeline演进,这里筹备将cd继续集成拆分进去到spinnaker!当然了 失常的思路应该是将jenkins spinnaker的用户账号先买通集成ldap.spinnaker账号零碎曾经集成ldap.jenkins之前也做过相干的试验。这里对于jenkins集成ldap的步骤就先省略了。毕竟指标是拆分pipeline流水线实际。账号零碎 互通还没有那么有紧迫性!。当然了第一步我感觉还是少了镜像的扫描的步骤,先搞一波镜像的扫描!毕竟平安才是首位的 对于jenkins流水线pipeline的镜像扫描注:image 镜像仓库应用了harbor Trivyharbor默认的镜像扫描器是Trivy。早的时候貌似是clair?记得 查看harbor的api (不能与流水线集成提供扫描报告)看了一眼harbor 的api。harbor 的api能够间接scan进行扫描: 然而这里有个缺点:我想出报告间接展现在jenkins流水线中啊,GET也只能获取log,我总不能jenkins流水线集成了harbor中主动扫描,扫描实现了持续来harbor中登陆确认镜像有没有破绽吧?所以这个性能对外来说很是鸡肋。然而抱着学习的态度体验一下jenkins pipeline中镜像的主动扫描,首先参考了一下泽阳大佬的镜像主动清理的实例: import groovy.json.JsonSlurper//Docker 镜像仓库信息registryServer = "harbor.layame.com"projectName = "${JOB_NAME}".split('-')[0]repoName = "${JOB_NAME}"imageName = "${registryServer}/${projectName}/${repoName}"harborAPI = ""//pipelinepipeline{ agent { node { label "build01"}} //设置构建触发器 triggers { GenericTrigger( causeString: 'Generic Cause', genericVariables: [[defaultValue: '', key: 'branchName', regexpFilter: '', value: '$.ref']], printContributedVariables: true, printPostContent: true, regexpFilterExpression: '', regexpFilterText: '', silentResponse: true, token: 'spinnaker-nginx-demo') } stages{ stage("CheckOut"){ steps{ script{ srcUrl = "https://gitlab.xxxx.com/zhangpeng/spinnaker-nginx-demo.git" branchName = branchName - "refs/heads/" currentBuild.description = "Trigger by ${branchName}" println("${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]]) } } } stage("Push Image "){ steps{ script{ withCredentials([usernamePassword(credentialsId: 'harbor-admin-user', passwordVariable: 'password', usernameVariable: 'username')]) { sh """ sed -i -- "s/VER/${branchName}/g" app/index.html docker login -u ${username} -p ${password} ${registryServer} docker build -t ${imageName}:${data} . docker push ${imageName}:${data} docker rmi ${imageName}:${data} """ } } } } stage("scan Image "){ steps{ script{ withCredentials([usernamePassword(credentialsId: 'harbor-admin-user', passwordVariable: 'password', usernameVariable: 'username')]) { sh """ sed -i -- "s/VER/${branchName}/g" app/index.html docker login -u ${username} -p ${password} ${registryServer} docker build -t ${imageName}:${data} . docker push ${imageName}:${data} docker rmi ${imageName}:${data} """ } } } } stage("Trigger File"){ steps { script{ sh """ echo IMAGE=${imageName}:${data} >trigger.properties echo ACTION=DEPLOY >> trigger.properties cat trigger.properties """ archiveArtifacts allowEmptyArchive: true, artifacts: 'trigger.properties', followSymlinks: false } } } }}革新spinnaker-nginx-demo pipeline仍旧拿我spinnaker-nginx-demo的实例去验证,参见:对于jenkins的配置-spinnaker-nginx-demo,批改pipeline如下: ...

November 20, 2021 · 7 min · jiezi

关于cicd:自建的gitlab搭建CI工具-dangerjs

Dangerjs是用于代码审查的小工具,你所看到的什么XX Bot根本都是这玩意儿生成的,是项目管理的利器。他能够用于任何自动化的CI/CD工具链,罕用的有Github Actions,Gitlab Jobs。对于 Github/私有Gitlab 的,有一篇优良的文章举荐:https://segmentfault.com/a/11...,这里就不再阐述。这里次要探讨自建的Gitlab。 背景自建的gitlab版本: 11.9.9,没有开启MR接口(开启了能够尝试用新的dangerjs)应用可选,为你的小机器人创立一个账号必选,弄清楚三个环境变量DANGER_GITLAB_API_TOKEN, 登录机器人账号,点击右上角关上设置面板,并在左边找到Access Tokens,配置一个新的DANGER_GITLAB_HOST,自建gitlab的域名,如 https://gitlab.example.comDANGER_GITLAB_API_BASE_URL,gitlab API的base接口,如 https://gitlab.example.com/api/v4(现有的gitlab应该都是v4接口。如果不是请降级,那太老了)* 有些文章要求oauth token(官网也提到了),但其实不配置也行,这玩意儿还很简单,不如不配 必选,依赖以及目录构造目录下创立.gitlab-ci.yml及dangerfile.js .gitlab-ci.yml用于gitlab跑主动脚本,或者你用的Jekens,也能够在Jekens里配置,只有搞清楚本人须要触发条件以及蕴含对应环境变量即可dangerfile.js用于写那些你须要的条件,下图蕴含了咱们我的项目用到的一些有用的中央。npm i danger。(或者还有配套的lodash、env-cmd,看你需要)* 如果是后面提到的,MR接口未开,dangerjs须要是10.6.0以前的版本,能够选配10.5.4。(相干Issue:https://github.com/danger/dan...)(只有看到MR相干接口404就是这问题) 可选,测试一下本地测试,须要有个现成的MR。 { "scripts": { "local": "echo 'local test' && env-cmd danger pr https://gitlab.example.com/user/project/merge_requests/mrId" }}CICD润的 { "scripts": { "danger": "echo 'cicd running' && danger ci --failOnErrors -v", }}也能够配合husky这样的 { "scripts": { "prepush": "echo 'with husky' && npm danger:prepush", "danger:prepush": "env-cmd danger local --dangerfile dangerfile.js", }}必选,如何检测是否胜利看见相似于这个的,有条你的小机器人的评论就胜利 相干Repo: https://github.com/cangSDARM/...参考文章: https://segmentfault.com/a/11...官网网址/文档:https://danger.systems/js/

November 19, 2021 · 1 min · jiezi

关于cicd:Kubernetes中spinnaker使用二

背景:紧跟Kubernetes中spinnaker的应用一。实现了简略的各种Triggers触发器,还有deploy Mainfest部署一个kubernetes的简略流水线。这里依据理论的环境想更深刻一下流水线步骤:参数化的构建,webhook的触发,邮件的发送,jenkins流水线的集成等等首先明确一下pipeline是由多个stage组成的:对于默认的stage能够参照官网:https://spinnaker.io/docs/reference/pipeline/stages/。环境次要是kubernetes环境这里重视于: 从一条 pipeline开始创立application创立利用 pipeline-test,Permissions权限给运维组读写执行权限(其余组权限看集体需要,这里仅用作演示) 创立流水线pipeline创立pipeline流水线---Parameters-test1 Parameters-对于参数化构建筹备前提:参数化的构建是在Configuration步骤的依照罕用的常规将Kubernetes中spinnaker的应用一中的流水线拿来做试验! apiVersion: apps/v1kind: Deploymentmetadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: devspec: replicas: 1 selector: matchLabels: k8s-app: nginxdemo template: metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: containers: - image: 'harbor.xxxx.com/spinnaker/spinnaker-nginx-demo:1.2.4' imagePullPolicy: Always name: nginxdemo ports: - containerPort: 80 name: web protocol: TCP imagePullSecrets: - name: harbor-layame定义参数Parameters:定义image参数,设置默认镜像tag为nginx:1.18.0 deploy Mainfest这里的stage name是能够自定义名称的,间接设置stage name为公布利用:Manifest Configuration apiVersion: apps/v1kind: Deploymentmetadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: devspec: replicas: 1 selector: matchLabels: k8s-app: nginxdemo template: metadata: labels: k8s-app: nginxdemo name: nginxdemo namespace: dev spec: containers: - image: '${ parameters.image }' imagePullPolicy: Always name: nginxdemo ports: - containerPort: 80 name: web protocol: TCP减少webhook stage 保留流水线Payload 如下:当然了 也能够本人更为细节的去欠缺! ...

November 17, 2021 · 2 min · jiezi

关于ci-cd:GrowingIO-Design-组件库搭建之-CICD

前言在《GrowingIO SaaS 产品 CI/CD 实际》一文中,介绍了继续集成(Continuous Intergration,简称 CI)、继续交付(Continuous Delivery,简称 CD)和继续部署(Continuous Deployment,简称 CD)三个概念,以及在 GrowingIO SaaS 产品中的实际。 文中还强调一个典型的 CI/CD 流程建设至多须要具备以下性能的工具: 代码存储库,即须要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库继续集成服务器,用于主动执行构建,测试,部署等工作集中的制品治理仓库,用于寄存构建的成绩物,用于部署主动部署工具,用于将构建到的程序主动的部署到指标服务器 对于 GrowingIO Design,应用的工具是:代码存储库:GitHub继续集成服务器:GitHub Actions集中的制品治理仓库:npm主动部署工具:Vercel继续集成 代码查看(Lint codes)在《GrowingIO Design 组件库搭建之开发工具》一文中,介绍了组件库应用 stylelint 和 ESLint 作为代码标准工具。 为了方便使用,在 package.json 文件中减少一下两个脚本(后文简称脚本化): { "scripts": { "eslint": "eslint src --ext .ts,.tsx", "stylelint": "stylelint 'src/**/*.{css,less}' --syntax less", }, } 而后用 GitHub Actions 来执行这两个命令: jobs: lint: name: Lint codes needs: install runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 with: ref: ${{ github.event.pull_request.head.sha }} - name: Setup Node.js uses: actions/setup-node@v2.4.1 with: node-version: 14 - name: Restore Node.js modules uses: actions/cache@v2.1.6 with: path: node_modules key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} - name: StyleLint run: yarn stylelint - name: ESLint run: yarn eslint 单元测试(Unit test)《GrowingIO Design 组件库搭建之单元测试》中提到单元测试工具次要应用 Jest,在 CI 流程中除了保障单元测试通过,还要统计测试笼罩状况(通过 --coverage 参数来实现)。 命令脚本化: ...

October 15, 2021 · 4 min · jiezi

关于ci-cd:Linux下使用GitLab的runner来自动部署Go项目

Linux下应用GitLab的runner来主动部署Go我的项目在我的项目开发过程中,咱们常常会应用GitLab的CI/CD来主动部署我的项目,明天就让咱们来实现一个在Linux下启用GItLab的CI/CD来实现Go我的项目的主动部署。 咱们须要在GitLab上有一个我的项目,这里就不做演示了,咱们间接开始先装置runners。 1 装置runnersGitLab有三种Runner,别离是: Shared runners are available to all groups and projects in a GitLab instance.Group runners are available to all projects and subgroups in a group.Specific runners are associated with specific projects. Typically, specific runners are used for one project at a time.了解来说的话,就是: Shared runners是所有组和我的项目都能够应用共享流道,管理员来操作,通常只用在小团队中,GitLab中,默认是没有的。Group runners比拟罕用,能够反对团队内多个我的项目共享。 可复用的Runner,能够同时反对一类我的项目的CI,进步资源复用率。Specific runners则是与特定的我的项目关联,不能共享。 而且,对集体我的项目来说,没有Group这一层,应用Specific runners是比拟适合的。Runner是由运行在服务器上的守护过程来治理,一个守护过程能够治理多个runner,多个runner之间是依据token和url,注册到指定的GitLab上。 上面的教程也是基于Specific runners来做演示,首先咱们先下载GitLab的runner,咱们先进入GitLab的runner下载页面:https://docs.gitlab.com/runne...,能够看到官网的装置教程。 我当初应用的机器是一台腾讯云的Linux服务器,因而我须要抉择Install on GNU/Linux,如下图所示: 如果大家应用的是别的零碎,能够抉择对应的下载方式即可。 而后能够依据提醒进入下载页面,也可间接看上面的例子,下载对应的安装包,演示的机器应用的是Centos,抉择上面的例子即可。 这时候会发现,这个命令里有一个${arch}的参数,咱们看正文: # Replace ${arch} with any of the supported architectures, e.g. amd64, arm, arm64# A full list of architectures can be found here https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.htmlcurl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_${arch}.rpm"${arch}能够替换为任何反对的体系架构,也就是咱们须要改成这个样子: ...

October 11, 2021 · 2 min · jiezi

关于ci-cd:开发侧的CI-应该怎么做

CI 的理念是「频繁地,疾速地检测软件品质」,曾经被证实是一种比拟好的开发实际。本文沿着这一思路,试图总结出一点教训。 一种典型的开发人员流程如下: CI中最重要的准则是两个: 频繁,频次尽可能高。如果一个自动化工具不能被频繁地应用,那么它的价值会被大打折扣。疾速。如果一个自动化工具,单次应用的工夫太长,那么它的价值会被大打折扣。根据上述准则,流程中每一阶段的比照: 综合上述表格,有如下教训: push 阶段的CI必做合并merge request的CI倡议做,也能够将其提前本地commit阶段的CI,有精力就做,但大概率投产比不会高因而能够用一幅图概括:

July 28, 2021 · 1 min · jiezi