背景:
我在 Azure DevOps 中有一个用于本地集群的服务连接/环境,该集群位于虚拟机内部,我可以通过 helm 图表部署资源。
我想使用 terraform 创建基础设施部署管道,但我不知道是否能够获取 kubeconfig 路径或 kubeconfig 内容以通过变量设置 terraform“kubernetes”提供程序。 我已经为基础设施部署制作了一个 helm 图表,但我认为这不是一个好主意,应该迁移到 terraform。
有人做过吗?可以吗?
PD:这是我的部署 .yaml 的一部分,以了解我现在如何执行此操作的更多上下文
stages:
- stage: DEV
condition: eq(variables.environment, 'DEV')
jobs:
- deployment:
displayName: "Deploy ${{parameters.environment}} infrastructure"
environment:
name: 01-DEV
resourceType: Kubernetes
variables:
- group: "dev"
workspace:
clean: all
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: gitversion/setup@0
displayName: Setup GitVersion
inputs:
versionSpec: '5.x'
- task: gitversion/execute@0
displayName: Execute GitVersion
inputs:
useConfigFile: true
configFilePath: $(gitVersionFile)
- task: KubectlInstaller@0
displayName: Install Kubectl
- task: HelmInstaller@1
displayName: Instal Helm
- task: ReplaceTokens@1
displayName: Variable substitutions in values.yaml
inputs:
sourcePath: charts/Infra
filePattern: "values.yaml"
tokenRegex: __(\w+[\.\w+]*)__
- task: HelmDeploy@0
displayName: Package Helm Chart
inputs:
command: "package"
chartPath: "$(Build.SourcesDirectory)/charts/Infra"
chartVersion: "$(GitVersion.SemVer)"
save: false
arguments: --app-version $(Build.BuildNumber)
destination: $(Agent.TempDirectory)
- task: HelmDeploy@0
displayName: Deploy chart
inputs:
namespace: $(Environment.ResourceName)
command: upgrade
chartType: FilePath
chartPath: "$(Agent.TempDirectory)/Infra-$(Build.BuildNumber).tgz"
arguments: "--create-namespace"
在 Azure Pipelines 中,要使用
kubeconfig
文件作为 Terraform kubernetes 提供程序的身份验证,您可以执行以下操作:
获取 kubeconfig 文件。默认情况下,此文件的路径是托管本地 Kubernetes 的服务器计算机上的“
~/.kube/config
”。
在要运行管道的 Azure DevOps 项目中,从本地路径将
config
文件作为安全文件上传。
在管道中,您可以使用 DownloadSecureFile@1 任务将安全文件下载到代理计算机。此任务将自动生成一个输出变量来存储下载的安全文件的本地路径。
然后在后续任务中,可以使用这个输出变量(
ReferenceName.secureFilePath
)或其对应的环境变量来传递本地路径。
请参阅以下示例作为参考:
# azure-pipelines.yml
steps:
# The set the custom ReferenceName as 'myKubeconfig' on this task.
# The variable name is 'secureFilePath' by default.
- task: DownloadSecureFile@1
displayName: 'Download kubeconfig file'
name: myKubeconfig
inputs:
secureFile: config
# On the subsequent tasks, can access the file path via the output variable or its corresponding environment variable.
- task: PowerShell@2
displayName: 'Print file path'
inputs:
pwsh: true
targetType: 'inline'
script: |
Write-Host $(myKubeconfig.secureFilePath)
Write-Host $env:MYKUBECONFIG_SECUREFILEPATH