我有一个单一的管道,它是声明性的,我有几个阶段,例如下面通过网络钩子触发。
我想执行和计划阶段B在某个时间也可以通过webhook运行没有触发。很明显,它需要在通过webhook触发时运行,也需要在被调度时运行。我能在Jenkins中不创建单独的工作或管道的情况下处理这个问题吗?
stage('A'){
when{
beforeAgent true
expression{return env.GIT_BRANCH == "origin/development"}
}
steps{
script{
//Do something
}
stage ('B'){
when {
beforeAgent true
expression{return env.GIT_BRANCH == "origin/development"}
steps {
script {
//Run Tests
}
}
}
stage('C'){
when{
beforeAgent true
expression{return env.GIT_BRANCH == "origin/development"}
}
steps{
script{
//Do something
}
不是以干净或一流的方式,但是的,你可以有效地做到这一点。
对于至少运行过一次的任何作业,您可以单击“重播”进行上一次运行。
然后,您将在文本编辑框中看到Jenkinsfile。此时,您可以对Jenkinsfile执行任何想要的编辑(如果您愿意,包括粘贴到完全不相关的Jenkinsfile中),Jenkins将执行修改后的版本。对于您的特定情况,您可以删除所有不想重新运行的阶段,只留下您想要的一个(或两个等)。
您可以发现导致管道运行的原因。这可能是< code>cron触发器、手动触发器、代码提交触发器、webhook触发器、GitHub上的注释、上游作业等。(根据安装的插件,列表可能会很长。)
这是理解触发器的代码示例。此示例设置环境变量TRIGGERED_BY
。
def checkForTrigger() {
def timerCause = currentBuild.rawBuild.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)
if (timerCause) {
echo "Build reason: Build was started by timer"
env.TRIGGERED_BY = 'timer'
return
}
def userCause = currentBuild.rawBuild.getCause(hudson.model.Cause$UserIdCause)
if (userCause) {
echo "Build reason: Build was started by user"
env.TRIGGERED_BY = 'user'
return
}
def remoteCause = currentBuild.rawBuild.getCause(hudson.model.Cause$RemoteCause)
if (remoteCause) {
echo "Build reason: Build was started by remote script"
env.TRIGGERED_BY = 'webhook'
return
}
// etc.
println "We haven't caught any of triggers, might be a new one, here is the dump"
def causes = currentBuild.rawBuild.getCauses()
println causes.dump()
}
我认为一个构建可能有不止一个触发器,如果是这样的话,你的子句的顺序很重要。
一旦你明白了这一点,只有当触发器符合你的定义时,你才能运行你的阶段。
stage ('B'){
when {
beforeAgent true
anyOf {
expression{return env.GIT_BRANCH == "origin/development"}
environment name: 'TRIGGERED_BY', value: 'timer'
environment name: 'TRIGGERED_BY', value: 'webhook'
}
问题内容: 已解决 :感谢S.Richmond的以下答复我需要取消所有类型的存储映射,这意味着将变量和使用后作废。 附加 :搜索此错误的人员可能有兴趣使用Jenkins管道步骤- 在此处查找更多信息。 我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业。管道然后使用隔离器对此进行解析,然后选择重要信息。然后,它将使用该信息与不同的作业参数并行运行1
下面是我简单的jenkins pipeline groovy脚本,它将用这两个阶段和我们想要构建的作业创建一个管道,我希望在job configuration下的脚本中每次都更新用于构建和代码分析的作业名,方法是从用户界面中获取数据,用户将使用Eclipse提供构建作业名和代码分析作业名- jenkinsfile脚本:-
问题内容: 考虑一个詹金斯管道有两个阶段, A阶段 则 B阶段 。 在阶段B中,是否可以为某些特定文本解析阶段A的日志? 问题答案: 自7月28日以来已有更新! 正如mentionned 这个答案,作为2.4版本的_管道:节点和进程_ ,你可以使用: 至少,与输出到文件然后读取文件相比,它更加简单和干净。
问题内容: 我们所有分支机构都有“阶段(构建)”。临时如何跳过此阶段,以便在多分支管道中的所有分支上运行。我知道一种解决方案是在阶段条件下使用,并要求所有开发人员将该分支拉入他们的分支。但这就是很多工作和协调。取而代之的是,我正在寻找一个全局配置,在该配置中,我们可以简单地按名称跳过任何分支上的阶段。 问题答案: 听起来好像您将Jenkinsfile放在代码的旁边,但是想要从管理的角度更改Jenk
问题内容: 我有两条詹金斯管道,比方说管道A和管道B。我想在管道B中调用管道A。我怎样才能做到这一点? (管道A是管道B的子集。管道A负责执行一些日常工作,可以在管道B中重用) 我已经在计算机上安装了Jenkins 2.41。 问题答案: 以下解决方案对我有效: 在此处添加“管道:构建步骤”官方文档的链接:https : //jenkins.io/doc/pipeline/steps/pipeli
我打算有一个带有Jenkins的光盘管道,它接受我的应用程序,将码头工人映像发布到我的私人码头工人存储库。我想我知道怎么做。 我不确定的是库伯内特斯部分。我想把那个图像部署到我的私人库伯内特斯集群(目前是1个主集群) 问:安装了 kubectl 和 docker 的詹金斯从站是否需要成为 Kubernetes 集群的一部分才能触发部署?如何触发该部署?