Montar um volume gitRepo no Azure Container Instances

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

Nota

A montagem de um volume gitRepo está atualmente restrita a contêineres Linux. Enquanto estamos trabalhando para trazer todos os recursos para 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 o repositório Git especificado nele durante a criaçã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.

Ao montar um volume gitRepo , você pode definir três propriedades para configurar o volume:

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

Monte o volume gitRepo: CLI do Azure

Para montar um volume gitRepo ao implantar instâncias de contêiner com a CLI do Azure, forneça os --gitrepo-url parâmetros e --gitrepo-mount-path para o comando az container create. Pode especificar opcionalmente o diretório no volume a clonar em (--gitrepo-dir) e o hash de consolidação da revisão a clonar (--gitrepo-revision).

Este comando de exemplo clona o aplicativo de exemplo Microsoft aci-helloworld na /mnt/aci-helloworld instância do 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 az container exec 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

Monte o volume gitRepo: Gerenciador de Recursos

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

Por exemplo, o modelo do Gerenciador de Recursos 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 gitRepo . O segundo volume inclui propriedades adicionais que especificam um diretório para o qual clonar e o hash de consolidação de uma revisão específica a clonar.

{
  "$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órios resultante dos dois repositórios clonados definidos 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 de vários contêineres em instâncias de contêiner do Azure.

Autenticação de repositório Git privada

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 token de acesso pessoal (PAT) que concede acesso com escopo ao repositório.

Por exemplo, o parâmetro CLI --gitrepo-url do Azure para um repositório privado do GitHub seria semelhante ao seguinte (onde "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 Git do Azure Repos, 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 GitHub e Azure Repos, consulte o seguinte:

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

Azure Repos: Criar tokens de acesso pessoal para autenticar o acesso

Próximos passos

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