问题标签 [build-pipeline]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1604 浏览

continuous-integration - Jenkins - 丢弃/保留参数化构建的工件

在 Jenkins(或 Hudson)中,我设置了一个参数化作业的管道,比如 A -> B,使用 Copy Artifact Plugin 从彼此复制工件。所有作业都使用相同的参数,例如目标平台。每个作业都设置为丢弃旧的构建和工件以限制磁盘使用,只保留最新的稳定构建工件。我使用参数化构建来避免必须维护许多仅在参数设置上有所不同的作业。

仅当所有构建在具有相同参数设置的管道中相继运行时,此设置才有效,因此最新的构建工件与相关作业的平台参数设置匹配。现在,如果有人首先为平台 x 构建作业 A,然后为平台 y 构建作业,然后为平台 x 构建 B,则来自 A 平台 x 的工件已经被丢弃,因此 B 无法复制这些工件。

有没有办法告诉詹金斯为每个构建使用不同的参数保留最新的工件并丢弃所有其他的?

0 投票
1 回答
3801 浏览

python - Jenkins 可以处理 gui/非 gui 交互式 python 或 java 程序吗?

我想创建一个构建管道,开发人员需要在属性文件中设置一些东西,该文件使用前端 GUI 填充。

我尝试使用 python 运行示例 CLI 交互式脚本,该脚本只要求输入一个名称并在之后将其打印出来,但 Jenkins 只是等待了很长时间然后就挂了。我看到它要求输入,但用户无法输入数据。

编辑:目前将Jenkins作为服务运行..或者有没有人推荐的好插件,或者它是我创建python脚本的方式?

偏好: 我更喜欢使用 Python,因为它有点轻量级,但如果人们使用其他语言取得成功,我可以组成。

使用 GUI 菜单来填充数据会很酷,因为我可以使用选项框、下拉菜单并使其变得花哨,但这不是必需的,CLI 比我们当前的部署要好得多。

顺便说一句,在运行 Python 2.7 和 Java 1.7 的 Windows 7 笔记本电脑上运行所有这些

对论文感到抱歉!希望人们可以帮助我!

0 投票
5 回答
5754 浏览

maven - 更改 Maven pom.xml物理价值

我正在为几个相互依赖的项目构建部署管道。每个构建都会生成一个具有唯一版本号的新发布构建,该版本会部署到 Maven 存储库。然后以该新版本作为依赖项触发管道中的下游项目,并以类似的方式构建。

我需要的是在构建项目之前更改 pom.xml(或多模块项目中的所有 pom)中的属性值。例如,在以下代码中,“0.1.200”将更改为“0.1.345”(或任何最新的内部版本号)。使用系统属性不是一个选项,因为更新的 pom 将部署在 Maven 存储库中,因此更改必须是持久的。

是否有一些 Maven 插件可以通过一个命令行指令执行此操作?否则,我将需要编写一个简短的脚本(例如在 Ruby 中)来解析和更改项目中的所有 pom.xml 文件。

0 投票
2 回答
4305 浏览

jenkins - 使用多个上游作业的版本参数化 Jenkins 作业

我需要创建一个构建管道,其中包含多个相互依赖的项目。这是一个简化的插图:

管道应该工作,以便当更改提交到任何项目的 SVN 存储库时,该项目会自动构建。此外,在构建 A 或 B 之后,它会触发 C 的构建。

每个构建都会生成具有唯一版本号(“XYBuildNumber”)的二进制文件,并且 C 必须获取 A 和 B 的版本号作为参数,以便可以使用这些版本构建 C。C 应该默认使用 A 和 B 的最新成功构建,但也应该可以使用旧版本的 A 或 B 手动触发 C(例如,如果我们想要部署其中一个项目的旧版本)。

创建这样的管道可以在Go上开箱即用,但我的公司认为它太昂贵了。(2014-02-27 更新:Go 不是开源和免费的!)所以现在我试图找出如何使用 Jenkins 来实现同样的事情,但还没有找到方法。我只找到了在 Jenkins 中创建简单的线性和菱形管道的说明,但没有找到具有多个独立上游项目的管道。

0 投票
2 回答
3482 浏览

jenkins - 使用增量 Gradle 构建的 Jenkins 构建管道

采用这个基本的构建管道(带有 gradle 任务):

  1. 编译/运行单元测试(gradle clean build)
  2. 集成测试(gradle integrationTest)
  3. 验收测试(gradle acceptTest)
  4. 部署(gradle myCustomDeployTask)

根据 Jez Humble 的“持续交付”一书,您应该只构建一次二进制文件。因此,在上述理论管道中,在第 1 步中,我们清理、编译和构建 WAR,在第 2 步中,我们运行集成测试(使用第 1 步中的编译代码),在第 3 步中,我们运行验收测试(使用已编译的步骤 1 中的代码),并在步骤 4 中部署 WAR(在步骤 1 中构建)。到目前为止,一切都很好。

