小编mrz*_*iak的帖子

Jenkins 多分支管道仅用于子文件夹

我有不同应用程序的 git monorepo。目前,我在包含应用程序所有管道的根文件夹中有一个 Jenkinsfile。当提交仅更改一个应用程序时,为所有应用程序执行完整管道非常耗时。

我们使用类似于 GitFlow 的方法进行分支,因此 Jenkins 中的 Multibranch Pipeline 作业非常适合我们的项目。

我正在寻找一种在 Jenkins 中拥有多个工作的方法,只有在更改相应应用程序的代码时才会触发每个工作。

对我来说完美的解决方案是这样的:

我在 Jenkins 有几个 Multibranch Pipeline 工作。每个都只查找给定目录和子目录的更改。每个人都使用自己的 Jenkinsfile。作业每 X 分钟拉一次 git,如果现有分支中的适当目录发生更改 - 启动构建;如果有更改适当目录的新分支 - 启动构建。

是什么阻止我执行此操作

  1. 我缺少一种方法来定义在 Multibranch 管道执行扫描期间必须忽略哪些文件夹的提交。Multibranch 管道的“附加行为”没有“轮询忽略对某些路径的提交”选项,而管道或自由式作业有。但我想使用 Multibranch 管道。

  2. 此处描述的解决方案对我不起作用,因为如果将有仅对“project1”进行更改的新分支,那么无论何时触发“project2”的多分支管道,它都会发现这个新分支并构建它。意味着对于每个新分支,无论是否对适当的代码进行了更改,我的每个多分支管道都将至少执行一次。

感谢任何帮助或建议我如何实现几个多分支管道监视同一个 git 存储库但仅在适当的代码片段更改时触发

jenkins jenkins-pipeline monorepo jenkins-blueocean

15
推荐指数
2
解决办法
7864
查看次数

在gradle中获取任务的项目名称

我有一个多项目构建.子项目采用树形结构(非平面).在root build.gradle文件中,我有一个方法可以为编译阶段做一些常见的事情.

我想为每个子项目分别设置目标目录.因此,当我编译整个项目时,我将为每个子项目拥有自己的工件.我上面提到的方法进行编译,因此需要知道它编译的项目.

如果我使用"gradle:subproject1:subsubproject1:compile"命令,则project.name仍包含根项目名称.但我需要在运行时知道调用方法的任务项目.

问题是:

  1. 对于子项目有单独的目标,这是一个好主意吗?
  2. 如何在这个方法中理解调用方法的任务项目?

groovy gradle

7
推荐指数
1
解决办法
1万
查看次数

Gradle multi项目 - 仅执行一次root任务

我正在使用以下项目结构项目

--- 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的依赖,但是遇到了与之前相同的问题.

gradle build.gradle

5
推荐指数
1
解决办法
2766
查看次数

从一个 Airflow DAG 返回值到另一个

我的 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 将从那里获取它。但如果有一些内置机制可用,我想避免这种复杂化。

python airflow apache-airflow-xcom

5
推荐指数
1
解决办法
481
查看次数

Gradle:从另一个插件添加插件依赖项

我正在创建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'])中使用长记法 - 没有结果.

感谢是否有人可以指导正确的语法\方式使其工作.

groovy gradle gradle-plugin

4
推荐指数
1
解决办法
1597
查看次数