如何连接这些点:用JFrog管道创建复杂的CI/CD

随着软件变得越来越复杂,软件构建也越来越复杂。由于应用程序由多个服务组成(通常由独立的团队开发),因此自动化统一的应用程序可能具有挑战性持续集成过程。
JFrog管线是独一无二的DevOps CI / CD解决方案授权开发人员创建高度复杂的DevOps流水线工作流。管道可以用多个路径、触发点和触发类型来定义。管道也可以相互连接,使团队能够在相互依赖的项目上进行协作。
此外,作为…的一部分JFrog CI/CD的平台差异管道与Artifactory的自然整合repository manager、Xray和Distribution提供了支持和管理这些复杂构建所需的控制。
让我们来看看JFrog pipeline中的一些基本例子,看看如何从简单的机制构建复杂的管道:
单触发
在最简单的CI/CD工作流类型中,单个触发器在单个管道中启动单个路径的执行。例如,这个例子管道构建Golang服务从GitHub的单个源存储库。
在管道DSL中,我们声明了GitRepo资源,用于Golang服务的源库(gosvc_gitRepo).默认情况下,资源将触发提交到任何分支中的任何文件,但是如果您选择这样做,您可以指定更狭窄的条件,例如:仅某些文件、仅某些分支或其他存储库事件。
2022世界杯阿根廷预选赛赛程资源:-名称:gosvc_gitRepo路径:mygithub/go-service gitProvider: demo_githubfiles: #可选:只指定文件include: Dockerfile include: main。go分支:#可选:只指定分支包括:master buildOn: #可选:指定触发事件commit: true #默认为true pullRequestClose: true #默认为false releaseCreate: true #默认为false
然后我们可以声明GitRepo为input2022世界杯阿根廷预选赛赛程Resources在管道的第一步。
管道:-名称:demo_gosvc步骤:-名称:bld_svc类型:DockerBuild配置:affinityGroup: DockerImageBuild dockerFileLocation:。dockerFileName: Dockerfile dockerImageName: demo.jfrog-pipelines.com/kol-docker-local/gosvc dockerImageTag: ${run_number} input2022世界杯阿根廷预选赛赛程Resources: - name:gosvc_gitRepo-名称:demoArt
在giitrepo资源的默认配置中,任何对该源存储库的新提交都会触发管道的执行。或者GitRepo将根据您指定的条件触发。
在这张带注释的管道历史图中,你可以看到一个简单的GitRepo变化是如何触发一个简单的管道的:

如果需要,您可以在收到webhook,或在Cron时间间隔。要探索这些选项,请参阅文档主题触发管道和步骤。
多个触发器
这个更复杂的管道示例创建了一个应用程序,它由npm的前端部分和npm构建的后端部分组成Maven存储库。每个代码都在GitHub的独立源代码存储库中。每个组件都是单独构建的,然后组合成一个组件码头工人形象。
对于这种类型的持续集成工作流,当要么我们的前端或后端组件已经更改,我们需要重新构建只有已更改的组件。然后,我们需要为应用程序生成一个新的Docker映像。
在管道DSL中,这很容易实现,当你:
- 声明一个GitRepo资源用于前端源repo (
fe_gitrepo) - 为后端源代码库声明一个GitRepo资源(
be_gitrepo)
现在,每个GitRepo资源都可以在不同的起2022世界杯阿根廷预选赛赛程点分别触发我们的管道。在管道DSL中,我们将每个GitRepo资源声明为2022世界杯阿根廷预选赛赛程input2022世界杯阿根廷预选赛赛程Resources来触发执行构建的步骤。
管道:-名称:demo_application步骤:-名称:bld_frontendtype: NpmBuild配置:npmArgs:——no-progress——no-audit sourceLocation:。repositoryName: kol-npm-dev-remote2022世界杯阿根廷预选赛赛程fe_gitRepo集成:- name: demoArt - name:bld_backendtype: MvnBuild配置:sourceLocation:。mvnCommand: clean install -ntp configFileLocation:。configFileName: mvn-art-config input2022世界杯阿根廷预选赛赛程Resources: name:be_gitRepo-名称:demoArt
由此产生的多个触发点可以在这个带注释的管道历史图中看到:

连接管道
前面的示例展示了用两个触发器路径构造的单个管道,用于构建组成单个应用程序的两个应用程序组件中的一个。理论上,对于具有3个、10个或100个组件的应用程序,您可以使用相同的多触发器路径方法。但是管理如此复杂的单个管道是很困难的,特别是当不同的团队负责每个组件时。
相反,让每个团队为他们自己的组件创建和管理管道,然后将它们连接到“管道的管道”中,最终生成完整应用程序的最终构建或为其生成签名的发布包,这可能更容易JFrog分布。
在JFrog Pipelines中,当一个新的构建完成或被提升时,这是最好的DevOps练习它输出一个新的BuildInfoArtifactory。这将确保您的构建通过您的工件存储库是完全可跟踪的。作为JFrog平台的一部分,Pipelines与Artifactory和native步骤的自然集成使得这就像在Pipelines DSL中说“Yes, please”一样简单。
例如,我们前面的示例管道输出这些BuildInfo资源:2022世界杯阿根廷预选赛赛程
- Golang服务的提升版本(
gosvc_promoted_build_info) - 应用程序的提升版本(
appl_promoted_build_info)
这两个BuildInfo资源都可以用来触发序列中2022世界杯阿根廷预选赛赛程的下一个管道。在管道DSL中,我们将每个BuildInfo资源声明为2022世界杯阿根廷预选赛赛程input2022世界杯阿根廷预选赛赛程Resources来触发第一步,它会创建一个发行包:
——名称:demo_release_mgmt步骤:-名称:包类型:createrreleasebundle配置:releaseBundleName: demo_rb releaseBundleVersion: v1.0。${run_number} dryRun: false sign: false description:“一些随机的测试描述”inputResources:—name:2022世界杯阿根廷预选赛赛程gosvc_promoted_build_info——名称:appl_promoted_build_infooutput2022世界杯阿根廷预选赛赛程Resources: - name: release_bundle releaseNotes:语法:markdown内容:| ## Heading * Bullet * Points
这是将管道链接在一起的最佳实践。
该管道在以下情况触发要么先前的管道成功地完成了一个新的构建,如图所示:

管道中的管道
正如您所看到的,您的CI/CD工作流可以变得像您的野心所允许的那样复杂,具有跨团队互连的许多单独的管道。
JFrog Pipelines通过其创新功能帮助您跟踪它们图中提供的我的管道选项卡JFrog平台例如,您可以看到我们上面所有的例子是如何为一个统一的CI过程互连的:

在这个视图中,您可以清楚地看到一组管道是如何协同工作的,并明确了到该集合中任何管道的路径。
使用JFrog Pipelines,您可以根据需要构建尽可能复杂的管道,而不会丢失它们如何互连的跟踪。如果需要,你甚至可以连接到Jenkins管道在你的管道链中。当您的构建由于错误、测试结果或关键安全漏洞,您可以很容易地通过它们的执行路径跟踪它们。
想试一试吗?免费开始使用JFrog平台拥有JFrog云账户!
