目录
1.No such DSL method '$' found among steps
2.No such DSL method 'PushArtifacts'
一、实验
1.GitLab共享库封装代码实现Nexus制品上传
(1)环境
表1 主机
主机 | 架构 | 版本 | IP | 备注 |
jenkins | jenkins主节点 | 2.414.2 | 192.168.204.15:8080 | gitlab runner (从节点) |
gitlab | gitlab 主节点 | 12.10.14 | 192.168.204.8:82 | jenkins slave (从节点) |
sonarqube | 9.6 | 192.168.204.8:9000 | ||
tomcat | nexus | 3.63 | 192.168.204.13:8081 |
(2)查看共享库
(3)新增制品类
(4)修改Artifacts.grooy代码并提交master
package org.devops
//上传制品
def PushRawArtifacts(repoName,targetDir, filePath, pkgName ){
withCredentials([usernamePassword(credentialsId: '318df1ad-083b-4158-ac88-2f584446563e', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
sh """
curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${repoName}" \
-H "accept: application/json" \
-H "Content-Type: multipart/form-data" \
-F "raw.directory=${targetDir}" \
-F "raw.asset1=@${filePath}/${pkgName};type=application/java-archive" \
-F "raw.asset1.filename=${pkgName}" \
-u "${USER}":"${TOKEN}"
"""
}
}
(5)修改流水线文件Jenkinsfile并提交master
@Library("mylib@master") _
import org.devops.*
def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()
def artifacts = new Artifacts()
pipeline {
agent { label "build"}
options {
skipDefaultCheckout true
}
stages{
stage("Checkout"){
steps{
script {
println("GetCode")
checkout.GetCode("${env.srcUrl}","${env.branchName}")
}
}
}
stage("build"){
steps{
script{
println("Build")
build.CodeBuild("${env.buildTool}")
}
}
}
stage("UnitTest"){
steps{
script{
println("Test")
unittest.CodeTest("${env.buildTool}")
}
}
}
stage("SonarScan"){
steps {
script {
groupName = "${JOB_NAME}".split("/")[0]
projectName ="${JOB_NAME}".split("/")[-1]
sonar.CodeSonar("${env.buildTool}",projectName,groupName)
}
}
}
stage("PushArtifacts"){
steps {
script {
repoName = "${JOB_NAME}".split("/")[0]
projectName ="${JOB_NAME}".split("/")[-1]
targetDir = "${projectName}/${BUILD_ID}/"
if ("${env.buildTool}" == "maven"){
filePath = "target"
pkgName = sh returnStdout: true, script: "cd target/ ; ls maven*.jar"
}
artifacts.PushRawArtifacts(repoName,targetDir,filePath,pkgName.trim())
}
}
}
}
}
(6) Jenkins手动构建maven项目流水线
(7)成功
(8)Nexus查看
二、问题
1.No such DSL method '$' found among steps
(1)报错
java.lang.NoSuchMethodError: No such DSL method '$' found among steps
(2)原因分析
变量引用错误
(3)解决方法
修改代码。
修改前:
if (${env.buildTool} == "maven"){
修改后:
if ("${env.buildTool}" == "maven"){
2.No such DSL method 'PushArtifacts'
(1) 报错
java.lang.NoSuchMethodError: No such DSL method 'PushArtifacts' found among steps
(2)原因分析
方法名错误
(3)解决方法
修改代码。
修改前:
artifacts.PushArtifacts(repoName,targetDir,filePath,pkgName.trim())
修改后:
artifacts.PushRawArtifacts(repoName,targetDir,filePath,pkgName.trim())