我正在尝试在 Jenkins 中实现这个管道。因为每个作业都有自己的工作区,所以步骤 2、3 和 4 最终会重新编译代码并构建 WAR,这违反了只构建二进制文件一次的“持续交付”口头禅。

为了解决这个问题,我使用了“ Clone Workspace SCM ”Jenkins 插件,它将从第一个构建压缩工作区,并成为构建 2、3 和 4 的工作区的源。但是,gradle 仍然重新编译每个构建中的代码步骤,因为它显然使用文件的绝对路径来确定是否需要执行任务。由于插件将文件移动到了新的工作区,因此绝对路径发生了变化,这使得 gradle 认为它需要从头开始,而不是执行增量构建。

现在我们可以在 Jenkins 中共享工作空间,但这也令人不悦,因为可能会针对共享工作空间运行两个作业。

那么如何在坚持持续交付、Jenkins 和 Gradle 的最佳实践的同时使用 Jenkins 和 Gradle 实现上述管道呢?

0 投票
1 回答
564 浏览

jenkins - Jenkins - 在构建管道中跳过上游项目

我正在尝试建立一个复杂的构建管道,依赖关系图如下所示。

管道从 Prj-A 开始,然后是 Prj-B。Prj-C DE 可以并行运行。当 Prj-C、D、E 都完成后,运行 Prj-F。

例如,其中一项要求是,由于 Prj-C 依赖于 Prj-A 和 Prj-B,如果仅更改 Prj-C 中的源代码,我只想运行 Prj-C 然后 Prj-G。这是为了避免构建其他作业以节省整个构建时间。

经过大量的谷歌搜索,我没有发现任何解决方案可用于此类情况。所以我想到的解决方案(我不尝试)是:

  1. 为每个项目创建一个触发器作业,仅检查该项目的源代码是否更改,因此我们将有 7 个触发器作业。
  2. 为管道创建依赖解析器作业。
  3. 当任何触发器作业检测到更改时,它会触发依赖关系解析器作业。依赖解析器作业会知道哪个项目被更改,并确定在此构建中可以跳过的项目,并设置相应的环境变量。例如,当更改 Prj-C 时,它设置 skip-proja=true,skip-projb=true,skip-projd=true,skip proj-e=true。之后,它会触发构建管道。
  4. 当每个项目运行时,它会根据依赖解析器作业设置的环境变量检查是否可以跳过。

希望我已经让自己理解了,请让我知道是否有针对此案例的其他解决方案或您对我的解决方案的评论。谢谢!

0 投票
1 回答
502 浏览

jenkins - 跨构建管道的多个阶段聚合 SonarQube 代码覆盖率结果

假设我在 Jenkins 中构建了一个(非常简单的)构建管道,分为两个工作:

  1. 编译和单元测试
  2. 集成测试

理想情况下,我希望将两组测试的代码覆盖率纳入 SonarQube。这可能吗?似乎 SonarQube 假设每次更新都是针对整个项目的单个事务。

起初我很高兴看到增加了增量分析,但似乎这是针对不同的用例:只对更改的文件进行预提交检查。

如果在 SonarQube 中没有办法做到这一点,我将仅限于单元测试中只有可用的代码覆盖(至少在 SonarQube 中),或者延迟更新 SonarQube 项目直到第 2 步之后——但是我们的集成测试需要一个很长的时间,这意味着 SonarQube 中的结果会延迟。

人们如何处理这个现实世界?

0 投票
1 回答
793 浏览

jenkins - 如何在 Nexus 中推广非 Maven 工件?

我有一个非 Maven 项目,其二进制文件被部署到 Nexus。我使用 gradle 的 maven 插件创建工件并将其发布到 Nexus

现在,问题是我如何推广这个工件以在 Nexus 中发布?我尝试查找 jenkins 的 M2 发布插件,但它在我的源代码中查找 pom 文件。

0 投票
1 回答
553 浏览

build - IBM DevOps Pipeline:如何访问以前工作的工件?

我有一个构建阶段,如下所示,有两个构建作业,一个frontend和一个backend作业。如何从作业的构建脚本直接访问作业的构建存档目录?frontendbackend

我需要访问frontend构建工件才能正确构建最终存档。我可以看到所有工件都显示在frontend构建的工件选项卡中。但是我如何从第二份工作中访问它,即backend构建?

我在这里看到有一个环境变量可以访问当前作业的存档目录,但我需要访问其他作业存档目录。

在此处输入图像描述

0 投票
1 回答
1455 浏览

typescript - 扩展 angular-cli 的构建管道

我可以在不重写 angular-cli 本身的情况下扩展 angular-cli 的构建过程吗?就像过去一样,当我为构建过程编写 gulp/grunt 任务时,我可以改变我想要的一切。

我想更改 angular-cli 的默认构建系统。在生产构建中内联样式和 html 模板,更改文件的编译顺序、连接顺序……防止编译带有“_”前缀的 sass 文件,例如 _home、_about。将一些参数/配置传递给构建命令。