You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure新手求助:Jenkins Shell中用部署凭据登录Azure CLI部署WebApp

在Jenkins Shell中无交互登录Azure CLI(无需插件)

作为Azure新手,要在Jenkins的非交互式Shell环境里完成WebApp部署,核心是用**服务主体(Service Principal)**实现无交互登录——这是Azure CLI在自动化场景下的标准做法,完全不需要依赖Jenkins的Azure插件。

下面是具体步骤:

1. 提前在Azure上创建服务主体(仅需操作一次)

在你本地已登录的Azure CLI中,运行以下命令生成服务主体的登录凭据:

az ad sp create-for-rbac --name "jenkins-azure-deploy-sp" --role "Contributor" --scopes "/subscriptions/<你的订阅ID>/resourceGroups/<你的资源组名>"

说明:

  • --role "Contributor" 给服务主体分配目标资源组的贡献者权限,确保它能执行WebApp部署操作
  • --scopes 限定权限范围到你的目标资源组,遵循最小权限原则
    执行后会返回类似如下的JSON结果,请妥善保存appIdpasswordtenantId这三个关键值:
{
  "appId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "displayName": "jenkins-azure-deploy-sp",
  "password": "xxxxxx~xxxxxx~xxxxxx",
  "tenant": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

2. 在Jenkins中安全存储凭据

为避免明文泄露凭据,用Jenkins的凭据管理功能存储:

  • 进入Jenkins后台 → 凭据 → 系统 → 全局凭据 → 添加凭据
  • 分别创建三个「秘密文本」类型的凭据,对应刚才的appIdpasswordtenantId,比如命名为AZURE_SP_APP_IDAZURE_SP_PASSWORDAZURE_SP_TENANT_ID

3. 在Jenkins Shell中执行登录与部署

在Jenkins的Shell步骤里,先通过服务主体完成Azure CLI无交互登录,再执行你的部署命令:

# 从Jenkins凭据中读取环境变量
export AZURE_CLIENT_ID=${AZURE_SP_APP_ID}
export AZURE_CLIENT_SECRET=${AZURE_SP_PASSWORD}
export AZURE_TENANT_ID=${AZURE_SP_TENANT_ID}

# 无交互登录Azure CLI
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID

# 执行WebApp部署命令
az webapp deployment source config --name ${WEBAPP_NAME} --resource-group ${RESOURCEGROUP_NAME} --slot staging --repo-url ${GIT_URL} --branch ${BRANCH} --manual-integration

额外注意事项

  • 确保Jenkins代理已安装Azure CLI,若未安装需先在代理环境完成Azure CLI的安装配置
  • 如果后续遇到权限报错,可回到Azure Portal给服务主体添加更细分的权限(比如「Web 应用参与者」)
  • 若Jenkins部署在Azure VM/AKS等Azure托管资源上,也可考虑用托管标识替代服务主体,这是更安全的云原生方案,但服务主体适配性更强,适合跨环境场景

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

火山引擎 最新活动