微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用terraform克隆git repo,更新文件并向其推送提交?

如何解决如何使用terraform克隆git repo,更新文件并向其推送提交?

问题

  • 我们使用terraform为我们的Kubernetes集群或Apps编写配置文件
  • 其中一些文件必须推送到不同的git repos
    • 仅遵循GitOps进行kubernetes和动态配置存储库

问题

到目前为止,我有以下内容

# https://stackoverflow.com/questions/36629367/getting-an-environment-variable-in-terraform-configuration/36672931#36672931
variable GITLAB_CLONE_TOKEN {}

locals {
  carCrdInstance = {
    apiVersion = "car.io/v1"
    kind       = "Car"
    Metadata = {
      name = "super-car"
    }
    spec = {
      convertible = "true"
      color = "black"
    }
  }

  # https://docs.gitlab.com/ee/user/project/deploy_tokens/#git-clone-a-repository
  clone_location = "${path.module}/.gitops"
  branch = "feature/crds-setup"
}

resource "null_resource" "git_clone" {
  provisioner "local-exec" {
    command = "git clone --branch ${local.branch} https://${var.username}:${var.GITLAB_CLONE_TOKEN}@gitlab.example.com/tanuki/awesome_project.git ${local.clone_location}"
  }
}

resource "local_file" "cert_manager_cluster_issuer_object" {
  content  = yamlencode(local.cert_issuer)
  filename = "${git_repo.configs.destination}/crds/instances/white-convertible.yaml"

  # https://stackoverflow.com/questions/52421656/terraform-execute-script-before-lambda-creation/52422595#52422595
  depends_on = ["null_resource.git_clone"]

  # https://stackoverflow.com/questions/7149984/how-do-i-execute-a-git-command-without-being-in-the-repository/35899275#35899275
  provisioner "local-exec" {
    command = "git -C ${local.clone_location} commit -am ':new: updating cars...'"
  }

  provisioner "local-exec" {
    command = "git -C ${local.clone_location} push origin ${local.branch}'"
  }
}

有没有类似的东西?

  • 我上面没有测试过,但是我正在寻找可以让我做到这一点的东西

解决方法

如何使用 terraform 执行 git 克隆、提交、推送?

我们应该只使用shell吗?

Terraform 是一个很好的工具 - 它最适合提供不可变的基础设施。 Shell 脚本可能也有其一席之地,但如果可以,最好使用更具声明性的方法。

您所描述的“git clone、commit、push”本质上是一些通常在构建或部署管道中完成的步骤。 Terraform 可能是在某些步骤中使用的好工具,但在我看来,它不是编排完整工作流程的最佳工具。

用于编排管道工作流的工具可能最适合于此,例如

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?