本文目录导读:

- 使用 Pipeline 脚本上传到 Nexus (Maven/Gradle)
- 使用 Pipeline 脚本上传到 Artifactory (通用制品)
- 使用 Pipeline 脚本上传到 AWS S3
- 使用 Freestyle Job 上传到 Nexus (通过构建后操作)
- 通用脚本:上传到任意 HTTP 仓库 (curl)
- 处理制品版本号
- 常见注意事项
在 Jenkins 中,将制品上传到仓库的脚本(通常使用 Pipeline 或 Freestyle Job 的构建后操作)主要取决于你使用的仓库类型(如 Nexus、Artifactory、AWS S3 等),以下是一些常见场景的脚本示例和实现方法。
使用 Pipeline 脚本上传到 Nexus (Maven/Gradle)
假设你已经配置了 Nexus 仓库凭证,制品是 JAR 或 WAR 文件。
脚本示例:
pipeline {
agent any
tools {
maven 'Maven-3.8.4' // 指定 Maven 版本
}
stages {
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Upload to Nexus') {
steps {
// 使用 Maven Deploy 插件上传
sh 'mvn deploy -DskipTests -Pnexus-releases'
}
}
}
}
注意: 需要在 pom.xml 或 settings.xml 中配置 Nexus 仓库地址和认证信息。
使用 Pipeline 脚本上传到 Artifactory (通用制品)
需要安装 Artifactory 插件。
脚本示例:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'dotnet publish -c Release -o out' // 以 .NET 为例
}
}
stage('Upload to Artifactory') {
steps {
rtUpload(
serverId: 'Artifactory-server', // 在 Jenkins 中配置的 Artifactory 凭证 ID
spec: '''{
"files": [
{
"pattern": "out/**",
"target": "libs-release-local/my-project/${BUILD_NUMBER}/"
}
]
}'''
)
}
}
}
}
使用 Pipeline 脚本上传到 AWS S3
需要安装 AWS CLI 并配置凭证。
脚本示例:
pipeline {
agent any
environment {
AWS_DEFAULT_REGION = 'us-east-1'
}
stages {
stage('Build') {
steps {
sh 'go build -o myapp'
}
}
stage('Upload to S3') {
steps {
withAWS(credentials: 'aws-credentials-id') {
sh '''
aws s3 cp myapp s3://my-bucket/releases/myapp-${BUILD_NUMBER}/
aws s3 cp myapp s3://my-bucket/releases/myapp-latest/
'''
}
}
}
}
}
使用 Freestyle Job 上传到 Nexus (通过构建后操作)
- 安装 Nexus Artifact Uploader 插件。
- 构建后操作选择 Upload artifacts to Nexus。
- 配置:
- Nexus Version: 选择 2 或 3
- 协议: HTTP 或 HTTPS
- URL: Nexus 仓库地址 (如
http://nexus:8081) - Credentials: 已配置的凭证
- Group, Artifact, Version, Packaging 等 Maven 坐标
- File: 上传的制品路径 (如
target/*.jar)
通用脚本:上传到任意 HTTP 仓库 (curl)
适用于自建仓库或简单的二进制仓库。
脚本示例:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npx webpack --mode production'
}
}
stage('Upload') {
steps {
withCredentials([string(credentialsId: 'repo-token', variable: 'TOKEN')]) {
sh '''
curl -u "admin:${TOKEN}" \
--upload-file dist/my-app.zip \
"http://myrepo.example.com/artifacts/my-app-${BUILD_NUMBER}.zip"
'''
}
}
}
}
}
处理制品版本号
通常使用 ${BUILD_NUMBER} 或 ${env.BUILD_ID} 作为版本号的一部分。
常见注意事项
| 问题 | 解决方案 |
|---|---|
| 凭证管理 | 使用 Jenkins 凭证绑定 (credentialsId) |
| 制品路径错误 | 使用 find . -name '*.jar' 或构建工具输出 |
| 权限不足 | 检查仓库角色和 Jenkins 凭证权限 |
| 缺失插件 | 安装 Credentials Binding 等必要插件 |
| 制品类型不匹配 | 指定正确的 Maven 坐标或仓库布局 |
- Maven/Gradle 等构建工具自身有 deploy 插件。
- Nexus/Artifactory 有专门的 Jenkins 插件简化操作。
- 云存储 使用 awscli/gcloud/az 等 CLI 工具。
- 通用方法 使用 curl 或 Jenkins HTTP 步骤。
根据你的具体仓库类型选择合适的脚本模式即可,如果需要更具体的示例或遇到问题,可以提供更多细节(仓库类型、构建工具、错误日志)。