我从Promoted Build Plugin
安装了Jenkins
,现在我面临一些麻烦,无法从现有工作中推广构建。这是场景:
现有Nightly Build
个作业每晚运行一次,运行所需的所有测试和指标;
现有Deploy Build
接受参数$ {BUILD_NUMBER},并从Nightly Build
到目前为止一切顺利。现在是我要添加Build Promotions
...
有没有办法从Nightly Build #39
宣传Deploy Build
(注意它已经在之前构建)?或者甚至可能来自其他地方,坦率地说,我有点迷失在这里:(
我没有看到它们具有清晰的上游/下游关系,因为它们没有:总是运行此构建,然后在执行期间运行另一个 - [Deploy Build]有时仅执行并且并不总是在[夜间建造] 之后。
答案 0 :(得分:117)
使用版本2.23 + behavior changed(感谢AbhijeetKamble指出)。调用( 构建 )作业的预定义参数部分传递的任何参数都必须存在于被调用者中( 部署 )工作。此外,所谓的作业参数的限制适用,因此如果被叫作业的参数是选择,则必须预先填充所有可能的值(来自促销)。或者只使用文字参数类型。
是的,我有完全相同的设置:构建作业(基于SVN提交)和手动执行部署作业。当用户从 build 作业(包括旧版本)中选择任何版本时,他们可以转到促销状态链接并执行各种部署促销,例如部署到DEV ,部署到QA 等
代码A:
Server=IP_of_my_dev_server`
Job=$PROMOTED_JOB_NAME`
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>
在上面的预定义参数部分中,=左侧的名称是 deploy 作业中定义的参数。在=的右边是执行此促销时将分配给这些参数的值。定义三个参数Server
,Job
和BuildSelection
。
参数Server=
是我自己的,因为我的部署作业可以部署到多个服务器。但是,如果您的部署作业被硬编码为始终部署到特定位置,则您不会需要它。
Job=
参数是必需的,但参数的名称取决于您在部署作业中设置的内容(我将在那里解释配置)。值$PROMOTED_JOB_NAME
必须保持原样。这是促销流程知道的环境变量,并引用回 build 作业的名称(配置促销流程的作业)
BuildSelection=
参数是必需的。整条线必须保持原样。传递的值是$PROMOTED_NUMBER
,促销活动再次意识到这一点。在您的示例中,它将是#39
。
阻止,直到触发的项目完成构建复选标记将使升级过程一直等到部署作业完成。否则,升级过程将触发部署作业并成功退出。等待部署作业完成的好处是,如果部署作业失败,促销明星也将标记为失败。
(此处有一点注意:促销明星将成功 部署作业正在运行。如果部署失败,则只会在部署失败后更改为失败 deploy 作业已完成。逻辑......但如果在部署完成之前查看促销明星,可能会有点混乱)
Server
配置选择(或文字)类型的参数(此名称必须与促销中的配置相匹配上一节中的预定义参数)Job
配置选择(或文字)类型的参数(此名称必须与促销中的配置相匹配上一节中的预定义参数)Job=
)。此外,如果促销的预定义参数没有传递任何值,则将使用第一个选择值。如果 build 和 deploy 作业之间存在一对一关系,则可以在促销的配置中省略Job=
参数。< / LI>
BuildSelection
${Job}
Specified by a build parameter
BuildSelection
(不含${...}
!)现在,通过上面的部署作业,您可以手动运行它并从您要部署的 build 作业中选择哪个版本号(上次构建,上次成功,按照编号等)。您可能已经将它配置得非常相似。 build 作业上的升级基本上会执行相同的操作,并根据执行的促销提供内部版本号。
如果您对说明有任何疑问,请与我们联系。
答案 1 :(得分:1)
标记的答案是对该问题的很好解释。但是我想为那些寻求“如何从另一个工作中抽出一个特定的构建编号的人”提出解决方案
我们可以使用通用解决方案来使用CURL和REST API进行强制升级。您可以从Shell或Groovy脚本执行curl。
使用CURL的Shell解决方案:
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
如何生成詹金斯用户令牌:https://jenkins.io/blog/2018/07/02/new-api-token-system/