Примечание. В этой статье я использую Github в качестве примера. У Terraform есть плагины провайдера для «GitLab» и «Bitbucket».

Все еще создаете репо с помощью следующих шагов?

  • Войдите в свою учетную запись Github
  • Нажмите «+» (Новый репозиторий).
  • Вручную введите имя репо, разрешение
  • Добавьте вручную лицензию, файл readme и файл gitignore
  • Сохраните и создайте новое репо
  • Начать добавление базовых структур проекта в новое репо

Что ж, для вас есть плохие новости и хорошие новости. Плохая новость заключается в том, что вы все еще создаете репозитории Github старым способом (вручную), который неэффективен, подвержен ошибкам, не стандартизирован и не масштабируется. Хорошая новость заключается в том, что вы попали в нужное место, эта статья покажет вам, как создать репозиторий Github в стиле IAC (Infra as code), который является более эффективным и масштабируемым.

Github как код

Создание репозиториев Github вручную может быть приемлемо для личных проектов, небольших организаций или быстрых тестов, но если вы когда-нибудь захотите масштабировать и делать что-то в соответствии с передовыми практиками, вы всегда должны думать о IAC как о масштабируемой схеме для ваших организаций Github. Он позволяет создавать и настраивать репозитории Github надежным и безопасным способом.

Почему Terraform

HashiCorp Terraform - это инструмент для создания, изменения и управления версиями инфраструктуры с открытым исходным кодом и корпоративной версией. Terraform не зависит от платформы и может использоваться для создания кроссплатформенной инфраструктуры. Terraform предоставляет тысячи интеграций для различных платформ, инструментов, сетей, ведения журналов, мониторинга и т. Д. Вы можете найти все доступные интеграции здесь:

Провайдеры Terraform

Предпосылки

  • Настройте шаблоны репозитория Github: вы можете предварительно определить некоторые шаблоны репозитория на основе типов проектов, поэтому при создании новых репозиториев вы можете использовать шаблон в качестве шаблона. Например, у меня есть предопределенные следующие шаблоны:

  • У вас установлен Terraform локально
  • У вас есть существующая учетная запись Github
  • Вы создали токен личного доступа как минимум с разрешениями на полный контроль репо.

Код Terraform

  • Структура проекта:
github
    ├── create_repo.tf
    ├── provider.tf
    └── variables.tf
  • provider.tf
terraform {
  required_providers {
    github = {
      source  = "integrations/github"
      version = "~> 4.0"
    }
  }
}
# Configure the Github provider
provider "github" {
  token = var.token
}
  • variables.tf
variable "token" {
  type    = string
  default = "ghp_xxxxxx" # Your Github personal access token
}
  • create_repo.tf
resource "github_repository" "test-repo" {
  name        = "test-repo"
  description = "Test repo from Terraform"
  visibility = "public"
  template {
    owner      = "tonylixu"
    repository = "python-fastapi-template"
  }
}

Создать новые репо

  • Инициализировать репо
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding integrations/github versions matching "~> 4.0"...
- Installing integrations/github v4.11.0...
- Installed integrations/github v4.11.0 (signed by a HashiCorp partner, key ID 38027F80D7FD5FB2)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
  • Проверить и исправить форматирование
$ terraform validate
Success! The configuration is valid.
$ terraform fmt
  • Пробный запуск и план
$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
Terraform will perform the following actions:
# github_repository.test-repo will be created
  + resource "github_repository" "test-repo" {
      + allow_merge_commit     = true
      + allow_rebase_merge     = true
      + allow_squash_merge     = true
      + archived               = false
      + default_branch         = (known after apply)
      + delete_branch_on_merge = false
....
  • Выполнять
$ terraform apply
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
Terraform will perform the following actions:
# github_repository.test-repo will be created
  + resource "github_repository" "test-repo" {
      + allow_merge_commit     = true
      + allow_rebase_merge     = true
      + allow_squash_merge     = true
      + archived               = false
      + default_branch         = (known after apply)
      + delete_branch_on_merge = false
      + description            = "Test repo from Terraform"
      + etag                   = (known after apply)
      + full_name              = (known after apply)
      + git_clone_url          = (known after apply)
...
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
Enter a value: yes
github_repository.test-repo: Creating...
github_repository.test-repo: Creation complete after 6s [id=test-repo]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Теперь у вас должно быть новое репо в вашей организации на Github!

Если вы хотите удалить репо, просто введите terraform destroy, и он сделает удаление за вас.

Заключение

Итак, вот как вы создаете репозиторий Github, используя Terraform и концепцию IAC. Сначала вам может потребоваться некоторое время, чтобы настроить шаблоны и разработать код терраформирования. Но как только вы это сделаете, ваша организация / команда получит стандартный способ создания репозиториев Github - больше никаких опечаток или несоответствий в структуре проекта!

Если вы используете Gitlab, у Terraform также есть провайдер Gitlab.

Больше контента на plainenglish.io