Jenkins脚本如何将制品上传到仓库

wen 实用脚本 2

本文目录导读:

Jenkins脚本如何将制品上传到仓库

  1. 使用 Pipeline 脚本上传到 Nexus (Maven/Gradle)
  2. 使用 Pipeline 脚本上传到 Artifactory (通用制品)
  3. 使用 Pipeline 脚本上传到 AWS S3
  4. 使用 Freestyle Job 上传到 Nexus (通过构建后操作)
  5. 通用脚本:上传到任意 HTTP 仓库 (curl)
  6. 处理制品版本号
  7. 常见注意事项

在 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.xmlsettings.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 (通过构建后操作)

  1. 安装 Nexus Artifact Uploader 插件。
  2. 构建后操作选择 Upload artifacts to Nexus
  3. 配置:
    • 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 坐标或仓库布局
  1. Maven/Gradle 等构建工具自身有 deploy 插件。
  2. Nexus/Artifactory 有专门的 Jenkins 插件简化操作。
  3. 云存储 使用 awscli/gcloud/az 等 CLI 工具。
  4. 通用方法 使用 curl 或 Jenkins HTTP 步骤。

根据你的具体仓库类型选择合适的脚本模式即可,如果需要更具体的示例或遇到问题,可以提供更多细节(仓库类型、构建工具、错误日志)。

抱歉,评论功能暂时关闭!