Esta versão do GitHub Enterprise foi descontinuada em 2021-09-23. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, melhorar a segurança e novos recursos, upgrade to the latest version of GitHub Enterprise. Para ajuda com a atualização, contact GitHub Enterprise support.

Suporte do arquivo Docker para GitHub Actions

Ao criar um "arquivo Docker" para uma ação do contêiner Docker, você deverá ter em mente como algumas instruções do Docker interagem com o GitHub Actions e com um arquivo de metadados da ação.

Observação: GitHub Actions estava disponível para GitHub Enterprise Server 2.22 como um beta limitado. O beta terminou. GitHub Actions está agora geralmente disponível em GitHub Enterprise Server 3.0 ou posterior. Para obter mais informações, consulte as observações sobre a versão GitHub Enterprise Server 3.0.


Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

Sobre as instruções do arquivo Docker

Um arquivo Docker contém instruções e argumentos que definem o conteúdo e o comportamento inicial de um contêiner Docker. Para obter mais informações sobre o suporte de instruções do Docker, consulte "Referência do arquivo Docker" na documentação do Docker.

Instruções e substituições do arquivo Docker

Algumas instruções do Docker interagem com o GitHub Actions e um arquivo de metadados pode substituir algumas instruções do Docker. Certifique-se de que você esteja familiarizado com a forma como o arquivo Docker interage com GitHub Actions para evitar comportamento inesperado.

USUÁRIO

As ações do Docker devem ser executadas pelo usuário-padrão do Docker (raiz). Não use a instrução do USUÁRIO no seu arquivo Docker, pois você não poderá acessar o GITHUB_WORKSPACE. Para obter mais informações, consulte "Usando variáveis de ambiente" e referência do USUÁRIO na documentação do Docker.

DE

A primeira instrução no arquivo Docker deve ser DE, que seleciona uma imagem-base para o Docker. Para obter mais informações, consulte referência DE na documentação do Docker.

Essas são algumas práticas recomendadas ao definir o argumento DE:

  • Recomendamos o uso de imagens oficiais do Docker. Por exemplo, python ou ruby.
  • Use uma tag da versão, se houver, preferencialmente com uma versão principal. Por exemplo, use nó:10 em vez de nó:latest.
  • Recomendamos o uso das imagens do Docker com base no sistema operacional Debian.

WORKDIR

GitHub Enterprise Server define o caminho do diretório de trabalho na variável do ambiente GITHUB_WORKSPACE. Recomendamos não usar a instrução WORKDIR no seu arquivo Docker. Antes de a ação ser executada, GitHub Enterprise Server irá montar o diretório GITHUB_WORKSPACE na parte superior de qualquer que tenha sido o local na imagem do Docker e definir GITHUB_WORKSPACE como o diretório de trabalho. Para obter mais informações, consulte "Usando variáveis do ambiente" e a referência do WORKDIR na documentação do Docker.

ENTRYPOINT

Se você definir o entrypoint em um arquivo de metadados de uma ação, ele irá substituir o ENTRYPOINT definido no arquivo Docker. Para obter mais informações, consulte "sintaxe dos metadados para GitHub Actions."

A instrução do ENTRYPOINT do Docker tem forma de shell e forma de exec. A documentação do ENTRYPOINT do docker recomenda o uso da forma exec da instrução do ENTRYPOINT. Para obter mais informações sobre as formas exec e shell, consulte a referência ENTRYPOINT na documentação do Docker.

Se você configurar o seu contêiner para usar a forma exec da instrução ENTRYPOINT, os args configurados no arquivo de metadados da ação não serão executados em um shell do comando. Se os args da ação contiverem uma variável do ambiente, esta não será substituída. Por exemplo, usar o formato exec a seguir não imprimirá o valor armazenado em $GITHUB_SHA. Em vez disso, imprimirá $GITHUB_SHA.

ENTRYPOINT ["echo $GITHUB_SHA"]

Se você desejar uma substituição de variável, use a forma shell ou execute um shell diretamente. Por exemplo, ao usar o formato exec a seguir, você poderá executar um shell para imprimir o valor armazenado na variável do ambiente GITHUB_SHA.

ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"]

Para fornecer os args definidos no arquivo de metadados da ação para um contêiner Dock que usa a forma exec no ENTRYPOINT, recomendamos criar um script do shell denominado entrypoint.sh que você pode acessar a partir da instrução ENTRYPOINT:

Exemplo arquivo Docker

# Container image that runs your code
FROM debian:9.5-slim

# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh

# Executes `entrypoint.sh` when the Docker container starts up
ENTRYPOINT ["/entrypoint.sh"]

Exemplo: arquivo entrypoint.sh

Ao usar o arquivo Docker acima, GitHub Enterprise Server, enviará os args configurados no arquivo de metadados da ação como argumentos para oentrypoint.sh. Adicione #!/bin/shshebang na parte superior do arquivo entrypoint.sh para usar explicitamente o shell conforme o POSIX do sistema.

#!/bin/sh

# `$*` expands the `args` supplied in an `array` individually
# or splits `args` in a string separated by whitespace.
sh -c "echo $*"

O seu código deve ser executável. Certifique-se de que o arquivo entrypoint.shtenha permissões de execução antes de usá-lo em um fluxo de trabalho. Você pode modificar as permissões a partir do seu terminal usando este comando:

chmod +x entrypoint.sh

Quando o script do shell de um ENTRYPOINT não for executável, você receberá uma mensagem de erro semelhante à mensagem a seguir:

Resposta de erro do daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown

CMD

Se você definir os args no arquivo de metadados da ação, os args irão substituir a instrução CMD especificada no arquivo Docker. Para obter mais informações, consulte "Sintaxe dos metadados para GitHub Actions}".

Se você usar CMD no seu arquivo Docker, siga essas diretrizes:

  1. Documente os argumentos necessários no README das ações e omita-os da instrução CMD.
  2. Use padrões que permitam o uso da ação sem especificação de args.
  3. Se a ação expõe uma bandeira --help ou algo parecido, use isso para fazer sua ação se auto-documentar.

Recursos compatíveis com o Linux

GitHub Actions suporta os recursos-padrão compatíveis com o Linux que são compatíveis com o Docker. Não é possível adicionar ou remover recursos. Para obter mais informações sobre os recursos-padrão compatíveis com o Linux e com o Docker, consulte "Privilégio do momento de execução e recursos do Linux" na documentação do Docker. Para aprender mais sobre os recursos do Linux, consulte "Visão geral dos recursos do Linux" nas páginas do manual do Linux.