【问题标题】:Identifying exact component versions of a build artifact识别构建工件的确切组件版本
【发布时间】:2011-07-13 06:52:45
【问题描述】:

如何为相当复杂的产品设置基于 Jenkins 的构建流程(使用 Artifactory Pro 进行工件存储),以便轻松识别其每个组件的版本/修订?

其中一些组件可能是从其他组件创建的(本质上是一个聚合),因此这些子组件修订需要依次可识别。

我宁愿不一直构建完整的(大型)产品,将其源代码与它一起归档,而是使用以前创建的工件。在开发过程中,他们可能会有一个使用一段时间的 SNAPSHOT 版本。

在测试期间发现问题时,我如何将其追溯到每个已完成产品组件的确切源代码控制修订版以进行分析? 我们不会对所有事情都使用 SVN,并且没有用于其他 VCS 的 Jenkins 插件。


我们所做的一些工作基于 Maven,但解决方案应该足够灵活,不需要 Jenkins 中的 Maven 项目。

【问题讨论】:

  • 您使用的是哪种 VCS? Jenkins 有许多 VCS 插件。为什么不使用 SVN(或任何其他 VCS)来处理所有内容?可能您可以使用 JENKINS ID(作业 ID 等)来识别工件,但您必须将此信息放入您的构建(Maven)中。
  • @khmarbaise 我们将在今年晚些时候迁移到 SVN。我们当前的专有 VCS 没有 Maven 模块。如果不可能,请考虑提供需要 SVN 的答案。
  • 哪个 VCS ?清除案例?聚氯乙烯?
  • @khmarbaise MKS 诚信。我刚刚了解到实际上一个插件,但我不确定此时使用它是否有意义。

标签: maven build-process hudson jenkins artifacts


【解决方案1】:

您可以使用maven-buildnumber-plugin 从 Subversion 获取修订号并将此信息放入 MANIFEST 文件中。

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.1</version>
          <configuration>
            <archive>
              <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
              </manifest>
              <manifestEntries>
                  <buildNumber>${buildNumber}</buildNumber>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>

如果不存在 SVN 工作副本,以下 sn-p 将调用 buildNumber 插件并为版本使用不同的字符串。可能这可以用jenkins等的Job_ID代替。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.0-beta-4</version>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>create</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <revisionOnScmFailure>git</revisionOnScmFailure>
      <doCheck>false</doCheck>
      <doUpdate>false</doUpdate>
      <getRevisionOnlyOnce>true</getRevisionOnlyOnce>
    </configuration>
  </plugin>

【讨论】:

  • 不基于 Java 的组件怎么办?例如,其中一些是以非常特定的格式生成的资源,可能不允许直接包含构建信息(最好是存储库中的元数据)。
  • 但是您必须以任何形式打包这些资源?
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2011-01-17
  • 1970-01-01
  • 2022-01-06
  • 2017-11-11
相关资源
最近更新 更多