Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Criar uma ação de contêiner Docker

Este guia apresenta as etapas mínimas exigidas para criar uma ação de contêiner Docker.

GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub One. GitHub Actions is not available for private repositories owned by accounts using legacy per-repository plans. For more information, see "GitHub's products."

Neste artigo

Introdução

In this guide, you'll learn about the basic components needed to create and use a packaged Docker container action. To focus this guide on the components needed to package the action, the functionality of the action's code is minimal. The action prints "Hello World" in the logs or "Hello [who-to-greet]" if you provide a custom name.

Ao terminar esse projeto, você entenderá como criar sua própria ação de contêiner Docker e poderá testá-la em um fluxo de trabalho.

Self-hosted runners must use a Linux operating system and have Docker installed to run Docker container actions. For more information about the requirements of self-hosted runners, see "About self-hosted runners."

Pré-requisitos

You may find it helpful to have a basic understanding of GitHub Actions environment variables and the Docker container filesystem:

Antes de começar, você precisa criar um repositório GitHub.

  1. Crie um repositório novo no GitHub. Você pode escolher qualquer nome para o repositório ou usar "hello-world-docker-action", como nesse exemplo. Para obter mais informações, consulte "Criar um repositório novo".

  2. Clone o repositório para seu computador. Para obter mais informações, consulte "Clonar um repositório".

  3. No seu terminal, mude os diretórios para seu novo repositório.

    cd hello-world-docker-action

Criar um arquivo Docker

Em seu novo diretório hello-world-docker-action, crie um arquivo Dockerfile.

arquivo Docker

# Imagem de contêiner que executa seu código
FROM alpine:3.10

# Copia o arquivo de código do repositório de ação para o caminho do sistema de arquivos `/` do contêiner
COPY entrypoint.sh /entrypoint.sh

# Arquivo de código a ser executado quando o contêiner do docker é iniciado (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

Criar um arquivo de metadados de ação

Crie um novo arquivo action.yml no diretório hello-world-docker-action que você criou acima. Para obter mais informações, consulte "Sintaxe de metadados para o GitHub Actions".

action.yml

# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.who-to-greet }}

Esses metadados definem uma entrada who-to-greet e um parâmetro de saída time. Para introduzir as entradas no contêiner Docker, você deve declarar a entrada usando inputs (entradas) e introduzir a entrada na palavra-chave args.

O GitHub criará uma imagem a partir do seu Dockerfile e executará os comandos em um novo contêiner usando essa imagem.

Escrever o código da ação

Você pode escolher qualquer imagem Docker de base e, portanto, qualquer linguagem para sua ação. O exemplo de script de shell a seguir usa a variável de entrada who-to-greet para imprimir "Hello [who-to-greet]" no arquivo de log.

Na sequência, o script obtém a hora atual e a configura como uma variável de saída que pode ser usada pelas ações executadas posteriormente em um trabalho. In order for GitHub to recognize output variables, you must use a workflow command in a specific syntax: echo "::set-output name=<output name>::<value>". For more information, see "Workflow commands for GitHub Actions."

  1. Crie um novo arquivo entrypoint.sh no diretório hello-world-docker-action.

  2. Make sure to make your entrypoint.sh file executable:

    chmod +x entrypoint.sh
  3. Adicione o código a seguir ao arquivo entrypoint.sh.

    entrypoint.sh

    #!/bin/sh -l
    
    echo "Hello $1"
    time=$(date)
    echo "::set-output name=time::$time"

    Se entrypoint.sh for executado sem qualquer erro, o status da ação será definido como success. Você também pode definir explicitamente códigos de saída no código de ação para fornecer o status de uma ação. For more information, see "Setting exit codes for actions."

Criar um LEIAME

Para que as pessoas saibam como usar sua ação, você pode criar um arquivo LEIAME. Um arquivo LEIAME é útil quando você planeja compartilhar publicamente sua ação, mas também é uma ótima maneira de lembrá-lo ou sua equipe sobre como usar a ação.

No diretório hello-world-docker-action, crie um arquivo README.md que especifica as seguintes informações:

  • Descrição detalhada do que a ação faz;
  • Argumentos obrigatórios de entrada e saída;
  • Argumentos opcionais de entrada e saída;
  • Segredos usados pela ação;
  • Variáveis de ambiente usadas pela ação;
  • Um exemplo de uso da ação no fluxo de trabalho.

README.md

# Hello world docker action

Esta ação imprime "Hello World" ou "Hello" + o nome de uma pessoa a ser cumprimentada no log.

## Inputs

### `who-to-greet`

**Obrigatório** O nome da pessoa a quem cumprimentar. Padrão `"World"`.

## Outputs

### `time`

Horário que cumprimentamos você.

## Exemplo de uso

uses: actions/hello-world-docker-action@v1
with:
  who-to-greet: 'Mona the Octocat'

Commit, tag, and push your action to GitHub

A partir do seu terminal, faça commit dos arquivos action.yml, entrypoint.sh, Dockerfile e README.md.

It's best practice to also add a version tag for releases of your action. For more information on versioning your action, see "About actions."

git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags

Testar sua ação em um fluxo de trabalho

Agora você está pronto para testar sua ação em um fluxo de trabalho. Quando uma ação está em um repositório privado, a ação somente pode ser usada em fluxos de trabalho no mesmo repositório. Ações públicas podem ser usadas por fluxos de trabalho em qualquer repositório.

Exemplo usando uma ação pública

O código do fluxo de trabalho a seguir usa a ação hello world completa no repositório público actions/hello-world-docker-action. Copie o exemplo de código de fluxo de trabalho a seguir em um arquivo .github/workflows/main.yml, mas substitua actions/hello-world-docker-action pelo nome de seu repositório e ação. Você também pode substituir a entrada who-to-greet pelo seu nome.

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    - name: Hello world action step
      id: hello
      uses: actions/hello-world-docker-action@v1
      with:
        who-to-greet: 'Mona the Octocat'
    # Use the output from the `hello` step
    - name: Get the output time
      run: echo "The time was ${{ steps.hello.outputs.time }}"

Exemplo usando uma ação privada

Copie o seguinte exemplo de código de fluxo de trabalho em um arquivo .github/workflows/main.yml no repositório da ação. Você também pode substituir a entrada who-to-greet pelo seu nome.

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      # To use this repository's private action, you must check out the repository
      - name: Checkout
        uses: actions/checkout@v2
      - name: Hello world action step
        uses: ./ # Uses an action in the root directory
        id: hello
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

From your repository, click the Actions tab, and select the latest workflow run. Você deverá ver "Hello Mona the Octocat" ou o nome que você usou como entrada em who-to-greet e o horário impresso no log.

Uma captura de tela de sua ação em um fluxo de trabalho

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato