由于每次提交都必须运行所有构建/测试,因此构建/测试时间已大大增加。通过使用构建工具可以部分缓解这种情况,在我们的案例中,我们不再使用Buck。
运行与提交的代码相关的所有测试之后,每个项目都有一个部署Jenkinsfile。我如何才能仅为需要重新部署的项目触发Jenkinsfiles?如果我能够这样做,这是正确的做法吗?
#1 楼
获取已更改文件的列表,并使用该列表确定要运行的测试。
在运行时加载外部Groovy脚本以运行您的部署。
评论
请复制链接中的相关位,并将其张贴在引号中,以防止如果该链接被弃用,则该信息将丢失。也许您也可以添加自己的个人观点:您会选择什么选项,为什么?
– 030
19年7月27日在9:53
#2 楼
您可以将“ when”块与内置的“ changeset”条件结合使用,以有条件地仅运行monorepo管道的某些阶段。来自when.changeset文档:changeset-
如果构建的SCM变更集包含一个或多个与给定字符串或glob匹配的文件,则执行该阶段。示例:当{changeset“ ** / *。js”}
以下是使用此策略的示例Jenkinsfile:
pipeline {
agent any
stages {
stage('build matchengine') {
when {
changeset "**/matchengine/*.*"
}
steps {
echo 'building match engine'
}
}
stage('build posttrade') {
when {
changeset "**/posttrade/*.*"
}
steps {
echo 'building post trade'
}
}
}
}
,适用到如下所示的monorepo项目结构:
.(my-project)
|-- Jenkinsfile
|-- matchengine
|-- posttrade
|-- serverless
|-- ui
此策略无法扩展到较小的代码库,因为很难跟踪哪些模块相互依赖。使用像Bazel这样的构建系统会更好。您的CI作业只需发出一个bazel构建///(构建所有内容),然后Bazel将计算实际需要构建的内容以及需要测试的内容。此外,甚至存在诸如rules_docker和rules_k8s之类的淡褐色规则,它们可以计算需要重建哪些容器并将其推送到容器注册表,以及哪些应用程序需要重新部署到Kubernetes。
评论
不幸的是,变更集不包含变更请求中的所有变更,仅包含最后两次提交之间的增量。但是自定义检查很容易实现。
–芒果
20-2-16在9:25
评论
您的构建挂钩如何实现?您是否使用Jenkins轮询存储库?您是否在每次提交时都安装了git钩子?我们在每次提交时都放置了githooks