在 Jenkins 脚本化管道中,我们能够创建方法并调用它们。
在 Jenkins 声明性管道中是否也有可能?如何?
在 Jenkins 脚本化管道中,我们能够创建方法并调用它们。
在 Jenkins 声明性管道中是否也有可能?如何?
较新版本的声明式管道支持这一点,而这在之前(~2017 年中)是不可能的。您可以按照 groovy 脚本的期望声明函数:
pipeline {
agent any
stages {
stage('Test') {
steps {
whateverFunction()
}
}
}
}
void whateverFunction() {
sh 'ls /'
}
您可以像这样创建一个 groovy 函数并将其保存在您的 git 中,该 git 应该配置为托管库(也可以在 jenkins 中配置它):
/path/to/repo-shared-library/vars/sayHello.groovy:
内容:
def call(String name = 'human') {
echo "Hello, ${name}."
}
您可以使用以下方法在管道中调用此方法:
@Library('name-of-shared-library')_
pipeline {
agent any
stages {
stage('test') {
steps {
sayHello 'Joe'
}
}
}
}
输出:
[Pipeline] echo
Hello, Joe.
您可以重用您保存在库中的现有函数。
您还可以拥有包含所有功能的单独 groovy 文件(只是为了保持结构和整洁),您可以使用管道将其加载到文件中:
JenkinsFile.groovy
Map modules = [:]
pipeline {
agent any
stages {
stage('test') {
steps {
script{
modules.first = load "first.groovy"
modules.first.test1()
modules.first.test2()
}
}
}
}
}
第一个.groovy
def test1(){
//add code for this method
}
def test2(){
//add code for this method
}
return this
这对我有用。它可以使用 Blue Ocean GUI 查看,但是当我使用 Blue Ocean GUI 进行编辑时,它会删除方法“def showMavenVersion(String a)”。
pipeline {
agent any
stages {
stage('build') {
agent any
steps {
script {
showMavenVersion('mvn version')
}
}
}
}
}
def showMavenVersion(String a) {
bat 'mvn -v'
echo a
}