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

Azure Pipeline容器任务中网络共享映射无法跨任务访问的问题

问题描述

我尝试借助Azure Agents的内置支持,在容器中运行Azure Pipeline。YAML配置里,第一个PowerShell任务能通过net use命令成功映射并访问指定网络共享\\share-path\folder1$,但第二个PowerShell任务访问同一共享时抛出权限拒绝异常。由于测试代码存在硬编码的网络共享路径,无法采用Docker卷映射方案,请问如何让第二个任务成功访问该网络共享?

YAML配置

resources:
  containers:
  - container: myContainerResource
    image: myregistry/image
    endpoint: 'azuredevops-service-connection'
    volumes:
    - 'C:\X:C:\X'
    - 'C:\Y:C:\Y'

stages:
- stage: 
  jobs:
  - job:
    pool:
      name: myPool
    container: myContainerResource

    steps:

    - powershell: |   # 第一个PowerShell任务
        whoami   # 输出内容为 'user manager\containeradministrator'

        net use \\share-path\folder1$ /user:$env:ACCOUNT $env:PASSWORD

        if (Test-Path -ErrorAction SilentlyContinue \\share-path\folder1$)
        {
            Write-Host "映射\\mr-fs01\midas$ 完成成功"  # 此分支会被执行
        }
        else
        {
          Write-Host "映射失败"
          exit 1
        }
        
        gc \\share-path\folder1$\myFile.txt  # 文件内容可正常访问并打印
      env:
        ACCOUNT: $(USER_SECRET_FROM_VAR_GROUP_KEY_VAULT)
        PASSWORD: $(PWD_SECRET_FROM_VAR_GROUP_KEY_VAULT)
     
    - powershell: |        # 第二个PowerShell任务     
        whoami            
        gc \\share-path\folder1$\myFile.txt  # 此处访问同一路径失败,抛出异常

异常信息

user manager\containeradministrator
gc : 访问被拒绝
At C:\__w\_temp\0sdsd3-wewe-4d92234-2-xcxc3232.ps1:5 char:1
+ gc \\share-path\folder1$\myFile.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\share-path\folder1$\myFile.txt:String) [Get-Content], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand
解决方法

问题根源

Azure Pipeline的每个任务都是独立运行的进程,net use创建的网络共享映射仅对当前任务进程生效,进程结束后映射会自动失效。第二个任务作为新进程,没有继承第一个任务的网络映射,因此访问共享时触发权限拒绝。

方案1:合并两个PowerShell任务

将两个任务的逻辑合并到同一个PowerShell任务中,这样网络映射在整个进程生命周期内都有效:

- powershell: |   # 合并后的PowerShell任务
    whoami

    net use \\share-path\folder1$ /user:$env:ACCOUNT $env:PASSWORD

    if (Test-Path -ErrorAction SilentlyContinue \\share-path\folder1$)
    {
        Write-Host "映射\\mr-fs01\midas$ 完成成功"
    }
    else
    {
        Write-Host "映射失败"
        exit 1
    }
    
    gc \\share-path\folder1$\myFile.txt

    # 第二个任务的逻辑放在这里
    whoami            
    gc \\share-path\folder1$\myFile.txt
  env:
    ACCOUNT: $(USER_SECRET_FROM_VAR_GROUP_KEY_VAULT)
    PASSWORD: $(PWD_SECRET_FROM_VAR_GROUP_KEY_VAULT)

方案2:在第二个任务中重新执行net use

在第二个任务中再次执行net use命令,复用变量组中的账户凭据:

- powershell: |        # 修改后的第二个PowerShell任务     
    whoami            
    net use \\share-path\folder1$ /user:$env:ACCOUNT $env:PASSWORD
    gc \\share-path\folder1$\myFile.txt
  env:
    ACCOUNT: $(USER_SECRET_FROM_VAR_GROUP_KEY_VAULT)
    PASSWORD: $(PWD_SECRET_FROM_VAR_GROUP_KEY_VAULT)

方案3:将凭据存入容器的凭据管理器

使用cmdkey命令将共享的账户凭据存入容器的系统凭据存储,后续所有进程都可以自动使用该凭据访问共享,无需重复执行net use:

- powershell: |   # 修改后的第一个PowerShell任务
    whoami

    # 将凭据存入容器凭据管理器
    cmdkey /add:share-path /user:$env:ACCOUNT /pass:$env:PASSWORD

    if (Test-Path -ErrorAction SilentlyContinue \\share-path\folder1$)
    {
        Write-Host "共享访问成功"
    }
    else
    {
        Write-Host "访问失败"
        exit 1
    }
    
    gc \\share-path\folder1$\myFile.txt
  env:
    ACCOUNT: $(USER_SECRET_FROM_VAR_GROUP_KEY_VAULT)
    PASSWORD: $(PWD_SECRET_FROM_VAR_GROUP_KEY_VAULT)

- powershell: |        # 第二个PowerShell任务无需修改
    whoami            
    gc \\share-path\folder1$\myFile.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:57:16