63

我安装了Promoted Build Pluginfrom Jenkins,现在我在推广现有工作的构建时遇到了一些麻烦。这是场景:

  1. 有一个现有的Nightly Build工作每天晚上运行,运行所需的所有测试和指标;

  2. 有一个Deploy Build接受参数 ${BUILD_NUMBER} 并部署具有相应 ${BUILD_NUMBER} 的构建Nightly Build

    • 假设 [Nightly Build] 运行并成功构建了工件 #39
    • 现在我可以运行将 #39 作为参数传入的 [Deploy Build]
      • [Nightly Build] #39 中的工件将被部署

到目前为止,一切都很好。现在是我要添加Build Promotions...的部分

这正是我需要实现的

没有办法从Nightly Build #39_ 或者甚至可能来自其他地方,坦率地说,我有点迷失在这里:(Deploy Build

我没有看到它们具有明确的上游/下游关系,因为它们没有:始终运行此构建,然后在执行过程中运行另一个 - [Deploy Build] 有时仅在 [Nightly构建]

4

2 回答 2

122

从 Parameterized Trigger Plugin 2.23 版开始更新:

随着版本 2.23+ 的行为发生变化(感谢AbhijeetKamble指出)。调用(构建)作业的预定义参数部分传递的任何参数都必须存在于被调用(部署)作业中。此外,调用作业参数的限制适用,因此如果调用作业的参数是一个选项,它必须预先填充所有可能的值(来自促销)。或者只使用Text参数类型。

解决方案

是的,我有完全相同的设置:构建作业(基于 SVN 提交)和手动执行的部署作业。当用户从构建作业中选择任何构建(包括旧构建)时,他们可以转到Promotion Status链接并执行各种部署促销,例如Deploy to DEVDeploy to QA

以下是如何在构建作业上设置促销:

  • 您将需要这些插件:Parameterized Trigger PluginPromoted Builds Plugin
  • 您还需要在此构建作业上设置默认存档 Artifacts构建后操作。
  • 复选标记促进构建时
  • 定义名称“部署到 DEV”
  • 标准复选标记下仅在手动批准时
  • Actions下,在其他项目上使用Trigger/call 构建
  • 要构建的项目中,在此处输入部署作业的名称
  • 选中标记阻止,直到触发的项目完成其构建
  • 如果触发的构建更差或等于:FAILURE(根据部署作业的状态进行调整),则将此构建标记为失败
  • 预定义参数 (代码 A)

代码 A:

Server=IP_of_my_dev_server`  
Job=$PROMOTED_JOB_NAME`  
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>

在上面的预定义参数部分中,= 左侧的名称是在部署作业中定义的参数。= 右侧是执行此促销时将分配给这些参数的值。定义三个参数Server和。JobBuildSelection

该参数Server=是我自己的,因为我的部署作业可以部署到多个服务器。但是,如果您的部署作业被硬编码为始终部署到特定位置,则您不需要这样做。

Job=参数是必需的,但参数的名称取决于您在部署作业中设置的内容(我将在那里解释配置)。该值$PROMOTED_JOB_NAME必须保持原样。这是升级过程知道的一个环境变量,它引用您的构建作业的名称(配置升级过程的那个)

BuildSelection=参数是必需的。整条线必须保持原样。传递的值是$PROMOTED_NUMBER,促销再次意识到这一点。在您的示例中,它将是#39.

在触发项目完成其构建之前阻塞复选标记将使升级过程等到部署作业完成。如果没有,升级过程将触发部署作业并成功退出。等待部署作业完成的好处是,如果部署作业失败,促销星也会被标记为失败。

(这里有一点注意:在部署作业运行时促销星会显示成功。​​果部署失败,它只会在部署作业完成后变为失败。逻辑......但如果你可能会有点混乱部署完成前看推广星)

这是设置部署作业的方法

  • 您将需要Copy Artifacts 插件
  • 此构建下已参数化
  • 使用名称配置选择(或文本)类型的参数(此名称必须与上一节中促销的预定义参数中的配置匹配) Server
  • 选择:输入上一节中促销的预定义参数将使用的可能服务器 IP 列表(请参阅下面的更新说明
  • 使用名称配置选择(或文本)类型的参数(此名称必须与上一节中促销的预定义参数中的配置匹配) Job
  • 选择:输入您的构建作业的默认名称。仅当您手动触发部署作业时才需要这样做。当部署作业从升级触发时,升级将提供值Job=来自我们配置的预定义参数)。此外,如果促销的预定义参数没有传递任何值,则将使用首选值。如果构建作业和部署作业之间存在一对一的关系,则可以省略Job=升级配置中的参数。
  • 更新: 自 Parameterized Trigger 版本 2.23 起,部署作业配置中的可用选项必须具有来自促销预定义参数的所有可能值。如果您不想要该限制,请使用“文本”而不​​是“选择”
  • 为具有名称的复制工件配置构建选择器类型的参数:BuildSelection
  • 默认选择器:最新成功构建
  • 构建步骤下
  • 配置从另一个项目复制工件
  • 项目名称中输入${Job}
  • 哪个构建选择Specified by a build parameter
  • 参数名称中输入BuildSelection(不带${...}!)
  • 为将从构建作业复制到部署作业工作区的工件相应地配置其余部分
  • 根据需要在部署作业中使用复制的工件以进行部署

因此,现在,通过上述部署作业,您可以手动运行它并从构建作业中选择要部署的构建号(上次构建、上次成功、按构建号等)。您可能已经对其进行了非常相似的配置。构建作业上的提升将基本上执行相同的操作,并根据执行的提升提供构建号。

如果您对说明有任何问题,请告诉我。

于 2013-03-04T17:03:22.757 回答
1

标记的答案是对问题的很好解释。但我想为那些寻找“如何从詹金斯推广另一个工作”的人提出一个解决方案

我们可以使用通用解决方案使用 CURL 和 REST API 进行强制提升。您可以从 Shell 或 Groovy 脚本执行 curl。

使用CURL的外壳解决方案:

    user_name="jenkins_user"
    user_token="token" 
    promotion_name="Test_Promote"
    jenkins_url="http://build-server.com"
    JOB_NAME="job_name"
    JOB_NO="job-no"

    url="--silent -u $user_name:$user_token $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name"
    curl $url


Groovy Soultion:
        user_name="jenkins_user"
        user_token="token" 
        promotion_name="Test_Promote"
        jenkins_url="http://build-server.com"
        JOB_NAME="job_name"
        JOB_NO="job-no"


def response = "curl -u $user_name:$user_token \" $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name".execute().text

如何生成jenkins用户令牌:https ://jenkins.io/blog/2018/07/02/new-api-token-system/

于 2019-04-02T22:53:54.350 回答