我有一个管道,我刚刚添加了2个参数来构建发布或调试(参数称为发布或调试)。管道使用cron语法每10分钟检查一次SCM中的更改,管道检查每次提交,然后构建发布(C程序),但我想每天构建调试一次,比如说每天从12到13的每个提交都将在调试中构建。所有这些都不需要我运行管道和手动更改参数(默认设置为release)。有什么办法可以做到这一点?这是管道的一个非常简短的版本:
pipeline {
stages {
stage('Setup parameters') {
steps {
script {
properties([
parameters([
choice(
defaultValue: 'RELEASE',
choices: ['RELEASE', 'DEBUG'],
name: 'BUILD_CONFIG'
),
])
])
}
}
}
stage('Build release'){
when {
expression {
return params.BUILD_CONFIG == 'RELEASE'
}
}
steps{
script {
def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation'
bat "\"${msbuild}\" /Source/project-GRDK.sln /t:Rebuild /p:configuration=\"Release Steam D3D11\""
}
}
}
stage('Build debug'){
when {
expression {
return params.BUILD_CONFIG == 'DEBUG'
}
}
steps{
script {
def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation'
bat "\"${msbuild}\" /Source/project-GRDK.sln /t:Rebuild /p:configuration=\"Debug Steam D3D11\""
}
}
}
}
}
使用< code > current build . raw build . get cause(Class)可以确定生成的原因
stage('Build debug if time triggered') {
when {
expression {
return currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause) == null
}
}
steps {
script {
def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation'
bat "\"${msbuild}\" /Source/project-GRDK.sln /t:Rebuild /p:configuration=\"Debug Steam D3D11\""
}
}
您还需要在<code>Build release
stage('Build release'){
when {
allOf {
expression {
return params.BUILD_CONFIG == 'RELEASE'
}
expression {
return currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause) != null
}
}
}
...
文档:
https://javadoc.jenkins-ci.org/hudson/model/Cause.html
https://javadoc.jenkins-ci.org/hudson/model/Run.html
如何区分Jenkins管道中的构建触发器
EDIT
如果您想将所有内容保持在一个管道中,那么您需要创建两个新变量。以下代码为今天上午12点创建Calendar
对象并将其转换为毫秒
。
Calendar date = new GregorianCalendar()
date.set(Calendar.HOUR_OF_DAY, 12);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
def start = date.getTime().getTime()
同样,您可以为< code >今天下午1点(例如< code >结束)创建一个< code >日历对象。使用< code > current build . raw build . gettimestamp()可以在调度构建时获得< code>Calendar对象。如果预定时间在< code>start和< code>end之间,例如设置一个布尔变量,并在流水线中检查它。
def buildDebug = false
def scheduled = currentBuild.rawBuild.getTimestamp().getTime().getTime()
if(scheduled > start && scheduled < end)
buildDebug = true
...
stage('Build release'){
when {
allOf {
expression {
return params.BUILD_CONFIG == 'RELEASE'
}
expression {
return currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause) == null
}
expression {
return buildDebug == false
}
}
}
...
stage('Build debug'){
when {
allOf {
expression {
return params.BUILD_CONFIG == 'RELEASE'
}
expression {
return currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause) == null
}
expression {
return buildDebug == true
}
}
}
如何创建一个今天午夜明天午夜的Java Date对象?
另一种选择是创建第二个作业,它使用正确的参数触发构建作业:
pipeline {
agent any
triggers {
cron('H 12 * * *')
}
stages {
stage('Build xxx debug') {
steps {
build job: "your-job-name-here", parameters: [
choice(name: 'BUILD_CONFIG', value: 'DEBUG')
]
}
}
}
}
parameterizedCron插件可以满足您的需求:
pipeline {
agent any
parameters {
choice(name: 'BUILD_CONFIG', choices: ['RELEASE', 'DEBUG'], defaultValue: 'RELEASE')
}
triggers {
parameterizedCron('''
1,2,3,4,5,6,7,8,9,10 * * * * % BUILD_CONFIG=RELEASE
12 * * * * % BUILD_CONFIG=DEBUG
''')
}
问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了
我在下面定义了一个swagger 2.0资源。如何使“param1或param2”成为必填项?调用方必须传递param1或param2。
我很难解决一个我能想象到的非常容易的问题,但我就是看不到。也就是说,我正在建立一个动态模拟模型,计算累积成本和收益。然而,我已经为模型引入了5年的时间跨度,但有一定的成本和收益,这些成本和收益只发生一次(例如在第一年)。但目前,该模型在每年的每次模拟中都使用这些参数。如何对其建模,使这些值只被纳入模拟一次? 当然有某种公式可以帮助我解决这个问题。AnyLogic支持页面也没有帮助我。
例如,我想要: 如果用户已指定增量,请使用它。如果不是,请使用依赖于 n 的值。这可能吗?
我有一个函数,使API调用服务器和更新用户界面与新数据。我想使,使每30秒我使API调用不同的url每次?这些API调用应该是不间断的,只要应用程序正在运行。
我如何将变量从主方法发送到方法A,以及我应该在方法B中的A()中传递什么参数。 代码: