没有这样的 DSL 方法`stages`
no such DSL method `stages`
我正在尝试为 Jenkins 创建我的第一个 Groovy 脚本:
看了这里 https://jenkins.io/doc/book/pipeline/,我创建了这个:
node {
stages {
stage('HelloWorld') {
echo 'Hello World'
}
stage('git clone') {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
}
但是,我得到:
java.lang.NoSuchMethodError: No such DSL method "stages" found among steps
我错过了什么?
此外,如何将我的凭据传递到 Git 存储库而不以纯文本形式写入密码?
你混淆了 Scripted Pipeline
和 Declarative Pipeline
,完全不同 see here。但短篇小说:
- declarative pipelines是管道DSL的新扩展(它基本上是一个只有一个步骤的管道脚本,一个带参数的管道步骤(称为指令),这些指令应该遵循特定的语法。这种新格式的要点是它更严格,因此对于管道新手来说应该更容易,允许图形编辑等等。
- 脚本化管道 是高级要求的后备。
因此,如果我们查看您的脚本,您首先会打开一个 node
步骤,该步骤来自脚本管道。然后使用 stages
,这是 declarative pipeline
中定义的 pipeline
步骤的指令之一。所以你可以写:
pipeline {
...
stages {
stage('HelloWorld') {
steps {
echo 'Hello World'
}
}
stage('git clone') {
steps {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
}
}
因此,如果您想使用 declarative pipeline
,那就是正确的选择。
如果你想scripted pipeline
,那么你写:
node {
stage('HelloWorld') {
echo 'Hello World'
}
stage('git clone') {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
例如:跳过阶段块。
可以使用两种类型的语法编写 Jenkinsfile - 声明式 和 脚本式.
声明式和脚本式管道的构造根本不同。声明式流水线是 Jenkins 流水线的最新特性:
提供了比脚本管道语法更丰富的语法特性,并且
旨在使编写和阅读流水线代码更容易。
然而,写入 Jenkinsfile 的许多单独的语法组件(或 "steps")对于声明式和脚本式管道都是通用的。
示例:
声明式管道基础知识
在声明式管道语法中,pipeline
块定义了整个管道中完成的所有工作。
Jenkinsfile(声明式管道):
pipeline {
agent any 1
stages {
stage('Build') { 2
steps {
// 3
}
}
stage('Test') { 4
steps {
// 5
}
}
stage('Deploy') { 6
steps {
// 7
}
}
}
}
- 在任何可用代理上执行此管道或其任何阶段。
- 定义 "Build" 阶段。
- 执行与 "Build" 阶段相关的一些步骤。
- 定义 "Test" 阶段。
- 执行与 "Test" 阶段相关的一些步骤。
- 定义 "Deploy" 阶段。
- 执行与 "Deploy" 阶段相关的一些步骤。
脚本化管道基础知识
在脚本化流水线语法中,一个或多个 node
块在整个流水线中完成核心工作。虽然这不是脚本化流水线语法的强制要求,但将流水线的工作限制在 node
块内有两件事:
通过将项目添加到 Jenkins 队列来将块中包含的步骤安排到 运行。一旦执行程序在节点上空闲,这些步骤将 运行.
创建一个工作区(特定于特定管道的目录),可以在其中对从源代码管理中检出的文件进行工作。
警告:根据您的 Jenkins 配置,某些工作区在一段时间不活动后可能不会自动清理。有关详细信息,请参阅 JENKINS-2111 链接的票证和讨论。
Jenkinsfile(脚本化管道):
node { 1
stage('Build') { 2
// 3
}
stage('Test') { 4
// 5
}
stage('Deploy') { 6
// 7
}
}
- 在任何可用代理上执行此管道或其任何阶段。
- 定义 "Build" 阶段。
stage
块在脚本化管道语法中是可选的。但是,在脚本化管道中实施 stage
块可以更清晰地显示 Jenkins UI 中 tasks/steps 的每个“阶段”子集。
- 执行与 "Build" 阶段相关的一些步骤。
- 定义 "Test" 阶段。 5
- 执行与 "Test" 阶段相关的一些步骤。
- 定义 "Deploy" 阶段。
- 执行与 "Deploy" 阶段相关的一些步骤。
管道示例
这是一个 Jenkinsfile
使用声明式及其等效的脚本管道语法的示例:
Jenkinsfile(声明式管道):
pipeline {
agent any
options {
skipStagesAfterUnstable()
}
stages {
stage('Build') {
steps {
sh 'make'
}
}
stage('Test'){
steps {
sh 'make check'
junit 'reports/**/*.xml'
}
}
stage('Deploy') {
steps {
sh 'make publish'
}
}
}
}
Jenkinsfile(脚本化管道):
node {
stage('Build') {
sh 'make'
}
stage('Test') {
sh 'make check'
junit 'reports/**/*.xml'
}
if (currentBuild.currentResult == 'SUCCESS') {
stage('Deploy') {
sh 'make publish'
}
}
}
我正在尝试为 Jenkins 创建我的第一个 Groovy 脚本:
看了这里 https://jenkins.io/doc/book/pipeline/,我创建了这个:
node {
stages {
stage('HelloWorld') {
echo 'Hello World'
}
stage('git clone') {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
}
但是,我得到:
java.lang.NoSuchMethodError: No such DSL method "stages" found among steps
我错过了什么?
此外,如何将我的凭据传递到 Git 存储库而不以纯文本形式写入密码?
你混淆了 Scripted Pipeline
和 Declarative Pipeline
,完全不同 see here。但短篇小说:
- declarative pipelines是管道DSL的新扩展(它基本上是一个只有一个步骤的管道脚本,一个带参数的管道步骤(称为指令),这些指令应该遵循特定的语法。这种新格式的要点是它更严格,因此对于管道新手来说应该更容易,允许图形编辑等等。
- 脚本化管道 是高级要求的后备。
因此,如果我们查看您的脚本,您首先会打开一个 node
步骤,该步骤来自脚本管道。然后使用 stages
,这是 declarative pipeline
中定义的 pipeline
步骤的指令之一。所以你可以写:
pipeline {
...
stages {
stage('HelloWorld') {
steps {
echo 'Hello World'
}
}
stage('git clone') {
steps {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
}
}
因此,如果您想使用 declarative pipeline
,那就是正确的选择。
如果你想scripted pipeline
,那么你写:
node {
stage('HelloWorld') {
echo 'Hello World'
}
stage('git clone') {
git clone "ssh://git@mywebsite.com/myrepo.git"
}
}
例如:跳过阶段块。
可以使用两种类型的语法编写 Jenkinsfile - 声明式 和 脚本式.
声明式和脚本式管道的构造根本不同。声明式流水线是 Jenkins 流水线的最新特性:
提供了比脚本管道语法更丰富的语法特性,并且
旨在使编写和阅读流水线代码更容易。
然而,写入 Jenkinsfile 的许多单独的语法组件(或 "steps")对于声明式和脚本式管道都是通用的。 示例:
声明式管道基础知识
在声明式管道语法中,pipeline
块定义了整个管道中完成的所有工作。
Jenkinsfile(声明式管道):
pipeline {
agent any 1
stages {
stage('Build') { 2
steps {
// 3
}
}
stage('Test') { 4
steps {
// 5
}
}
stage('Deploy') { 6
steps {
// 7
}
}
}
}
- 在任何可用代理上执行此管道或其任何阶段。
- 定义 "Build" 阶段。
- 执行与 "Build" 阶段相关的一些步骤。
- 定义 "Test" 阶段。
- 执行与 "Test" 阶段相关的一些步骤。
- 定义 "Deploy" 阶段。
- 执行与 "Deploy" 阶段相关的一些步骤。
脚本化管道基础知识
在脚本化流水线语法中,一个或多个 node
块在整个流水线中完成核心工作。虽然这不是脚本化流水线语法的强制要求,但将流水线的工作限制在 node
块内有两件事:
通过将项目添加到 Jenkins 队列来将块中包含的步骤安排到 运行。一旦执行程序在节点上空闲,这些步骤将 运行.
创建一个工作区(特定于特定管道的目录),可以在其中对从源代码管理中检出的文件进行工作。
警告:根据您的 Jenkins 配置,某些工作区在一段时间不活动后可能不会自动清理。有关详细信息,请参阅 JENKINS-2111 链接的票证和讨论。
Jenkinsfile(脚本化管道):
node { 1
stage('Build') { 2
// 3
}
stage('Test') { 4
// 5
}
stage('Deploy') { 6
// 7
}
}
- 在任何可用代理上执行此管道或其任何阶段。
- 定义 "Build" 阶段。
stage
块在脚本化管道语法中是可选的。但是,在脚本化管道中实施stage
块可以更清晰地显示 Jenkins UI 中 tasks/steps 的每个“阶段”子集。 - 执行与 "Build" 阶段相关的一些步骤。
- 定义 "Test" 阶段。 5
- 执行与 "Test" 阶段相关的一些步骤。
- 定义 "Deploy" 阶段。
- 执行与 "Deploy" 阶段相关的一些步骤。
管道示例
这是一个 Jenkinsfile
使用声明式及其等效的脚本管道语法的示例:
Jenkinsfile(声明式管道):
pipeline {
agent any
options {
skipStagesAfterUnstable()
}
stages {
stage('Build') {
steps {
sh 'make'
}
}
stage('Test'){
steps {
sh 'make check'
junit 'reports/**/*.xml'
}
}
stage('Deploy') {
steps {
sh 'make publish'
}
}
}
}
Jenkinsfile(脚本化管道):
node {
stage('Build') {
sh 'make'
}
stage('Test') {
sh 'make check'
junit 'reports/**/*.xml'
}
if (currentBuild.currentResult == 'SUCCESS') {
stage('Deploy') {
sh 'make publish'
}
}
}