You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用YAML创建Azure Pipeline实现PyInstaller编译Python代码并上传OneDrive

Azure Pipeline YAML 实现 Windows EXE 构建与 OneDrive 上传

以下是满足你需求的完整 YAML 流水线配置,包含详细注释和前置准备说明:

完整 YAML 代码

trigger:
- main # 替换为你的代码分支名称

pool:
  vmImage: 'windows-latest' # 使用微软托管的 Windows 代理

steps:
# 1. 配置 Python 环境
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.10' # 选择与你的应用兼容的 Python 版本
    addToPath: true

# 2. 安装 PyInstaller
- script: |
    pip install pyinstaller
  displayName: '安装 PyInstaller'

# 3. 构建 EXE 文件
- script: |
    pyinstaller --onefile main.py
  displayName: '用 PyInstaller 打包生成 EXE'

# 4. 将 EXE 上传至 OneDrive
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      # 从流水线秘密变量中读取配置
      $clientId = "$(OneDriveClientId)"
      $clientSecret = "$(OneDriveClientSecret)"
      $tenantId = "$(OneDriveTenantId)"
      $userUPN = "$(OneDriveUserUPN)" # 目标 OneDrive 所属用户的邮箱(UPN)
      $oneDriveFolderPath = "/Documents/MyAppBuilds" # OneDrive 中的目标文件夹路径
      $filePath = "$(Build.SourcesDirectory)/dist/main.exe" # 生成的 EXE 文件路径
      $fileName = "main.exe"

      # 获取 Microsoft Graph API 访问令牌
      $tokenBody = @{
          Grant_Type    = "client_credentials"
          Scope         = "https://graph.microsoft.com/.default"
          Client_Id     = $clientId
          Client_Secret = $clientSecret
      }
      $tokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Method POST -Body $tokenBody
      $accessToken = $tokenResponse.access_token

      # 遍历创建/查找 OneDrive 目标文件夹
      $folderPathSegments = $oneDriveFolderPath.Trim('/') -split '/'
      $currentFolderId = "root"
      foreach ($segment in $folderPathSegments) {
          $folderResponse = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$userUPN/drive/items/$currentFolderId/children?`$filter=name eq '$segment' and folder ne null" -Headers @{Authorization = "Bearer $accessToken"} -Method GET
          if ($folderResponse.value.Count -eq 0) {
              # 文件夹不存在则创建
              $newFolderBody = @{
                  name = $segment
                  folder = @{}
                  "@microsoft.graph.conflictBehavior" = "rename"
              } | ConvertTo-Json
              $folderResponse = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$userUPN/drive/items/$currentFolderId/children" -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json"} -Method POST -Body $newFolderBody
              $currentFolderId = $folderResponse.id
          } else {
              $currentFolderId = $folderResponse.value[0].id
          }
      }

      # 上传文件到 OneDrive
      $uploadUri = "https://graph.microsoft.com/v1.0/users/$userUPN/drive/items/$currentFolderId:/$fileName:/content"
      Invoke-RestMethod -Uri $uploadUri -Headers @{Authorization = "Bearer $accessToken"} -Method PUT -InFile $filePath -ContentType "application/octet-stream"

      Write-Host "成功将 $fileName 上传至 OneDrive 文件夹: $oneDriveFolderPath"
  displayName: '上传 EXE 到 OneDrive'
  env:
    OneDriveClientId: $(OneDriveClientId)
    OneDriveClientSecret: $(OneDriveClientSecret)
    OneDriveTenantId: $(OneDriveTenantId)
    OneDriveUserUPN: $(OneDriveUserUPN)

前置准备步骤

1. 创建 Azure AD 应用注册

  • 登录 Azure 门户,进入「Azure Active Directory」→「应用注册」→「新注册」
  • 填写应用名称,选择「仅此组织目录中的帐户」,完成注册
  • 进入「证书和密码」→「新客户端密码」,生成并保存密码值(后续作为流水线变量)
  • 进入「API 权限」→「添加权限」→「Microsoft Graph」→「应用程序权限」→ 找到「Files.ReadWrite.All」权限并添加,最后点击「为租户授予管理员同意」

2. 收集必要配置值

  • Client ID:应用注册概览页中的「应用程序(客户端) ID」
  • Client Secret:刚才生成的客户端密码值
  • Tenant ID:应用注册概览页中的「目录(租户) ID」
  • User UPN:目标 OneDrive 所属用户的邮箱地址(例如:xxx@yourdomain.com)

3. 配置流水线秘密变量

  • 打开你的 Azure Pipeline,进入「编辑」→「变量」→「新建变量」
  • 分别创建四个秘密变量:OneDriveClientId、OneDriveClientSecret、OneDriveTenantId、OneDriveUserUPN,并填入对应的值,勾选「将此值保密」

使用说明

  • 将上述 YAML 保存为 azure-pipelines.yml 并推送到你的 Azure Repos 仓库
  • 流水线会在你推送代码到指定分支时自动触发,完成 EXE 构建和 OneDrive 上传
  • 若需要修改 Python 版本或 OneDrive 目标文件夹,直接调整 YAML 中的对应参数即可

内容的提问来源于stack exchange,提问作者houba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:05:39