我们在Azure DevOps中使用阶段,因为可以选择运行管道时要运行的阶段(见图)。但是,在运行阶段时,一个恼人的问题是,如果您在Stage 1中安装了一个程序,那么您似乎无法在Stage 2中使用该程序。
是否有一种方法只安装一次程序,然后在所有阶段都可用?

这里是我想要做的一个例子: 1)在阶段1中安装kubectl,2)在阶段2中使用kubectl。
trigger:
- master
pool:
vmImage: ubuntu-22.04
steps:
- stage: MakeK8sConfiguration
jobs:
- job: MakeK8sConfiguration
steps:
- script: |
# Downloading kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Installing kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- stage: MakeK8sDeployment
jobs:
- job: MakeK8sDeployment
steps:
- script: |
# Running kubectl
kubectl发布于 2022-07-25 07:50:13
从YAML文件中,您使用的是微软托管的代理:Ubuntu-22.04。
请参阅以下文档:Microsoft托管代理
每次运行管道时,都会为管道中的每个作业获得一个新的虚拟机。虚拟机在一个作业之后被丢弃(这意味着作业对虚拟机文件系统所做的任何更改,例如签出代码,都将不能用于下一个作业)。
在您的情况下,不同的阶段将使用不同的和新的微软托管代理。他们是独立的。
因此,当您在第一阶段安装kubectl时,第二阶段仍然不能使用kubectl.You,仍然需要添加其他步骤来在第二阶段安装kubectl。
是否有一种方法只安装一次程序,然后在所有阶段都可用?
发布于 2022-07-25 07:51:03
阶段由devop作为不同的管道来处理,它们创建了一个新的工作目录(您可能会注意到,如果您检查阶段日志的话)。这意味着可能会找一个不同的代理人来管理你的工作。尽管您指定了相同的代理池,但另一个VM或容器可能在Microsoft宿主代理池中完成此工作。为了解决这个问题,您有两个选项。
第一个选项:也在第二阶段安装程序
第二个选项:使用安装程序的自托管代理。
https://stackoverflow.com/questions/73105249
复制相似问题