我正在尝试在 Azure Pipelines 中运行Azure 资源组部署任务。我已在运行 Windows 的 Azure VM 上部署了 Azure Pipelines 自托管代理,并且在我的 Azure DevOps 组织中,我已使用托管服务标识设置了与 VM 的 Azure 资源管理器服务连接。
但是,当我尝试使用托管标识的服务连接配置 Azure 资源组部署任务时,出现以下错误:
GetUserAccessToken: 获取identity的访问令牌失败。AAD 返回无声失败。
截屏:
我已经验证我已向目标资源组授予了对 VM 托管身份的访问权限(贡献者):
服务连接的范围也仅限于 Azure 订阅:
感谢您对诊断此问题的任何帮助。谢谢!
azure azure-resource-manager azure-devops azure-pipelines azure-managed-identity
我编写了一个 Flask-SQLAlchemy 模型类,如下所示(来自此参考):
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
user_id = db.Column(db.Integer, primary_key=True)
user_url = db.Column(db.String(2083), unique=True, nullable=False)
username = db.Column(db.String(80), unique=True, nullable=False)
avatar_url = db.Column(db.String(2083), unique=True, nullable=False)
def __init__(self, user_id, user_url, username, avatar_url):
self.user_id = user_id
self.user_url = user_url
self.username = username
self.avatar_url = avatar_url
Run Code Online (Sandbox Code Playgroud)
但是,我想使用dataclass装饰器(参考)来简化其实现,特别是避免重写__init__dunder 方法,并更容易地将此类序列化为 Python dict。
但是,将此类的实现更改为:
@dataclass
class User(db.Model):
__tablename__ = 'user'
user_id: …Run Code Online (Sandbox Code Playgroud) 我有以下用 Python 编写的简单 Azure 函数。它是一个 HTTP 触发器,它应该简单地返回来自 Azure 存储帐户的 blob 输入绑定的名称和 URI(此处为 Microsoft 的参考文档)。
import logging
import azure.functions as func
import azure.storage.blob
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
def main(req: func.HttpRequest, inputblob: func.InputStream) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
return func.HttpResponse(f"Blob name: {inputblob.name}. Blob URI: {inputblob.uri}")
Run Code Online (Sandbox Code Playgroud)
我的 function.json 文件看起来像这样。我已经验证 local.settings.json 中的连接字符串是正确的,并且 blob 路径也是正确的。
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"name": …Run Code Online (Sandbox Code Playgroud)