3

我想要的特别的事情是防止在灵活发布部分执行某些步骤。我使用字符串(不)匹配的条件,并且我不希望在检查失败后执行某些操作。

手动配置,预期的步骤如下所示: 预期的后期构建步骤

由于我在Jenkins Jobs DSL API中没有找到合适的方法,因此我尝试使用 Configure 块来重现它。参考资料说我可以将“项目”用于作业的根元素,将“节点”用于特定节点以将子节点附加到它们。它还表示,如果存在指向节点,则不会再次创建新节点。所以这是我的配置:

job("flexible_condition") {

  publishers {

    flexiblePublish {
      configure { node ->
          node / publishers /
          'org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher' << 'runner'(class:
          'org.jenkins_ci.plugins.run_condition.BuildStepRunner$DontRun')
        }

      condition {
        not { stringsMatch('string_placeholder', '', false) }
      }

      publisher {
        debianPackage('common') {
          commitMessage('new feature')
        }
      }

      publisher {
        git {
          pushOnlyIfSuccess(true)
          branch('origin', 'master')
        }
      }
    }
  }
}

尽管在我的詹金斯中也没有在 Playground 中生成参考所需的 xml。我有重复的节点,似乎“节点”被解释为“项目”,并且总是放在根目录。

<!-- 1. flexible_condition -->
<project>
    <actions></actions>
    <description></description>
    <keepDependencies>false</keepDependencies>
    <properties></properties>
    <scm class='hudson.scm.NullSCM'></scm>
    <canRoam>true</canRoam>
    <disabled>false</disabled>
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
    <triggers class='vector'></triggers>
    <concurrentBuild>false</concurrentBuild>
    <builders></builders>
    <publishers>
        <org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
            <runner     class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$DontRun'></runner>
        </org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
        <org.jenkins__ci.plugins.flexible__publish.FlexiblePublisher>
            <publishers>
                <org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
                    <condition     class='org.jenkins_ci.plugins.run_condition.logic.Not'>
                        <condition     class='org.jenkins_ci.plugins.run_condition.core.StringsMatchCondition'>
                            <arg1>string_placeholder</arg1>
                            <arg2></arg2>
                            <ignoreCase>false</ignoreCase>
                        </condition>
                    </condition>
                    <publisherList>
                        <ru.yandex.jenkins.plugins.debuilder.DebianPackagePublisher>
                            <repoId>common</repoId>
                            <commitMessage>new feature</commitMessage>
                            <commitChanges>true</commitChanges>
                            </ru.yandex.jenkins.plugins.debuilder.DebianPackagePublisher>
                        <hudson.plugins.git.GitPublisher>
                            <configVersion>2</configVersion>
                            <pushMerge>false</pushMerge>
                            <pushOnlyIfSuccess>true</pushOnlyIfSuccess>
                            <forcePush>false</forcePush>
                            <tagsToPush></tagsToPush>
                            <branchesToPush>
                                <hudson.plugins.git.GitPublisher_-BranchToPush>
                                        <targetRepoName>origin</targetRepoName>
                                    <branchName>master</branchName>
                                </hudson.plugins.git.GitPublisher_-BranchToPush>
                            </branchesToPush>
                        </hudson.plugins.git.GitPublisher>
                    </publisherList>
                    <runner class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail'></runner>
                </org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
            </publishers>
        </org.jenkins__ci.plugins.flexible__publish.FlexiblePublisher>
    </publishers>
    <buildWrappers></buildWrappers>
</project>

我一直在通过 Job DSL 版本 1.40 在 Playground 中检查此示例,但我的 jenkins 中的 1.39 给出了相同的结果。

做错了什么?

谢谢你。

UPD我按照 SevenEleven 的建议将配置块放在下面,它几乎有帮助。runner 节点现在在正确的位置,但仍然重复。

<publishers>
    <org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
        <condition .../>
        <publisherList>
            ...
        </publisherList>
        <runner class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail'></runner>
        <runner class='org.jenkins_ci.plugins.run_condition.BuildStepRunner$DontRun'></runner>
    </org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher>
</publishers>

UPD 2尽管 xml 中有两行不同的行,但较新的运行器替换了生成作业中的默认行。所以我得到了预期的结果。谢谢。

更新 3。耶!发现现在可以简单地使用 JobDSL 语法并且它可以工作。

publishers {

  flexiblePublish {
    conditionalAction {
      condition {
          not { stringsMatch('string_placeholder', '', false) }
      }

      publishers {
        debianPackage('common') {
          commitMessage('Automatic Commit')
        }
        git {
          pushOnlyIfSuccess(true)
          branch('origin', '$GIT_BRANCH')
        }
      }

      runner('DontRun')
    }
  }
}
4

1 回答 1

3

编辑配置,您必须将configure-block 放在下面,而不是在发布者配置中:

job("flexible_condition") {
    publishers {
        flexiblePublish {
        //...
        }
    }

    configure { 
        it / publishers / 'org.jenkins__ci.plugins.flexible__publish.FlexiblePublisher' / publishers / 'org.jenkins__ci.plugins.flexible__publish.ConditionalPublisher' /  'runner'(class:'org.jenkins_ci.plugins.run_condition.BuildStepRunner$DontRun') {
        }
    }
}
于 2015-12-08T18:37:41.530 回答