# Definición remota de archivos de Bake


Puedes compilar archivos de Bake directamente desde un repositorio Git remoto o una URL HTTPS:

```console
$ docker buildx bake "https://github.com/docker/cli.git#v20.10.11" --print
#1 [internal] load git source https://github.com/docker/cli.git#v20.10.11
#1 0.745 e8f1871b077b64bcb4a13334b7146492773769f7       refs/tags/v20.10.11
#1 2.022 From https://github.com/docker/cli
#1 2.022  * [new tag]         v20.10.11  -> v20.10.11
#1 DONE 2.9s
```

Esto obtiene la definición de Bake de la ubicación remota especificada y ejecuta los grupos u objetivos (targets) definidos en ese archivo. Si la definición de Bake remota no especifica un contexto de compilación, el contexto se establece automáticamente en el repositorio Git remoto. Por ejemplo, [este caso](https://github.com/docker/cli/blob/2776a6d694f988c0c1df61cad4bfac0f54e481c8/docker-bake.hcl#L17-L26) utiliza `https://github.com/docker/cli.git`:

```json
{
  "group": {
    "default": {
      "targets": ["binary"]
    }
  },
  "target": {
    "binary": {
      "context": "https://github.com/docker/cli.git#v20.10.11",
      "dockerfile": "Dockerfile",
      "args": {
        "BASE_VARIANT": "alpine",
        "GO_STRIP": "",
        "VERSION": ""
      },
      "target": "binary",
      "platforms": ["local"],
      "output": ["build"]
    }
  }
}
```

## Usar el contexto local con una definición remota

Al compilar con una definición de Bake remota, es posible que desees consumir archivos locales relativos al directorio donde se ejecuta el comando de Bake. Puedes definir contextos como relativos al contexto del comando utilizando el prefijo `cwd://`.

```hcl {title="https://github.com/dvdksn/buildx/blob/bake-remote-example/docker-bake.hcl"}
target "default" {
  context = "cwd://"
  dockerfile-inline = <<EOT
FROM alpine
WORKDIR /src
COPY . .
RUN ls -l && stop
EOT
}
```

```console
$ touch foo bar
$ docker buildx bake "https://github.com/dvdksn/buildx.git#bake-remote-example"
```

```text
...
 > [4/4] RUN ls -l && stop:
#8 0.101 total 0
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 bar
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 foo
#8 0.102 /bin/sh: stop: not found
```

Puedes añadir una ruta al prefijo `cwd://` si deseas utilizar un directorio local específico como contexto. Ten en cuenta que si especificas una ruta, esta debe estar dentro del directorio de trabajo donde se ejecuta el comando. Si utilizas una ruta absoluta o una ruta relativa que apunte fuera del directorio de trabajo, Bake lanzará un error.

### Contextos locales con nombre

También puedes usar el prefijo `cwd://` para definir directorios locales en el contexto de ejecución de Bake como contextos con nombre.

El siguiente ejemplo define el contexto `docs` como `./src/docs/content`, relativo al directorio de trabajo actual desde donde se ejecuta Bake como un contexto con nombre.

```hcl {title=docker-bake.hcl}
target "default" {
  contexts = {
    docs = "cwd://src/docs/content"
  }
  dockerfile = "Dockerfile"
}
```

Por el contrario, si omites el prefijo `cwd://`, la ruta se resolvería de forma relativa al contexto de compilación.

## Especificar la definición de Bake que se va a utilizar

Al cargar un archivo de Bake desde un repositorio Git remoto, si el repositorio contiene más de un archivo de Bake, puedes especificar qué definición de Bake deseas utilizar mediante la bandera `--file` o `-f`:

```console
docker buildx bake -f bake.hcl "https://github.com/crazy-max/buildx.git#remote-with-local"
```

```text
...
#4 [2/2] RUN echo "hello world"
#4 0.270 hello world
#4 DONE 0.3s
```

## Combinar definiciones de Bake locales y remotas

También puedes combinar definiciones remotas con locales utilizando el prefijo `cwd://` con `-f`.

Dada la siguiente definición de Bake local en el directorio de trabajo actual:

```hcl
# local.hcl
target "default" {
  args = {
    HELLO = "foo"
  }
}
```

El siguiente ejemplo utiliza `-f` para especificar dos definiciones de Bake:

- `-f bake.hcl`: esta definición se carga de forma relativa a la URL de Git.
- `-f cwd://local.hcl`: esta definición se carga de forma relativa al directorio de trabajo actual desde donde se ejecuta el comando de Bake.

```console
docker buildx bake -f bake.hcl -f cwd://local.hcl "https://github.com/crazy-max/buildx.git#remote-with-local" --print
```

```json
{
  "target": {
    "default": {
      "context": "https://github.com/crazy-max/buildx.git#remote-with-local",
      "dockerfile": "Dockerfile",
      "args": {
        "HELLO": "foo"
      },
      "target": "build",
      "output": [
        {
          "type": "cacheonly"
        }
      ]
    }
  }
}
```

Un caso en el que se hace necesario combinar definiciones de Bake locales y remotas es cuando estás compilando con una definición de Bake remota en GitHub Actions y deseas utilizar la acción [metadata-action](https://github.com/docker/metadata-action) para generar etiquetas (tags), anotaciones o etiquetas descriptivas (labels). La acción de metadatos genera un archivo de Bake disponible en el contexto local de ejecución de Bake del ejecutor. Para usar tanto la definición remota como el archivo de Bake local de "solo metadatos", especifica ambos archivos y utiliza el prefijo `cwd://` para el archivo de Bake de metadatos:

```yml
- name: Build
  uses: docker/bake-action@v7
  with:
    files: |
      ./docker-bake.hcl
      cwd://${{ steps.meta.outputs.bake-file }}
    targets: build
```

## Definición remota en un repositorio privado

Si deseas utilizar una definición remota que reside en un repositorio privado, es posible que debas especificar credenciales para que Bake las use al obtener la definición.

Si puedes autenticarte en el repositorio privado utilizando el agente de SSH predeterminado `SSH_AUTH_SOCK`, entonces no necesitas especificar ningún parámetro de autenticación adicional para Bake. Bake utilizará automáticamente tu socket de agente predeterminado.

Para la autenticación utilizando un token HTTP o agentes SSH personalizados, utiliza las siguientes variables de entorno para configurar la estrategia de autenticación de Bake:

- [`BUILDX_BAKE_GIT_AUTH_TOKEN`](/build/building/variables/#buildx_bake_git_auth_token)
- [`BUILDX_BAKE_GIT_AUTH_HEADER`](/build/building/variables/#buildx_bake_git_auth_header)
- [`BUILDX_BAKE_GIT_SSH`](/build/building/variables/#buildx_bake_git_ssh)

