是否可以使用 Terraform 和 Azure DevOps Pipelines 部署到非云集群?

问题描述 投票:0回答:1

背景:

我在 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-devops tfs
1个回答
0
投票

在 Azure Pipelines 中,要使用

kubeconfig
文件作为 Terraform kubernetes 提供程序的身份验证,您可以执行以下操作:

  1. 获取 kubeconfig 文件。默认情况下,此文件的路径是托管本地 Kubernetes 的服务器计算机上的“

    ~/.kube/config
    ”。

  2. 在要运行管道的 Azure DevOps 项目中,从本地路径将

    config
    文件作为安全文件上传。

    enter image description here

  3. 在管道中,您可以使用 DownloadSecureFile@1 任务将安全文件下载到代理计算机。此任务将自动生成一个输出变量来存储下载的安全文件的本地路径。

  4. 然后在后续任务中,可以使用这个输出变量(

    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

enter image description here


© www.soinside.com 2019 - 2024. All rights reserved.