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

将基于Webpack的静态应用从GitLab迁移至Azure DevOps并部署到ADLSg2

将Webpack静态应用从GitLab迁移到Azure DevOps并部署到ADLS Gen2容器

一、前置准备

  1. 创建Azure DevOps变量组

    • 在Azure DevOps项目的「库」-「变量组」中新建变量组,存入以下变量(敏感变量勾选「保密」选项):
      • AZURE_SP_ID:服务主体ID
      • AZURE_SP_SECRET:服务主体密钥
      • AZURE_TENANT:Azure租户ID
      • AZURE_STORAGE_NAME_DEV:ADLS Gen2存储账户名
      • AZURE_STORAGE_CONTAINER:目标存储容器名
    • 确保该服务主体已被授予存储账户的Storage Blob Data Contributor权限,避免部署时出现权限问题。
  2. 确认构建阶段输出
    确保Webpack构建阶段能正常生成dist文件夹,并在构建完成后将其作为artifact发布,供部署阶段调用。


二、完整Azure DevOps YAML Pipeline示例

trigger:
  branches:
    include:
      - main # 对应GitLab的CI_DEFAULT_BRANCH主分支

stages:
  - stage: Build
    jobs:
      - job: Build_Static_App
        pool:
          vmImage: 'ubuntu-latest'
        steps:
          # Webpack构建步骤,替换为你实际的构建命令
          - script: |
              npm install
              npm run build
            displayName: '执行Prod Build'
          # 发布dist文件夹作为后续部署的artifact
          - publish: $(Build.SourcesDirectory)/dist
            artifact: dist_artifact
            displayName: '发布Dist Artifact'

  - stage: Deploy_To_ADLS_Gen2
    dependsOn: Build
    condition: succeeded()
    jobs:
      - job: Deploy_Job
        pool:
          vmImage: 'ubuntu-latest'
        variables:
          - group: Azure_Deployment_Variables # 关联之前创建的变量组
        steps:
          # 下载构建阶段生成的dist artifact
          - download: current
            artifact: dist_artifact
            displayName: '下载Dist文件夹'

          # 用服务主体登录Azure CLI
          - script: |
              az login --service-principal -u $(AZURE_SP_ID) -p $(AZURE_SP_SECRET) --tenant $(AZURE_TENANT)
            displayName: 'Azure CLI服务主体登录'
            env:
              AZURE_SP_SECRET: $(AZURE_SP_SECRET) # 显式引用保密变量

          # 获取存储账户密钥并设为管道变量
          - script: |
              STORAGE_KEY=$(az storage account keys list --account-name $(AZURE_STORAGE_NAME_DEV) --output json --query "[0].value" -o tsv)
              echo "##vso[task.setvariable variable=STORAGE_KEY]$STORAGE_KEY"
            displayName: '获取存储账户密钥'

          # 创建目标容器(不存在时创建)
          - script: |
              az storage container create --auth-mode key --account-key $(STORAGE_KEY) --account-name $(AZURE_STORAGE_NAME_DEV) --name $(AZURE_STORAGE_CONTAINER) --public-access blob --output none
            displayName: '创建存储容器'

          # 批量上传dist文件到ADLS Gen2
          - script: |
              DIST_PATH=$(Pipeline.Workspace)/dist_artifact
              if [ -d "$DIST_PATH" ] ; then
                cd "$DIST_PATH"
                pwd
                ls -latrR
                az storage blob upload-batch --auth-mode key --account-key $(STORAGE_KEY) --account-name $(AZURE_STORAGE_NAME_DEV) --overwrite true --source . --destination $(AZURE_STORAGE_CONTAINER)
              else
                echo "未找到dist目录,终止部署到 $(AZURE_STORAGE_NAME_DEV)/$(AZURE_STORAGE_CONTAINER)"
              fi
            displayName: '上传文件到ADLS Gen2容器'

三、关键逻辑对应说明

  • 触发规则:通过trigger.branches.include指定仅主分支触发部署,对应GitLab CI的rules条件。
  • Artifact传递:用publish和download步骤实现构建与部署阶段的文件传递,对应GitLab的dependencies配置。
  • Azure CLI操作:完全沿用原GitLab CI中的Azure CLI命令逻辑,仅调整变量引用方式适配Azure DevOps管道。
  • 目录检查:保留原有的dist目录存在性校验逻辑,避免无构建产物时触发无效部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:05:20