Montaje de un volumen de gitRepo en Azure Container Instances

Obtenga información acerca de cómo montar un volumen de gitRepo para clonar un repositorio de GIT en las instancias de Container Instances.

Nota

El montaje de un volumen de gitRepo está actualmente restringido a los contenedores Linux. Aunque se está trabajando para incorporar todas las características a los contenedores Windows, puede consultar las diferencias actuales entre plataformas en la introducción.

Volumen de gitRepo

El volumen de gitRepo monta un directorio y clona el repositorio de Git especificado en él durante la creación del contenedor. Al usar un volumen de gitRepo en las instancias de Container Instances, puede evitar agregar el código para hacerlo en las aplicaciones.

Al montar un volumen de gitRepo, puede establecer tres propiedades para configurar el volumen:

Propiedad Obligatorio Descripción
repository Dirección URL completa, incluidos http:// o https://, del repositorio de GIT que se va a clonar.
directory No Directorio en el que se debe clonar el repositorio. La ruta de acceso no debe contener ".." ni empezar por ello. Si especifica ".", el repositorio se clona en el directorio del volumen. De lo contrario, el repositorio de GIT se clona en un subdirectorio del nombre indicado dentro del directorio del volumen.
revision No Hash de confirmación de la revisión que se va a clonar. Si no se especifica, se clona la revisión de HEAD.

Montaje de un volumen de gitRepo: Azure CLI

Para montar un volumen de gitRepo al implementar instancias de contenedor con la CLI de Azure, utilice los parámetros --gitrepo-url y --gitrepo-mount-path en el comando az container create. Opcionalmente, puede especificar el directorio del volumen en que va a realizar la clonación (--gitrepo-dir) y el hash de confirmación de la revisión que se va a clonar (--gitrepo-revision).

Este comando de ejemplo clona la aplicación de ejemplo aci-helloworld de Microsoft en /mnt/aci-helloworld en la instancia de contenedor:

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 comprobar que se ha montado el volumen de gitRepo, inicie un shell en el contenedor con az container exec y enumere el directorio:

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

Montaje de un volumen de gitRepo: Resource Manager

Para montar un volumen de GitRepo al implementar instancias de contenedor con un plantilla de Azure Resource Manager, rellene la matriz volumes en la sección properties del grupo contenedor de la plantilla. Luego, en todos los contenedores del grupo de contenedores en los que desee montar el volumen de GitRepo, rellene la matriz volumeMounts en la sección properties de la definición del contenedor.

Por ejemplo, la siguiente plantilla de Resource Manager crea un grupo de contenedores que consta de un único contenedor. El contenedor clona dos repositorios de GitHub especificados por los bloques del volumen de gitRepo. El segundo volumen incluye propiedades adicionales que especifican un directorio en el que clonar y el hash de confirmación de una revisión específica que se va 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 continuación, se muestra la estructura del directorio resultante de los dos repositorios clonados definidos en la plantilla anterior:

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

Para ver un ejemplo de implementación de instancias de contenedor con una plantilla de Azure Resource Manager, consulte Implementación de grupos de varios contenedores en Azure Container Instances.

Autenticación del repositorio de Git privado

Para montar un volumen de gitRepo para un repositorio Git privado, especifique las credenciales en la dirección URL del repositorio. Normalmente, las credenciales tienen forma de un nombre de usuario y un token de acceso personal (PAT) que concede acceso de ámbito al repositorio.

Por ejemplo, el parámetro --gitrepo-url de la CLI de Azure para un repositorio GitHub privado tendría un aspecto similar al siguiente (donde "gituser" es el nombre de usuario de GitHub y "abcdef1234fdsa4321abcdef" es el token de acceso personal del usuario):

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

Para ver un repositorio GIT de Azure Repos, especifique cualquier nombre de usuario (puede usar "azurereposuser" como en el ejemplo siguiente) en combinación con un token de acceso personal válido:

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

Para más información acerca de los tokens de acceso personal para GitHub y Azure Repos, vea lo siguiente:

GitHub: Creating a personal access token for the command line (Creación de un token de acceso personal para la línea de comandos)

Azure Repos: Create personal access tokens to authenticate access (Creación de tokens de acceso personales para autenticar el acceso)

Pasos siguientes

Aprenda a montar otros tipos de volúmenes en Azure Container Instances: