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

随着软件变得越来越复杂,软件构建也越来越复杂。由于应用程序由多个服务组成(通常由不同的团队开发),因此实现统一服务的自动化可能具有挑战性2022世界杯预选赛 .
JFrog管线是独一无二的DevOps CI / CD使开发人员能够创建高度复杂的解决方案DevOps流水线工作流.管道可以用多个路径、触发点和触发类型定义。管道也可以相互连接,使团队能够在相互依赖的项目上进行协作。
此外,作为的一部分JFrog平台对于CI/CD的区别,管线与Artifactory的自然集成repository manager, Xray和Distribution提供了支持和管理这些复杂构建所需的控制。
让我们看看JFrog管道中的一些基本示例,以展示如何从简单的机制构建复杂的管道:
单触发
在最简单的CI/CD工作流类型中,单个触发器启动单个管道中的单个路径的执行。比如这个例子管道构建一个Golang服务来自GitHub中的单个源存储库。
在管线DSL中,我们声明了一个GitRepo资源用于Golang服务的源回购(gosvc_gitRepo).默认情况下,资源将在提交到任何分支中的任何文件,但是如果您选择这样做,您可以指定更窄的条件,例如:仅指定某些文件、仅指定某些分支或其他存储库事件。
2022世界杯阿根廷预选赛赛程资源:—名称:gosvc_gitRepo类型:GitRepo配置:path: mygithub/go-service gitProvider: demo_github . zip#可选:只包含特定的文件:Dockerfile include: main。go分支:#可选:只包括特定分支:master buildOn: #可选:指定触发事件提交: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
在GitRepo资源的默认配置中,任何对源存储库的新提交都会触发管道的执行。或者GitRepo将根据您指定的条件触发。
在这个带注释的管道历史图中,您可以看到单个GitRepo更改如何触发一个简单的管道:

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

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

管道中的管道
正如您所看到的,您的CI/CD工作流可以变得非常复杂,有许多单独的管道可以跨团队相互连接。
JFrog管线帮助您跟踪他们通过其创新图视图可在我的管道选项卡JFrog平台。例如,你可以看到我们上面所有的例子是如何连接一个统一的CI过程的:

在这个视图中,您可以清楚地看到一组管道是如何一起工作的,并阐明与该集中的任何管道之间的路径。
使用JFrog管道,您可以根据需要构建复杂的管道,而不会丢失它们是如何相互连接的。如果需要,你甚至可以互连到詹金斯管道在你的管道链中。当您的构建由于错误、测试结果或严重的安全漏洞,您可以轻松地通过它们的执行路径跟踪它们。
想试试吗?免费开始使用JFrog平台用JFrog云帐户!
