Подключение тома gitRepo в службе "Экземпляры контейнеров Azure"

Узнайте, как подключить том gitRepo, чтобы клонировать репозиторий в экземпляры контейнеров.

Примечание.

Подключение тома gitRepo сейчас поддерживается только для контейнеров Linux. Мы работаем над тем, чтобы обеспечить все функции для контейнеров Windows, но для текущей платформы имеются отличия, подробнее о которых можно узнать в обзоре службы.

Том gitRepo

Том gitRepo подключает каталог и клонирует в него указанный репозиторий Git во время создания контейнера. Используя том gitRepo в экземплярах контейнера, можно избежать добавления кода для выполнения этой задачи в приложениях.

После подключения тома gitRepo задайте три свойства, чтобы настроить том.

Свойство Обязательное поле Описание:
repository Да Полный URL-адрес (включая http:// или https://) репозитория Git, который будет клонирован.
directory No Каталог, в который необходимо клонировать репозиторий. Значение пути не должно содержать знак .. или начинаться с него. Если указан знак ., репозиторий клонируется в каталог тома. В противном случае репозиторий Git клонируется в подкаталог с указанным именем в каталоге томов.
revision No Зафиксированный хэш версии, которая будет клонирована. Если не указан, клонируется версия HEAD.

Подключение тома gitRepo: Azure CLI

Чтобы подключить том gitRepo при развертывании экземпляров контейнера с помощью Azure CLI, укажите параметры --gitrepo-url и --gitrepo-mount-path в команде az container create. При необходимости можно указать каталог тома, в который будет осуществляться клонирование (--gitrepo-dir) и хэш фиксации редакции, которая будет клонирована (--gitrepo-revision).

В этом примере команда клонирует пример приложения Майкрософт aci-helloworld в расположение/mnt/aci-helloworld в экземпляре контейнера:

az container create \
    --resource-group myResourceGroup \
    --name hellogitrepo \
    --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --dns-name-label aci-demo \
    --ports 80 \
    --gitrepo-url https://github.com/Azure-Samples/aci-helloworld \
    --gitrepo-mount-path /mnt/aci-helloworld

Чтобы убедиться, что том gitRepo подключен, запустите оболочку в контейнере с помощью команды az container exec и выведите список каталогов.

az container exec --resource-group myResourceGroup --name hellogitrepo --exec-command /bin/sh
/usr/src/app # ls -l /mnt/aci-helloworld/
total 16
-rw-r--r--    1 root     root           144 Apr 16 16:35 Dockerfile
-rw-r--r--    1 root     root          1162 Apr 16 16:35 LICENSE
-rw-r--r--    1 root     root          1237 Apr 16 16:35 README.md
drwxr-xr-x    2 root     root          4096 Apr 16 16:35 app

Подключение тома gitRepo: Resource Manager

Чтобы подключить том gitRepo при развертывании экземпляров контейнера с помощью шаблона Azure Resource Manager, в шаблоне сначала нужно заполнить массив volumes в разделе properties группы контейнеров. Затем для каждого контейнера в группе контейнеров, в которой нужно подключить том gitRepo, нужно заполнить массив volumeMounts в разделе properties определения контейнера.

Например, следующий шаблон Resource Manager создает группу контейнеров, состоящую из одного контейнера. Контейнер клонирует два репозитория GitHub, указанных блоками тома gitRepo. Второй том содержит дополнительные свойства, указывающие каталог для клонирования и зафиксированный хэш определенной версии.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld"
  },
  "resources": [
    {
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2021-03-01",
      "name": "volume-demo-gitrepo",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                }
              ],
              "volumeMounts": [
                {
                  "name": "gitrepo1",
                  "mountPath": "/mnt/repo1"
                },
                {
                  "name": "gitrepo2",
                  "mountPath": "/mnt/repo2"
                }
              ]
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            }
          ]
        },
        "volumes": [
          {
            "name": "gitrepo1",
            "gitRepo": {
              "repository": "https://github.com/Azure-Samples/aci-helloworld"
            }
          },
          {
            "name": "gitrepo2",
            "gitRepo": {
              "directory": "my-custom-clone-directory",
              "repository": "https://github.com/Azure-Samples/aci-helloworld",
              "revision": "d5ccfcedc0d81f7ca5e3dbe6e5a7705b579101f1"
            }
          }
        ]
      }
    }
  ]
}

В результате структура каталогов двух клонированных репозиториев, определенных в предыдущем шаблоне, выглядит следующим образом.

/mnt/repo1/aci-helloworld
/mnt/repo2/my-custom-clone-directory

Пример развертывания экземпляра контейнера с помощью шаблона Azure Resource Manager см. в статье Развертывание группы контейнеров.

Проверка подлинности в частном репозитории Git

Чтобы подключить том gitRepo как частный репозиторий Git, укажите учетные данные в URL-адресе репозитория. Как правило, учетные данные представлены в виде имени пользователя и личного маркера доступа (PAT), который предоставляет доступ к репозиторию.

Например, параметр Azure CLI --gitrepo-url для частного репозитория GitHub будет похож на следующий (где "gituser" — это имя пользователя GitHub, а "abcdef1234fdsa4321abcdef" — ​​это личный маркер доступа пользователя):

--gitrepo-url https://gituser:abcdef1234fdsa4321abcdef@github.com/GitUser/some-private-repository

Для репозитория Git Azure Repos укажите любое имя пользователя (вы можете использовать "azurereposuser", как в следующем примере) в сочетании с действительным PAT.

--gitrepo-url https://azurereposuser:abcdef1234fdsa4321abcdef@dev.azure.com/your-org/_git/some-private-repository

Дополнительные сведения о личных маркерах доступа для GitHub и Azure Repos:

GitHub: создание личных маркеров доступа для командной строки

Azure Repos: создание личных маркеров доступа для аутентификации доступа

Следующие шаги

Сведения о подключении других типов томов в службе "Экземпляры контейнеров Azure" см. в следующих статьях: