如何在Jenkins流水线编译完成后上传二进制文件到Google Drive?
答复
这个需求完全可以实现,你只需要在现有流水线的构建、校验环节之后新增上传阶段,借助Google Drive的服务账号鉴权能力搭配对应工具就能完成,不需要额外的复杂插件支持。
前置准备
- 前往Google Cloud控制台创建服务账号,下载JSON格式的服务账号密钥文件,将该文件存入Jenkins凭证管理,凭证类型选择「Secret File」,自定义凭证ID(比如
gdrive-cred) - 打开你要上传的目标Google Drive文件夹,给刚才创建的服务账号开通编辑权限,避免上传时提示权限不足
- 你的现有配置用了
bat命令,说明构建节点是Windows系统,提前在节点上安装gdrive命令行工具即可;如果是Linux节点替换成对应版本的工具,或者直接用curl调用Google Drive官方API也可以实现上传,不需要额外装软件。
完整配置示例
你当前编写的Jenkinsfile存在多处引号错位、结构缺失的语法错误,下面是修正后、且包含Google Drive上传逻辑的完整配置:
pipeline { agent any tools { maven 'MAVEN' jdk 'Java11' } stages { stage('Clone the repo') { steps { echo 'Start cloning source code' git credentialsId: 'GitHub', url: 'https://github.com/xxxxxxxxxxx.git' } } stage('Maven Build') { steps { withMaven(mavenSettingsConfig: 'mvn-setting-xml') { bat 'mvn clean -U package' } } } stage('Quality gate') { steps { echo 'Add quality gate check logic here' // 质量门禁校验不通过时直接终止流水线,不会进入后续环节 } } stage('Unit Test') { steps { echo 'Running unit tests' // 单测失败会自动中断流水线 } } stage('SonarQube Test') { steps { echo 'Running SonarQube code scan' } } stage('Upload Artifacts to Google Drive') { // 仅当前面所有阶段全部执行成功,才会进入当前上传阶段 steps { withCredentials([file(credentialsId: 'gdrive-cred', variable: 'GD_KEY_FILE')]) { bat """ gdrive service-account import %GD_KEY_FILE% :: 替换下面的字符串为你自己的Google Drive目标文件夹ID,产物路径按实际构建输出位置调整 gdrive upload --parent 替换为你的目标文件夹ID target/*.jar target/*.war """ } } } stage('Deploy') { steps { echo 'Add deployment logic here' } } } }
说明
- Jenkins流水线默认按阶段顺序执行,任意前置阶段执行失败都会直接终止流程,天然符合你「所有构建、校验步骤通过后才上传产物」的要求
- 如果不想预装gdrive工具,可以直接在步骤里写脚本调用Google Drive的上传API,只需要用服务账号生成有效鉴权token即可,逻辑和命令行调用一致
- 可以在上传阶段前增加
archiveArtifacts步骤,将构建出的jar/war包归档到Jenkins服务器,方便后续回溯历史版本。
内容的提问来源于stack exchange,提问作者Sebastian Ruiz
相关产品推荐
相关产品推荐

