Montar um volume gitRepo em Instâncias de Contêiner do Azure

Saiba como montar um volume gitRepo para clonar um repositório Git em suas instâncias de contêiner.

Observação

A montagem de um volume gitRepo está atualmente restrita a contêineres do Linux. Enquanto trabalhamos para trazer todos os recursos para os contêineres do Windows, você pode encontrar as diferenças de plataforma atuais na Visão geral.

Volume gitRepo

O volume gitRepo monta um diretório e clona para dentro dele o repositório Git especificado, na inicialização do contêiner. Usando um volume gitRepo em suas instâncias de contêiner, você pode evitar adicionar o código para fazer isso em seus aplicativos.

Quando você monta um volume gitRepo, você pode definir três propriedades para configurar o volume:

Propriedade Obrigatório Descrição
repository Sim A URL completa, incluindo http:// ou https://, do repositório Git a ser clonado.
directory Não O diretório no qual o repositório deve ser clonado. O caminho não deve conter nem começar com "..". Se você especificar ".", o repositório será clonado no diretório do volume. Caso contrário, o repositório do Git será clonado em um subdiretório com o nome fornecido, dentro do diretório do volume.
revision Não O hash de confirmação da revisão a ser clonada. Se não for especificado, a revisão HEAD será clonada.

Volume de montagem gitRepo: CLI do Azure

Para montar um volume gitRepo quando você implanta instâncias de contêiner com o CLI do Azure, forneça os parâmetros --gitrepo-url e --gitrepo-mount-path para o az criar o comando . Você pode opcionalmente especificar o diretório dentro do volume para clonar em (--gitrepo-dir) e o hash de confirmação da revisão a ser clonado (--gitrepo-revision).

Este exemplo de comando clona o aplicativo de exemplo aci helloworld da Microsoft em /mnt/aci-helloworld na instância de contêiner:

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

Para verificar se o volume gitRepo foi montado, inicie um shell no contêiner com exec de contêiner az e liste o diretório:

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

Volume de montagem GitRepo: o Gerenciador de recursos

Para montar um volume gitRepo quando você implanta instâncias de contêiner com uma modelo do Azure Resource Manager, primeiro preencha a seção da volumes matriz no grupo de contêiner properties do modelo. Em seguida, para cada contêiner do grupo de contêineres no qual você deseja montar o volume gitRepo, popule a matriz volumeMounts na seção properties da definição de contêiner.

Por exemplo, o modelo do Resource Manager a seguir cria um grupo de contêineres que consiste em um único contêiner. O contêiner clona dois repositórios do GitHub especificados pelos blocos de volume do gitRepo. O segundo volume inclui propriedades adicionais, especificando um diretório para o qual clonar e também o hash de confirmação de uma revisão específica a ser clonada.

{
  "$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"
            }
          }
        ]
      }
    }
  ]
}

A estrutura de diretório resultante dos dois repositórios clonados definida no modelo anterior é:

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

Para ver um exemplo de implantação de instância de contêiner com um modelo do Azure Resource Manager, consulte Implantar grupos com vários contêineres em Instâncias de Contêiner do Azure.

Autenticação do repositório Git privado

Para montar um volume gitRepo para um repositório Git privado, especifique as credenciais na URL do repositório. Normalmente, as credenciais estão na forma de um nome de usuário e um PAT (token de acesso pessoal) que concedem acesso com escopo ao repositório.

Por exemplo, o parâmetro --gitrepo-url da CLI do Azure para um repositório do GitHub privado deve assemelhar-se ao seguinte (em que "gituser" é o nome de usuário do GitHub e "abcdef1234fdsa4321abcdef" é o token de acesso pessoal do usuário):

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

Para um repositório do Azure Repos Git, especifique qualquer nome de usuário (você pode usar "azurereposuser" como no exemplo a seguir) em combinação com um PAT válido:

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

Para obter mais informações sobre tokens de acesso pessoal para o GitHub e o Azure Repos, consulte o seguinte:

GitHub: Criar um token de acesso pessoal para a linha de comando

Repositórios do Azure: criar tokens de acesso pessoal para autenticar o acesso

Próximas etapas

Saiba como montar outros tipos de volume em Instâncias de Contêiner do Azure: