Skip to main content

Executar trabalhos em um contêiner

Use um contêiner para executar as etapas de um trabalho.

Visão geral

Use jobs.<job_id>.container para criar um contêiner e executar as etapas de um trabalho que ainda não especificam um contêiner. Se você tiver etapas que usam ações de script e de contêiner, as ações de contêiner serão executadas como contêineres irmãos na mesma rede e com as mesmas montagens de volume.

Se você não definir um container, todas as etapas serão executadas diretamente no host especificado por runs-on, a menos que uma etapa se refira a uma ação configurada para ser executada em um contêiner.

Observação: o shell padrão para etapas run dentro de um contêiner é sh em vez de bash. Isso pode ser substituído por jobs.<job_id>.defaults.run ou por jobs.<job_id>.steps[*].shell.

Exemplo: Executar um trabalho dentro de um contêiner

YAML
name: CI
on:
  push:
    branches: [ main ]
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container:
      image: node:18
      env:
        NODE_ENV: development
      ports:
        - 80
      volumes:
        - my_docker_volume:/volume_mount
      options: --cpus 1
    steps:
      - name: Check for dockerenv file
        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)

Quando você especifica apenas uma imagem de contêiner, pode omitir a palavra-chave image.

jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container: node:18

Definindo a imagem do contêiner

Use jobs.<job_id>.container.image para definir a imagem do Docker a ser usada como o contêiner para executar a ação. O valor pode ser o nome da imagem do Docker Hub ou um nome de registro.

Definindo credenciais para o registro de um contêiner

Se o registro de contêiner da imagem exigir autenticação para efetuar pull da imagem, use jobs.<job_id>.container.credentials para definir um map do username e da password. As credenciais são os mesmos valores que você fornecerá ao comando docker login.

Exemplo: Definindo credenciais para o registro de um contêiner

container:
  image: ghcr.io/owner/image
  credentials:
     username: ${{ github.actor }}
     password: ${{ secrets.github_token }}

Usando variáveis de ambiente com um contêiner

Use jobs.<job_id>.container.env para definir um map das variáveis de ambiente no contêiner.

Expondo portas de rede em um contêiner

Use jobs.<job_id>.container.ports para definir uma array das portas a serem expostas no contêiner.

Montando volumes em um contêiner

Use jobs.<job_id>.container.volumes para definir uma array de volumes para uso do contêiner. É possível usar volumes para compartilhar dados entre serviços ou outras etapas em um trabalho. Você pode especificar volumes de nome Docker, volumes Docker anônimos ou vincular montagens no host.

Para especificar um volume, especifique o caminho de origem e destino:

<source>:<destinationPath>.

<source> é um nome de volume ou um caminho absoluto no computador host, e <destinationPath> é um caminho absoluto no contêiner.

Exemplo: Montando volumes em um contêiner

volumes:
  - my_docker_volume:/volume_mount
  - /data/my_data
  - /source/directory:/destination/directory

Definindo opções de recurso de contêiner

Use jobs.<job_id>.container.options para configurar opções adicionais de recurso de contêiner do Docker. Para obter uma lista de opções, confira "Opções de docker create".

Aviso: não há suporte para as opções --network e --entrypoint.