有什么方法可以在 Jenkins 管道中上传工件期间更改 Nexus URL 路径
Is there any way to change the Nexus URL path during artifact upload in Jenkins pipeline
我正在尝试使用 Jenkins 管道将工件上传到 nexus,其中整个管道在最后阶段结束。工件未上传到 Nexus 存储库的地方。
说例子:
http://localhost:8081/nexus/content/repositories/releases 是我现有的存储库,它正在尝试将工件上传到其中。但是当我启动 Jenkins 管道构建时,我看到 url 达到:
http://localhost:8081/nexus/content/repositories/repository/releases。
我很困惑 "repository" 从哪里进入上面的 url.
我尝试编辑 url 很多次,但仍然遇到同样的问题
上传工件 blt-server.war 开始....
GroupId: 空
ArtifactId:blt-server
分类器:
类型:war
版本:0.0.1-SNAPSHOT
文件:blt-server.war
存储库:版本
正在下载:http://localhost:8081/nexus/content/repositories/repository/releases/maven-metadata.xml
完成 10% (5.5 MB / 55 MB)。
完成 20%(11 MB / 55 MB)。
完成 30%(17 MB / 55 MB)。
完成 40%(22 MB / 55 MB)。
完成 50%(28 MB / 55 MB)。
60% 已完成(33 MB / 55 MB)。
完成 70% (39 MB / 55 MB)。
80% 已完成(44 MB / 55 MB)。
90% 已完成(50 MB / 55 MB)。
100% 完成(55 MB / 55 MB)。
无法部署工件:无法在版本 (http://localhost:8081/nexus/content/repositories/repository/releases)
中找到工件:blt-server:war:0.0.1-20190906.152523-1
上传文件 blt-server.war 失败。
我希望 url 应该是这样的:
http://localhost:8081/nexus/content/repositories/releases 正在上传 war 文件,但没有。
这是我的管道脚本:
pipeline {
agent {
label "master"
}
tools {
maven "Maven-3.5.2"
}
environment {
NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"
NEXUS_REPOSITORIES = "releases"
NEXUS_CREDENTIAL_ID = "SonatypeREMNexus3"
CREDENTIALSID= "********confidential***"
}
stages {
stage("clone bitbucket") {
steps {
checkout(
[
$class: 'GitSCM',
branches: [[name: 'master']],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'RelativeTargetDirectory', relativeTargetDir: 'build']
],
submoduleCfg: [],
userRemoteConfigs: [
[
credentialsId: '********confidential***',
url: 'ssh://git@bitbucket.confidential:7999/blt/blt-server.git'
]
]
]
)
}
}
stage('Build & Test') {
steps {
script {
withMaven(
options: [artifactsPublisher(disabled: true)],
jdk: 'JAVA-1.8.0_152',
maven: 'Maven-3.5.2') {
sh "mvn clean package -f build/pom.xml"
}
}
}
}
stage("publish to nexus") {
steps {
script {
pom = readMavenPom file: "build/pom.xml";
filesByGlob = findFiles(glob: "build/target/*.${pom.packaging}");
echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}"
artifactPath = filesByGlob[0].path;
artifactExists = fileExists artifactPath;
if(artifactExists) {
echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version: ${pom.version}"
nexusArtifactUploader(
nexusVersion: NEXUS_VERSION,
protocol: NEXUS_PROTOCOL,
nexusUrl: NEXUS_URL,
groupId: pom.groupId,
version: pom.version,
repository: NEXUS_REPOSITORIES,
credentialsId: NEXUS_CREDENTIAL_ID,
artifacts: [
[artifactId: pom.artifactId,
classifier: '',
file: artifactPath,
type: pom.packaging],
[artifactId: pom.artifactId,
classifier: '',
file: "build/pom.xml",
type: "pom"]
]
);
} else {
error "*** File: ${artifactPath}, could not be found";
}
}
}
}
}
}
问题出在这里:
NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"
指定的 Nexus 版本是 Nexus 3,但 URL 遵循 Nexus 2 格式。
Nexus 3 使用 URL 格式 /repository/<repo-id>/<path-of-file>
而 Nexus 2 使用 /content/repositories/<repo-id>/<path-of-file>
.
如果您使用的是 Nexus 2,只需更新版本 NEXUS_VERSION = "nexus2"
。
如果在 Nexus 3 上:
- 将 Nexus Artifact Uploader plugin 升级到 2.6 或更高版本。
- 将
localhost:8081/nexus/content/repositories
替换为 localhost:8081/nexus
或 localhost:8081
,适用于您的 Nexus 存储库。
我正在尝试使用 Jenkins 管道将工件上传到 nexus,其中整个管道在最后阶段结束。工件未上传到 Nexus 存储库的地方。
说例子: http://localhost:8081/nexus/content/repositories/releases 是我现有的存储库,它正在尝试将工件上传到其中。但是当我启动 Jenkins 管道构建时,我看到 url 达到: http://localhost:8081/nexus/content/repositories/repository/releases。 我很困惑 "repository" 从哪里进入上面的 url.
我尝试编辑 url 很多次,但仍然遇到同样的问题
上传工件 blt-server.war 开始....
GroupId: 空
ArtifactId:blt-server
分类器:
类型:war
版本:0.0.1-SNAPSHOT
文件:blt-server.war
存储库:版本
正在下载:http://localhost:8081/nexus/content/repositories/repository/releases/maven-metadata.xml
完成 10% (5.5 MB / 55 MB)。
完成 20%(11 MB / 55 MB)。
完成 30%(17 MB / 55 MB)。
完成 40%(22 MB / 55 MB)。
完成 50%(28 MB / 55 MB)。
60% 已完成(33 MB / 55 MB)。
完成 70% (39 MB / 55 MB)。
80% 已完成(44 MB / 55 MB)。
90% 已完成(50 MB / 55 MB)。
100% 完成(55 MB / 55 MB)。
无法部署工件:无法在版本 (http://localhost:8081/nexus/content/repositories/repository/releases)
中找到工件:blt-server:war:0.0.1-20190906.152523-1上传文件 blt-server.war 失败。
我希望 url 应该是这样的: http://localhost:8081/nexus/content/repositories/releases 正在上传 war 文件,但没有。
这是我的管道脚本:
pipeline {
agent {
label "master"
}
tools {
maven "Maven-3.5.2"
}
environment {
NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"
NEXUS_REPOSITORIES = "releases"
NEXUS_CREDENTIAL_ID = "SonatypeREMNexus3"
CREDENTIALSID= "********confidential***"
}
stages {
stage("clone bitbucket") {
steps {
checkout(
[
$class: 'GitSCM',
branches: [[name: 'master']],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'RelativeTargetDirectory', relativeTargetDir: 'build']
],
submoduleCfg: [],
userRemoteConfigs: [
[
credentialsId: '********confidential***',
url: 'ssh://git@bitbucket.confidential:7999/blt/blt-server.git'
]
]
]
)
}
}
stage('Build & Test') {
steps {
script {
withMaven(
options: [artifactsPublisher(disabled: true)],
jdk: 'JAVA-1.8.0_152',
maven: 'Maven-3.5.2') {
sh "mvn clean package -f build/pom.xml"
}
}
}
}
stage("publish to nexus") {
steps {
script {
pom = readMavenPom file: "build/pom.xml";
filesByGlob = findFiles(glob: "build/target/*.${pom.packaging}");
echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}"
artifactPath = filesByGlob[0].path;
artifactExists = fileExists artifactPath;
if(artifactExists) {
echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version: ${pom.version}"
nexusArtifactUploader(
nexusVersion: NEXUS_VERSION,
protocol: NEXUS_PROTOCOL,
nexusUrl: NEXUS_URL,
groupId: pom.groupId,
version: pom.version,
repository: NEXUS_REPOSITORIES,
credentialsId: NEXUS_CREDENTIAL_ID,
artifacts: [
[artifactId: pom.artifactId,
classifier: '',
file: artifactPath,
type: pom.packaging],
[artifactId: pom.artifactId,
classifier: '',
file: "build/pom.xml",
type: "pom"]
]
);
} else {
error "*** File: ${artifactPath}, could not be found";
}
}
}
}
}
}
问题出在这里:
NEXUS_VERSION = "nexus3"
NEXUS_PROTOCOL = "http"
NEXUS_URL = "localhost:8081/nexus/content/repositories"
指定的 Nexus 版本是 Nexus 3,但 URL 遵循 Nexus 2 格式。
Nexus 3 使用 URL 格式 /repository/<repo-id>/<path-of-file>
而 Nexus 2 使用 /content/repositories/<repo-id>/<path-of-file>
.
如果您使用的是 Nexus 2,只需更新版本 NEXUS_VERSION = "nexus2"
。
如果在 Nexus 3 上:
- 将 Nexus Artifact Uploader plugin 升级到 2.6 或更高版本。
- 将
localhost:8081/nexus/content/repositories
替换为localhost:8081/nexus
或localhost:8081
,适用于您的 Nexus 存储库。