チェックアウトを処理する handleCheckout.groovy を備えた jenkins_library があります。
def handleCheckout = {
if (env.gitlabMergeRequestId) {
sh "echo 'Merge request detected. Merging...'"
checkout([
$class : 'GitSCM',
branches : [[name: "${env.gitlabSourceNamespace}/${env.gitlabSourceBranch}"]],
extensions : [
[$class: 'PruneStaleBranch'],
[$class: 'CleanCheckout'],
[
$class : 'PreBuildMerge',
options: [
fastForwardMode: 'NO_FF',
mergeRemote : env.gitlabTargetNamespace,
mergeTarget : env.gitlabTargetBranch
]
]
],
userRemoteConfigs: [
[
credentialsId: env.CREDENTIALS_ID,
name : env.gitlabTargetNamespace,
url : env.gitlabTargetRepoSshURL
],
[
credentialsId: env.CREDENTIALS_ID,
name : env.gitlabSourceNamespace,
url : env.gitlabSourceRepoSshURL
]
]
])
} else {
sh "echo 'No merge request detected. Checking out current branch'"
checkout([
$class : 'GitSCM',
branches : [[name: "${env.sourceBranch}"]],
extensions : [
[$class: 'PruneStaleBranch'],
[$class: 'CleanCheckout']
],
userRemoteConfigs: [[credentialsId: env.CREDENTIALS_ID, url: env.GIT_URL]]
])
}
}
そのようなjenkins-libraryをインポートした後、パイプラインから呼び出そうとしています:
@Library('jenkins-util-lib') _
stage('prepare') {
sh "env | sort"
handleCheckout()
エラーで終了します:
No signature of method: handleCheckout.call() is applicable for argument types: () values: []
Possible solutions: wait(), any(), wait(long), main([Ljava.lang.String;), any(groovy.lang.Closure), each(groovy.lang.Closure)
メソッドがパイプライン内で宣言および呼び出されている間はうまく機能します。