将基于Webpack的静态应用从GitLab迁移至Azure DevOps并部署到ADLSg2
将Webpack静态应用从GitLab迁移到Azure DevOps并部署到ADLS Gen2容器
一、前置准备
创建Azure DevOps变量组
- 在Azure DevOps项目的「库」-「变量组」中新建变量组,存入以下变量(敏感变量勾选「保密」选项):
AZURE_SP_ID:服务主体IDAZURE_SP_SECRET:服务主体密钥AZURE_TENANT:Azure租户IDAZURE_STORAGE_NAME_DEV:ADLS Gen2存储账户名AZURE_STORAGE_CONTAINER:目标存储容器名
- 确保该服务主体已被授予存储账户的Storage Blob Data Contributor权限,避免部署时出现权限问题。
- 在Azure DevOps项目的「库」-「变量组」中新建变量组,存入以下变量(敏感变量勾选「保密」选项):
确认构建阶段输出
确保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
相关产品推荐
相关产品推荐

