我正在尝试为Jenkins创建我的第一个Groovy脚本:
在看了这里的https://jenkins.io/doc/book/pipeline/之后,我创建了这个:
node {
stages {
stage('HelloWorld') {
echo 'Hello World'
}
stage('git clone') {
git clone "ssh://git@mywebsite.example/myrepo.git"
}
}
}
然而,我得到:java.lang.NoSuchMethodError: No such DSL method "stages" found among steps
我错过了什么?
另外,我如何将我的凭据传递到Git存储库而不以纯文本形式写入密码?
2条答案
按热度按时间5kgi1eie1#
你是混淆和混合
Scripted Pipeline
与Declarative Pipeline
,为完全区别see here .但简短的故事:*声明性管道是管道DSL的一个新扩展(它基本上是一个只有一个步骤的管道脚本,一个带有参数的管道步骤(称为指令),这些指令应该遵循特定的语法。这种新格式的要点是它更严格,因此对于管道新手来说应该更容易,允许图形编辑等。
*脚本化管道是高级要求的后备。
因此,如果我们查看您的脚本,您首先打开一个
node
步骤,它来自脚本化管道。然后使用stages
,它是declarative pipeline
中定义的pipeline
步骤的指令之一。因此,您可以例如编写:因此,如果您想使用
declarative pipeline
,这是正确的方法。如果你想
scripted pipeline
,那么你写:例如:跳过阶段块。
bybem2ql2#
Jenkinsfile可以使用两种语法编写-声明性和脚本化。
宣告式管缐和指令码管缐的建构方式完全不同。宣告式管缐是Jenkins Pipeline的最新功能,它:
然而,许多写入Jenkinsfile的语法组件(或“步骤”)对于声明性管道和脚本化管道是通用的。例如:
声明性管道基础知识
在声明性管道语法中,
pipeline
块定义了整个管道中完成的所有工作。Jenkinsfile(宣告式管缐):
1.在任何可用代理上执行此管道或其任何阶段。
1.定义“构建”阶段。
1.执行与“构建”阶段相关的一些步骤。
1.定义“测试”阶段。
1.执行与“测试”阶段相关的一些步骤。
1.定义“部署”阶段。
1.执行与“部署”阶段相关的一些步骤。
脚本化管道基础知识
在脚本管道语法中,一个或多个
node
块在整个管道中执行核心工作。虽然这不是脚本管道语法的强制要求,但将管道的工作限制在node
块内会产生两个效果:1.通过向Jenkins队列中添加一个项来调度要运行的块中包含的步骤。只要节点上的执行器空闲,这些步骤就会运行。
1.创建一个工作区(特定于该特定管道的目录),在该工作区中可以对从源代码管理 checkout 的文件进行处理。
**警告:**根据您的Jenkins配置,某些工作区在一段时间不活动后可能不会自动清理。有关详细信息,请参阅JENKINS-2111中链接的票证和讨论。
Jenkinsfile(脚本管道):
1.在任何可用代理上执行此管道或其任何阶段。
1.定义“Build”阶段。
stage
块在Scripted Pipeline语法中是可选的。但是,在Scripted Pipeline中实现stage
块可以在Jenkins UI中提供每个阶段的任务/步骤子集的更清晰的可视化。1.执行与“构建”阶段相关的一些步骤。
1.定义“测试”阶段。5
1.执行与“测试”阶段相关的一些步骤。
1.定义“部署”阶段。
1.执行与“部署”阶段相关的一些步骤。
管道示例
下面是一个
Jenkinsfile
的示例,它使用声明性及其等效的脚本化管道语法:Jenkinsfile(宣告式管缐):
Jenkinsfile(脚本管道):