我试图创建一个声明性詹金斯管道脚本,但有简单的变量声明问题。
以下是我的剧本:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13."
sh "echo ${foo}"
}
}
}
然而,我得到了这个错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 13.
def foo = "foo"
^
我在詹金斯2.7.4和管道2.4上。
同意@Pom12,@abayer。要完成答案,需要添加脚本块
试试这样的东西:
pipeline {
agent any
environment {
ENV_NAME = "${env.BRANCH_NAME}"
}
// ----------------
stages {
stage('Build Container') {
steps {
echo 'Building Container..'
script {
if (ENVIRONMENT_NAME == 'development') {
ENV_NAME = 'Development'
} else if (ENVIRONMENT_NAME == 'release') {
ENV_NAME = 'Production'
}
}
echo 'Building Branch: ' + env.BRANCH_NAME
echo 'Build Number: ' + env.BUILD_NUMBER
echo 'Building Environment: ' + ENV_NAME
echo "Running your service with environemnt ${ENV_NAME} now"
}
}
}
}
我认为错误不是来自指定的行,而是来自前3行。试试这个:
node {
stage("first") {
def foo = "foo"
sh "echo ${foo}"
}
}
我想你有一些多余的行是无效的。。。
从Declarative pipeline模型文档来看,似乎必须使用环境
声明块来声明变量,例如:
pipeline {
environment {
FOO = "foo"
}
agent none
stages {
stage("first") {
sh "echo ${FOO}"
}
}
}
Jenkins Pipelines的声明性模型有一个有限的语法子集,它允许在阶段
块中使用该语法子集-有关更多信息,请参阅语法指南。通过将步骤包装在脚本{…}中,可以绕过该限制
块,但结果是,
脚本
块中的语法、参数等将丢失验证。
问题内容: 我正在尝试创建一个声明性的Jenkins管道脚本,但是简单变量声明存在问题。 这是我的脚本: 但是,我收到此错误: 我正在使用Jenkins 2.7.4和Pipeline 2.4。 问题答案: Jenkins Pipelines的Declarative模型具有受限制的语法子集,该子句允许在块中使用- 有关更多信息,请参见语法指南。您可以通过将步骤包装在一个块中来绕过该限制,但是结果,您
我正在编写一个Groovy脚本,其中包含部署terraform的作业。我正在使用作业DSL并使种子作业由JCasC实现,一切正常。然后我有一个包含作业的Groovy文件的存储库。 如果我将Groovy文件保持为单个作业,它就可以正常工作。 然而,我希望能够构建具有构建阶段的管道。我知道我可以把管道写在詹金斯文件中 我有这个作为开始: 但是,我看到了这个错误: 我已经尝试了各种方法,并阅读了一堆文档
我已经设置了一个Jenkins声明管道作业,它从Git中提取Jenkins文件。我有一个在另一个节点上运行的阶段(由标签选择),但它也试图从Git中检出Jenkinsfile。 我怎样才能阻止这种行为?这个特定的从属服务器位于防火墙的另一端,我只能通过SSH访问它。
问题内容: 我正在尝试做这样的事情: 但这给了我这个例外: 是否可以将阶段定义为外部闭包? 问题答案: 您不能在声明式管道之外定义阶段。声明性管道的主要目的是提供经过简化且自以为是的语法,因此您可以专注于应该做什么(通过使用一些可用的步骤)而不是如何去做。 如果您对更灵活的管道实现方式感兴趣,可以选择“ 脚本化管道”方法,该语法在语法方面并不严格-仅受Groovy和CPS执行模块的限制。 您的示例
我正在尝试创建一个定制的Jenkins管道,它将多个Jenkins作业生成的工件绑定在一起。每个作业都在不同的存储库上运行(基于它们自己的文件)。这些Jenkins文件的阶段完成了创建档案、编译代码等任务。 有人可能会说,我可以使用单个作业中的工件,然后将它们绑定在一起,但问题是这个高级管道将在特定的 ,因此它无法凭空创建存档。 由于我是詹金斯管道公司的新手,您对如何解决这个问题有什么建议吗? 最
我正在使用詹金斯声明管道,不知道是否有任何方法可以定期触发特定阶段。 我的意思是,当我们签出SCM时,管道会触发,但阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在Jenkins文件中。 有没有办法做到这一点?这样做的最佳方法是什么?