Jenkins集成GCP实例组遇NoSuchMethodError: 'inline'方法不存在求助
我正尝试将Jenkins与GCP Instance Group集成,使用了如下Pipeline脚本(参数已省略):
pipeline { agent any stages { stage('Triger CloudBuild..') { steps { googleCloudBuild credentialsId: '<ENTER-YOUR-CREDS-ID>' , request: inline('''steps: # Creating a golden image - name: gcr.io/cloud-builders/gcloud id: create-golden-image args: - beta - compute - images - create - <ENTER-NEW-IMAGE-NAME> - --source-disk=<ENTER-YOUR-VM-SOURCEDISK-NAME> - --source-disk-zone=<ENTER-YOUR-SOURCE-DISK-ZONE> - --project=<ENTER-YOUR-PROJECT-ID> - --force #Creating a new instance template - name: gcr.io/cloud-builders/gcloud id: create-instance-template args: - beta - compute - instance-templates - create - <ENTER-YOUR-NEW-TEMPLATE-NAME> - --subnet=projects/<ENTER-YOUR-PROJECT-ID>/regions/<ENTER-YOUR-REGION-NAME>/subnetworks/<ENTER-YOUR-SUBNET-NAME> - --no-address - --image-project=<ENTER-YOUR-PROJECT-ID> - --maintenance-policy=MIGRATE - --service-account=<ENTER-YOUR-SERVICE-ACCOUNT-NAME> - --scopes=https://www.googleapis.com/auth/cloud-platform - --region=<ENTER-REGION-NAME> - --tags=mig-rolling-update - --image=<ENTER-NEW-IMAGE-NAME> - --boot-disk-size=<ENTER-BOOT-DISK-SIZE> - --boot-disk-type=<ENTER-DISK-SIZE> - --boot-disk-device-name=<ENTER-BOOT-DISK-NAME> - --project=<ENTER-YOUR-PROJECT-ID> #Make sure that our MIG is stable before update - name: gcr.io/cloud-builders/gcloud id: wait-until-stable args: - beta - compute - instance-groups - managed - wait-until - <ENTER-YOUR-MIG-NAME> - --stable - --project=<ENTER-YOUR-PROJECT-ID> - --zone=<ENTER-YOUR-ZONE-NAME> #Updating the MIG with new instance template - name: gcr.io/cloud-builders/gcloud id: updating-mig args: - beta - compute - instance-groups - managed - rolling-action - start-update - <ENTER-YOUR-MIG-NAME> - --version=template=<ENTER-YOUR-TEMPLATE-NAME> - --type=proactive - --zone=<ENTER-YOUR-ZONE-NAME> - --project=<ENTER-YOUR-PROJECT-ID>''') } } } }
执行时出现如下错误:
java.lang.NoSuchMethodError: No such DSL method 'inline' found among
steps [archive, bat, build, catchError, checkout, deleteDir, dir,
downstreamBuilds, echo, emailext, emailextrecipients, envVarsForTool,
error, fileExists, findBuildScans, getContext, git, input, isUnix,
junit, library, libraryResource, load, lock, mail, milestone, node,
parallel, powershell, properties, publishChecks, publishHTML, pwd,
pwsh, readFile, readTrusted, resolveScm, retry, script, sh, sleep,
stage, stash, step, timeout, timestamps, tm, tool, unarchive,
unstable, unstash, validateDeclarativePipeline, waitForBuild,
waitUntil, warnError, withChecks, withContext, withCredentials,
withEnv, withGradle, wrap, writeFile, ws] or symbols
[GitUsernamePassword, agent, all, allBranchesSame, allOf, always, ant,
antFromApache, antOutcome, antTarget, any, anyOf, apiToken,
apiTokenProperty, architecture, archiveArtifacts, artifactManager,
assembla, authorInChangelog, authorizationMatrix, batchFile,
bitbucket, bitbucketServer, booleanParam, branch, brokenBuildSuspects,
brokenTestsSuspects, browser, buildButton, buildDiscarder,
buildDiscarders, buildRetention, buildSingleRevisionOnly, buildUser,
buildingTag, builtInNode, caseInsensitive, caseSensitive, certificate,
cgit, changeRequest, changelog, changelogBase, changelogToBranch,
changeset, checkoutOption, checkoutToSubdirectory, choice,
choiceParam, cleanAfterCheckout, cleanBeforeCheckout, cleanWs, clock,
cloneOption, command, contributor, credentials, cron, crumb, culprits,
defaultDisplayUrlProvider, defaultFolderConfiguration, defaultView,
demand, developers, disableConcurrentBuilds, disableRestartFromStage,
disableResume, discoverOtherRefs, discoverOtherRefsTrait, downstream,
dumb, durabilityHint, email-ext, envVars, envVarsFilter, environment,
equals, experimentalFlags, expression, extendedEmailPublisher, file,
fileParam, filePath, fingerprint, fingerprints, fisheye, frameOptions,
freeStyle, freeStyleJob, fromScm, fromSource, git, gitBranchDiscovery,
gitHooks, gitHubBranchDiscovery, gitHubBranchHeadAuthority,
gitHubExcludeArchivedRepositories, gitHubExcludeForkedRepositories,
gitHubExcludePrivateRepositories, gitHubExcludePublicRepositories,
gitHubForkDiscovery, gitHubIgnoreDraftPullRequestFilter,
gitHubPullRequestDiscovery, gitHubSshCheckout, gitHubTagDiscovery,
gitHubTopicsFilter, gitHubTrustContributors, gitHubTrustEveryone,
gitHubTrustNobody, gitHubTrustPermissions, gitLab, gitList, gitSCM,
gitTagDiscovery, gitTool, gitUsernamePassword, gitWeb, gitblit,
github, githubProjectProperty, githubPush, gitiles, gogs, gradle,
group, headRegexFilter, headWildcardFilter, hyperlink,
hyperlinkToModels, ignoreOnPush, inbound, inheriting,
inheritingGlobal, installSource, isRestartedRun, jdk, jdkInstaller,
jgit, jgitapache, jnlp, jobBuildDiscarder, jobName,
junitTestResultStorage, kiln, label, lastDuration, lastFailure,
lastGrantedAuthorities, lastStable, lastSuccess, legacy, legacySCM,
lfs, list, local, localBranch, localBranchTrait, locale, location,
logRotator, loggedInUsersCanDoAnything, mailer, masterBuild, maven,
maven3Mojos, mavenErrors, mavenGlobalConfig, mavenMojos,
mavenWarnings, modernSCM, multiBranchProjectDisplayNaming,
multibranch, myView, namedBranchesDifferent, node, nodeProperties,
nonInheriting, none, nonresumable, not, organizationFolder,
overrideIndexTriggers, paneStatus, parallelsAlwaysFailFast,
parameters, password, pattern, perBuildTag, permanent, phabricator,
pipeline, pipelineTriggers, plainText, plugin, pollSCM,
preserveStashes, previous, priorityStrategy, projectNamingStrategy,
proxy, pruneStaleBranch, pruneStaleTag, pruneTags,
queueItemAuthenticator, quietPeriod, rateLimit, rateLimitBuilds,
recipients, redmine, refSpecs, remoteName, requestor, resourceRoot,
retainOnlyVariables, rhodeCode, run, runParam, sSHLauncher, schedule,
scmGit, scmRetryCount, scriptApproval, scriptApprovalLink, search,
security, shell, simpleBuildDiscarder, skipDefaultCheckout,
skipStagesAfterUnstable, slave, sourceRegexFilter,
sourceWildcardFilter, sparseCheckoutPaths, ssh, sshPublicKey,
sshUserPrivateKey, standard, status, strict, string, stringParam,
submodule, submoduleOption, suppressAutomaticTriggering,
suppressFolderAutomaticTriggering, swapSpace, tag, teamFoundation,
teamSlugFilter, text, textParam, timestamper, timestamperConfig,
timezone, tmpSpace, toolLocation, triggeredBy, unsecured, untrusted,
upstream, upstreamDevelopers, user, userIdentity, userOrGroup,
userSeed, usernameColonPassword, usernamePassword, viewgit,
viewsTabBar, weather, withAnt, zip] or globals [currentBuild, env,
params, pipeline, scm]
我曾尝试安装Multibranch Pipeline Inline Definition Plugin来解决该问题,但并未奏效,请问有什么解决思路?
1. 移除不存在的inline方法调用
报错核心是Jenkins找不到inline这个DSL方法——该方法不属于Jenkins GCP插件的语法。googleCloudBuild步骤的request参数可直接接受Cloud Build配置的字符串内容,无需用inline()包裹。
修改后的Pipeline核心片段:
googleCloudBuild credentialsId: '<ENTER-YOUR-CREDS-ID>', request: '''steps: # Creating a golden image - name: gcr.io/cloud-builders/gcloud id: create-golden-image args: - beta - compute - images - create - <ENTER-NEW-IMAGE-NAME> - --source-disk=<ENTER-YOUR-VM-SOURCEDISK-NAME> - --source-disk-zone=<ENTER-YOUR-SOURCE-DISK-ZONE> - --project=<ENTER-YOUR-PROJECT-ID> - --force # 其余步骤保持不变...'''
2. 确认安装正确的Jenkins插件
确保你的Jenkins已安装Google Cloud Build Plugin,这是googleCloudBuild步骤的依赖插件,你之前尝试的Multibranch Pipeline Inline Definition Plugin与当前场景无关,无需安装。
安装步骤:
- 进入Jenkins的「管理Jenkins」→「插件管理」→「可选插件」
- 搜索
Google Cloud Build并安装,安装后重启Jenkins生效
3. 备选方案:使用Cloud Build配置文件
如果字符串形式的配置维护麻烦,可将Cloud Build步骤写入单独的cloudbuild.yaml文件,再在Pipeline中引用:
googleCloudBuild credentialsId: '<ENTER-YOUR-CREDS-ID>', requestFile: 'cloudbuild.yaml'
将之前的步骤内容保存到代码仓库的cloudbuild.yaml文件即可。
内容的提问来源于stack exchange,提问作者Maurício Schwartsman

