Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 并发登录执行_Bash_Azure_Docker_Jenkins_Azure Cli - Fatal编程技术网

Bash 并发登录执行

Bash 并发登录执行,bash,azure,docker,jenkins,azure-cli,Bash,Azure,Docker,Jenkins,Azure Cli,我正在使用Azure CLI对某些Azure VM执行运行状况检查。使用bash通过Jenkins阶段部署健康检查。该阶段本身可能需要几个小时才能完成,在此期间,将执行多个需要正确凭据的az“vm运行命令” 我还有几个Jenkins管道,它们部署不同的产品,并且应该能够并行运行。他们都有相同的健康检查阶段 当我执行“az login”以生成身份验证令牌和“az account set”以设置订阅时,据我所知,该数据会写入配置文件(~/.azure/azureProfile.json)。这很好,但

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

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

当我执行“az login”以生成身份验证令牌和“az account set”以设置订阅时,据我所知,该数据会写入配置文件(~/.azure/azureProfile.json)。这很好,但每当我在Jenkins容器上触发并行管道时,如果我使用不同的Azure订阅,配置文件自然会被不同的凭据覆盖,这会导致在执行下一个vm运行命令时,另一个运行状况检查失败,因为它正在查找另一个订阅中存在的资源组

我考虑在每个阶段运行时创建一个新的独特的Linux用户,然后在运行完成后将其删除,这样所有管道都将有单独的配置文件。但这有点棘手,因为这是一个使用alpine图像的Jenkins docker容器,我需要用每个管道而不是dockerfile创建用户,这就引出了另一个戏剧性的问题——给Jenkins用户足够的权限来创建和删除用户,等等

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


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

我会尽量保持
az登录
不变,删除
az帐户集
,并为每个命令使用
--subscription
参数

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

因此,如果您明确地每次订阅都精确,您将不依赖于公共用户上下文

我有我的
账户1
用于订阅
xxxx-xxxx-xxxx-xxxx
,和
账户2
用于订阅
yyyyyyyyyyyyyyyy
,我做:

az登录#账号1
az登录#账户2
az集团名单——认购“xxxx-xxxx-xxxx-xxxx”
az组列表--订阅“YYYYYYYYYYYY”

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

设置
AZURE\u CONFIG\u DIR
环境变量可以实现上述功能。

为此,您需要在每个管道中重新登录?如果只是更改订阅,则每个Azure CLI命令都有
--subscription
参数,因为它是脚本的同一用户,所以它将使用相同的令牌,因此,如果要在同一AAD租户下向多个订阅部署资源,则无需重新登录或更改上下文,所以,让我在这里给你们更多的上下文。az登录使用可以访问单个订阅的服务主体。如果我在不同的订阅中运行管道,我将使用不同的SP。因此,我不能用一个登录访问所有订阅,因此每次运行都需要重新登录。在我的情况下,每个订阅代表我们的不同客户,因此单个SP访问所有这些都是一个巨大的安全漏洞,实际上不是一个选项。@ZhulianGinev您给我一个“不能使用同一个SP”的原因,这样您每次都可以使用不同的SP登录,只需不执行
az帐户集
和精确的订阅ID。我有几个帐户,有几个订阅,我在
~/.azure/
中找到它们,直到我不执行
az注销--用户名