我有不同应用程序的 git monorepo。目前,我在包含应用程序所有管道的根文件夹中有一个 Jenkinsfile。当提交仅更改一个应用程序时,为所有应用程序执行完整管道非常耗时。
我们使用类似于 GitFlow 的方法进行分支,因此 Jenkins 中的 Multibranch Pipeline 作业非常适合我们的项目。
我正在寻找一种在 Jenkins 中拥有多个工作的方法,只有在更改相应应用程序的代码时才会触发每个工作。
对我来说完美的解决方案是这样的:
我在 Jenkins 有几个 Multibranch Pipeline 工作。每个都只查找给定目录和子目录的更改。每个人都使用自己的 Jenkinsfile。作业每 X 分钟拉一次 git,如果现有分支中的适当目录发生更改 - 启动构建;如果有更改适当目录的新分支 - 启动构建。
是什么阻止我执行此操作
我缺少一种方法来定义在 Multibranch 管道执行扫描期间必须忽略哪些文件夹的提交。Multibranch 管道的“附加行为”没有“轮询忽略对某些路径的提交”选项,而管道或自由式作业有。但我想使用 Multibranch 管道。
此处描述的解决方案对我不起作用,因为如果将有仅对“project1”进行更改的新分支,那么无论何时触发“project2”的多分支管道,它都会发现这个新分支并构建它。意味着对于每个新分支,无论是否对适当的代码进行了更改,我的每个多分支管道都将至少执行一次。
感谢任何帮助或建议我如何实现几个多分支管道监视同一个 git 存储库但仅在适当的代码片段更改时触发
我有一个多项目构建.子项目采用树形结构(非平面).在root build.gradle文件中,我有一个方法可以为编译阶段做一些常见的事情.
我想为每个子项目分别设置目标目录.因此,当我编译整个项目时,我将为每个子项目拥有自己的工件.我上面提到的方法进行编译,因此需要知道它编译的项目.
如果我使用"gradle:subproject1:subsubproject1:compile"命令,则project.name仍包含根项目名称.但我需要在运行时知道调用方法的任务项目.
问题是:
我正在使用以下项目结构项目
--- Subproject1
--- Subproject2
--- Subproject3
|的build.gradle
| settings.gradle
子项目2取决于子项目1
子项目3取决于子项目2
对于所有子项目,我需要具有任务"构建",这将是每个项目的自定义.但是必须在"构建"之前执行一些初始化任务(所有子项目都相同).事情是 - 这个初始化任务必须在构建过程中只执行一次,而不是我正在构建的东西 - 根项目或任何子项目.例如,如果我构建Subproejct3,则序列必须如下:init build Subproject1 build Subproject2 build Subproject3
我试图在root项目build.gradle中为"build"定义"doFirst"并将"init"代码放入其中.但在这种情况下,"init"代码在每次"构建"之前执行.我尝试为每个"构建"定义对root的依赖,但是遇到了与之前相同的问题.
我的 DAG(我们称之为 DAG_A)使用trigger_dagrun操作符启动另一个 DAG (DAG_B) 。DAG_B 的任务使用 XCOM,我想在完成后从 DAG_B 运行的任务之一(正是我开始的任务)中获取 XCOM 值。
使用 XCOM 不是硬性要求 - 基本上 Airflow 本身提供的任何(合理的)机制都可以工作。如果需要,我可以更改 DAG_B。
找不到此类案例的任何示例,因此感谢您的帮助。
计划 B 是让 DAG_B 将 XCOM 值与一些运行 ID 一起保存到一些持久性存储(如 DB 或文件)中,DAG_A 将从那里获取它。但如果有一些内置机制可用,我想避免这种复杂化。
我正在创建gradle自定义插件,我的一个任务需要确保另一个插件应用于同一个项目.因为它将在它之上运行.我希望我的插件的用户避免设置对另一个插件的显式依赖 - 我想在我的插件中进行.
所以,我希望应用此插件(https://plugins.gradle.org/plugin/org.hidetake.ssh).这是我的依赖.
我如何创建插件的方式 - 我只是在groovy上创建一个类代码,将它放在buildSrc\src\main\groovy中并在项目中应用groovy插件.所以我的自定义插件在构建阶段可以看到.它的工作原理,我为同一个项目做了很少的其他插件,所以现在好了.
我已经浏览了其他主题和谷歌相同的问题,但我不能让这项工作对我来说.这是我如何应用代码:
void apply(Project project) {
project.buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.hidetake:gradle-ssh-plugin:1.1.3"
}
}
project.apply plugin: "org.hidetake.ssh"
...
Run Code Online (Sandbox Code Playgroud)
我收到的错误消息:找不到ID为'org.hidetake.ssh'的插件.我试图通过gradle api也使用project.repositories.mavenCentral()和project.dependencies.add以及project.apply(插件:'org.hidetake.ssh')然后 - 也不起作用 - 同样的错误消息.试图在project.dependencies.add("myConfig",[group:'org.hidetake',名称:'gradle-ssh-plugin',版本:'1.1.3'])中使用长记法 - 没有结果.
感谢是否有人可以指导正确的语法\方式使其工作.