并发 az 登录执行



我正在使用Azure CLI对某些Azure VM执行运行状况检查。运行状况检查使用 bash 通过 Jenkins 阶段部署。阶段本身可能需要几个小时才能完成,在此期间,将执行多个 az"vm 运行命令",这些命令都需要正确的凭据。

我还有几个 Jenkins 管道,它们部署了不同的产品,并且应该能够并行运行。它们都具有相同的运行状况检查阶段。

当我执行"azlogin"以生成身份验证令牌和">az 帐户集"以设置订阅时,据我了解,此数据将写入配置文件 (~/.azure/azureProfile.json(。所以这很好,但是每当我在这个 Jenkins 容器上触发并行管道时,如果我使用不同的 Azure 订阅,配置文件自然会被不同的凭据覆盖,这会导致其他运行状况检查在下一次 vm 运行命令执行时失败,因为它正在寻找资源组, 存在于不同的订阅中。

我正在考虑在每个阶段运行中创建一个新的唯一 Linux 用户,然后在完成后将其删除,因此所有管道都将具有单独的配置文件。不过这有点棘手,因为这是一个使用 alpine 映像的 Jenkins docker 容器,我需要为每个管道创建用户,而不是在 dockerfile 中创建用户,这让我想到了另一个戏剧 - 给 Jenkins 用户足够的权限来创建和删除用户等等......

此外,由于会话凭据默认存储在 ~/.azure/accessTokens.json 和 azureProfile.json 文件中,理论上我可以为每个执行生成一个不同的目录,但我找不到一种方法来更改 Azure 文档中的这些默认文件/位置。

您认为解决此问题的最佳/更简单的方法是什么?

设置AZURE_CONFIG_DIR环境变量可以完成此处所述的技巧。

我会尽量保持az login原样,删除az account set并为每个命令使用--subscription参数。

可以看到~/.azure/azureProfile.json包含每个订阅的 tenantId 和用户信息,~/.azure/accessTokens.json包含所有令牌。

因此,如果每次都明确精确地进行订阅,则不会依赖于常见的用户上下文。

我有订阅xxxx-xxxx-xxxxx-xxxxAccount 1,订阅yyyy-yyyy-yyyy-yyyyAccount 2,我有:

az login # Account 1
az login # Account 2
az group list --subscription "xxxx-xxxx-xxxxx-xxxx"
az group list --subscription "yyyy-yyyy-yyyy-yyyy"

它在同一个 Unix 用户下运行良好

最新更新