代码之家  ›  专栏  ›  技术社区  ›  Kai Walter

如何使用Azure资源管理器凭据在Azure DevOps中运行Python脚本?

  •  0
  • Kai Walter  · 技术社区  · 7 年前

    我希望在Azure DevOps管道任务中的Azure资源管理器上下文中运行Python脚本,以便能够访问Azure资源(如Azure CLI或Azure PowerShell任务)。

    2 回复  |  直到 7 年前
        1
  •  0
  •   4c74356b41    7 年前

    取决于您所称的python脚本,但是Azure DevOps没有本机支持来验证python sdk(或您的自定义python脚本),但是您可以将来自build\release变量的凭据传递到您的脚本,或者尝试从Azure Cli获取凭据(我想它将数据存储在下面的某个位置) /home/.azure/ .

        2
  •  0
  •   Kai Walter    7 年前

    根据 4c74356b41 上面和一些解剖的 Azure CLI 我创建了这个函数,允许在上面拉一个OAuth令牌 ADAL 服务原则 登录到 Azure DevOps-Azure CLI 任务

    import os
    import json
    import adal
    
    _SERVICE_PRINCIPAL_ID = 'servicePrincipalId'
    _SERVICE_PRINCIPAL_TENANT = 'servicePrincipalTenant'
    _TOKEN_ENTRY_TOKEN_TYPE = 'tokenType'
    _ACCESS_TOKEN = 'accessToken'
    
    def get_config_dir():
        return os.getenv('AZURE_CONFIG_DIR', None) or os.path.expanduser(os.path.join('~', '.azure'))
    
    def getOAuthTokenFromCLI():
        token_file = (os.environ.get('AZURE_ACCESS_TOKEN_FILE', None)
                  or os.path.join(get_config_dir(), 'accessTokens.json'))
    
        with open(token_file) as f:
            tokenEntry = json.load(f)[0] # just assume first entry
    
        tenantID = tokenEntry[_SERVICE_PRINCIPAL_TENANT]
        appId = tokenEntry[_SERVICE_PRINCIPAL_ID]
        appPassword = tokenEntry[_ACCESS_TOKEN]
        authURL = "https://login.windows.net/" + tenantID
        resource = "https://management.azure.com/"
        context = adal.AuthenticationContext(authURL, validate_authority=tenantID, api_version=None)
        token = context.acquire_token_with_client_credentials(resource,appId,appPassword)
        return token[_TOKEN_ENTRY_TOKEN_TYPE] + " " + token[_ACCESS_TOKEN]