Pular para o conteúdo
Guides 7 min de leitura 953 visualizações

Configuração de proxy no GitHub Actions e CI/CD

Este guia detalha como configurar e gerenciar de forma eficaz as configurações de proxy nos seus pipelines de GitHub Actions e CI/CD usando o GProxy.

Configuração de proxy no GitHub Actions e CI/CD

A configuração de proxy no GitHub Actions e no CI/CD consiste em definir variáveis de ambiente de proxy padrão, como HTTP_PROXY, HTTPS_PROXY e NO_PROXY, dentro da definição do seu workflow, normalmente no nível do job ou do step. Isso permite que actions, scripts e ferramentas executados dentro do pipeline de CI/CD roteiem seu tráfego de rede através de um servidor proxy especificado.

As organizações costumam implantar servidores proxy para controlar o acesso de saída à rede, aplicar políticas de segurança, filtrar conteúdo e cachear recursos acessados com frequência. Para pipelines de CI/CD que operam nesses ambientes, configurar o proxy é essencial para que ferramentas de build, gerenciadores de dependências e scripts de teste consigam alcançar serviços externos, repositórios de pacotes ou APIs. Os runners do GitHub Actions, em especial os self-hosted, podem exigir configuração de proxy para acessar o próprio GitHub ou outros recursos da internet.

Definindo as variáveis de ambiente de proxy

O método mais comum e universalmente reconhecido para configurar um proxy em um ambiente baseado em Linux (que é o que os runners hospedados pelo GitHub usam principalmente) são as variáveis de ambiente.

  • HTTP_PROXY: especifica o servidor proxy para requisições HTTP.
  • HTTPS_PROXY: especifica o servidor proxy para requisições HTTPS.
  • NO_PROXY: uma lista separada por vírgulas de hostnames, domínios ou endereços IP que devem ignorar o proxy. Isso é crítico para acessar recursos internos diretamente.

O formato de HTTP_PROXY e HTTPS_PROXY normalmente é http://[user:password@]host:port.
Tanto a versão em maiúsculas (HTTP_PROXY) quanto a em minúsculas (http_proxy) dessas variáveis costumam ser respeitadas por diversas ferramentas; usar maiúsculas é a prática padrão para variáveis de ambiente.

Configuração de proxy no nível do workflow

Aplicar as configurações de proxy no nível do job garante que todos os steps daquele job herdem a configuração.

name: CI with Proxy
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: http://proxy.example.com:8080
      HTTPS_PROXY: http://proxy.example.com:8080
      NO_PROXY: localhost,127.0.0.1,.internal.company.com,github.com
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Node.js dependencies
        run: npm install

      - name: Download a file via curl
        run: curl -v https://api.example.com/data

      - name: Access internal service (bypasses proxy)
        run: curl -v http://internal-service.internal.company.com/status

Configuração de proxy no nível do step

Em cenários que exigem configurações de proxy diferentes para steps específicos, ou para sobrescrever as definições do job, as variáveis de ambiente podem ser definidas no nível do step.

name: CI with Specific Step Proxy
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    env: # Proxy padrão do job (se houver)
      HTTP_PROXY: http://default-proxy:8080
      HTTPS_PROXY: http://default-proxy:8080
      NO_PROXY: localhost,127.0.0.1
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Step using default proxy
        run: curl https://external-api.com/v1

      - name: Step using a different proxy
        env:
          HTTP_PROXY: http://special-proxy:3128
          HTTPS_PROXY: http://special-proxy:3128
          NO_PROXY: localhost,127.0.0.1,api.special-domain.com
        run: curl https://api.special-domain.com/v2

Autenticação de proxy com secrets

Se o seu proxy exigir autenticação, inclua o usuário e a senha diretamente na URL do proxy. Por segurança, armazene as credenciais como secrets do GitHub Actions e faça referência a elas no workflow.

Primeiro, crie os secrets do repositório (por exemplo, PROXY_USER, PROXY_PASS) nas configurações do seu repositório no GitHub.

name: Authenticated Proxy Workflow
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@proxy.example.com:8080
      HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@proxy.example.com:8080
      NO_PROXY: localhost,127.0.0.1,.internal.company.com
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Perform network operation
        run: npm install # ou curl, etc.

Ferramentas comuns e a interação com o proxy

Embora HTTP_PROXY e HTTPS_PROXY sejam amplamente respeitados, algumas ferramentas oferecem métodos próprios de configuração.

Comandos git

O git geralmente respeita HTTP_PROXY e HTTPS_PROXY em operações remotas. Para uma configuração explícita ou nos casos em que as variáveis de ambiente não bastam, é possível usar git config.

# Define o proxy para operações git via HTTP e HTTPS
git config --global http.proxy http://proxy.example.com:8080
git config --global https.proxy http://proxy.example.com:8080

# Configura um proxy específico para um remote em particular
git config http.https://github.com/.proxy http://github-proxy:8080

npm, yarn

Gerenciadores de pacotes do Node.js como npm e yarn respeitam as variáveis de ambiente HTTP_PROXY e HTTPS_PROXY. Eles também oferecem seus próprios comandos de configuração para definições persistentes.

# Usando npm config
npm config set proxy http://proxy.example.com:8080
npm config set https-proxy http://proxy.example.com:8080
npm config set no-proxy localhost,127.0.0.1,.internal.com

# Usando yarn config
yarn config set proxy http://proxy.example.com:8080
yarn config set httpsProxy http://proxy.example.com:8080
yarn config set no-proxy localhost,127.0.0.1,.internal.com

docker (build da imagem e runtime do contêiner)

As configurações de proxy no Docker exigem tratamento específico tanto no build da imagem quanto na execução do contêiner.

Proxy em tempo de build do Docker

Para comandos executados durante um docker build (por exemplo, RUN apk add, RUN apt-get update), as configurações de proxy devem ser passadas como build arguments.

Exemplo de Dockerfile:

FROM alpine:latest

# Define os build arguments das configurações de proxy
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY

# Define variáveis de ambiente para os comandos RUN seguintes
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY
ENV NO_PROXY=$NO_PROXY

# Exemplo: usar o proxy para instalar pacotes
RUN apk add --no-cache curl

# ... o restante do seu Dockerfile

Step do workflow do GitHub Actions:

- name: Build Docker image with proxy
  run: |
    docker build . \
      --build-arg HTTP_PROXY=${{ env.HTTP_PROXY }} \
      --build-arg HTTPS_PROXY=${{ env.HTTPS_PROXY }} \
      --build-arg NO_PROXY=${{ env.NO_PROXY }} \
      -t my-app:latest
Proxy em tempo de execução do contêiner Docker

Se o seu workflow executa um contêiner Docker (por exemplo, usando a chave container: ou docker run), as configurações de proxy devem ser passadas como variáveis de ambiente para o contêiner.

Usando a chave container::

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: my-custom-image:latest
      env:
        HTTP_PROXY: ${{ env.HTTP_PROXY }}
        HTTPS_PROXY: ${{ env.HTTPS_PROXY }}
        NO_PROXY: ${{ env.NO_PROXY }}
    steps:
      - name: Run command inside container
        run: curl https://external-api.com/data

Usando docker run em um step:

- name: Run Docker container with proxy
  run: |
    docker run \
      -e HTTP_PROXY=${{ env.HTTP_PROXY }} \
      -e HTTPS_PROXY=${{ env.HTTPS_PROXY }} \
      -e NO_PROXY=${{ env.NO_PROXY }} \
      my-app:latest /app/script.sh

Aplicações Java (Maven, Gradle)

Aplicações Java, incluindo ferramentas de build como Maven e Gradle, normalmente exigem que as configurações de proxy sejam passadas como propriedades de sistema do Java. Isso costuma ser feito pelas variáveis de ambiente MAVEN_OPTS ou _JAVA_OPTIONS.

# Para o Maven
export MAVEN_OPTS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts='localhost|127.0.0.1|*.internal.com'"

# Para o Gradle (também vale para outras ferramentas baseadas em JVM)
export JAVA_OPTS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts='localhost|127.0.0.1|*.internal.com'"

Como alternativa, o Maven pode ser configurado via ~/.m2/settings.xml, e o Gradle via gradle.properties no projeto ou no diretório home do usuário.

Solução de problemas de proxy

  • Verifique as variáveis de ambiente: use run: env | grep -i proxy em um step para confirmar que as variáveis de proxy estão corretamente definidas e visíveis para o shell do runner.
  • Confira o NO_PROXY: garanta que quaisquer hosts internos ou domínios do GitHub estejam corretamente listados em NO_PROXY, para evitar proxying desnecessário ou problemas de roteamento.
  • Logs do servidor proxy: se possível, verifique nos logs do servidor proxy as tentativas de conexão vindas do endereço IP do runner do GitHub Actions. Isso ajuda a determinar se a requisição está chegando ao proxy e por que ela pode estar sendo rejeitada (por exemplo, falha de autenticação, acesso negado).
  • Conectividade de rede: use curl -v --proxy <your-proxy-url> <target-url> dentro de um step do workflow para testar explicitamente a conectividade através do proxy até um endpoint externo conhecido.
  • Problemas de certificado SSL/TLS: se você usa um proxy HTTPS ou acessa sites HTTPS através de um proxy HTTP, e o proxy faz inspeção SSL, o runner pode encontrar erros de validação de certificado. Isso exige que o certificado da CA raiz do proxy seja adicionado ao trust store do runner. É uma configuração complexa, geralmente gerenciada em setups de runners self-hosted.

Resumo da configuração de proxy

Ferramenta/Contexto Principais métodos de configuração de proxy Observações
Comandos gerais de shell Variáveis de ambiente HTTP_PROXY, HTTPS_PROXY, NO_PROXY Padrão e amplamente respeitadas por ferramentas como curl, wget, apt, yum. O suporte a http_proxy sem distinção de maiúsculas é comum.
git Variáveis de ambiente HTTP_PROXY, HTTPS_PROXY; git config O git config grava uma configuração persistente, útil para comportamentos específicos do git ou quando as variáveis de ambiente não são aplicadas de forma consistente.
npm, yarn Variáveis de ambiente HTTP_PROXY, HTTPS_PROXY; npm config set As variáveis de ambiente costumam ser suficientes. Os comandos de configuração da própria ferramenta tornam as definições persistentes ou sobrescrevem as variáveis de ambiente.
docker build Flags --build-arg HTTP_PROXY no docker build; ARG/ENV no Dockerfile Exige a passagem explícita das configurações de proxy como build arguments para que fiquem disponíveis dentro do contexto de build do Docker. O ENV as disponibiliza para os comandos RUN seguintes.
docker run (runtime do contêiner) Flags -e HTTP_PROXY no docker run; env na definição container: do workflow Passa as variáveis de ambiente de proxy para o contêiner em execução. Aplica-se quando o próprio workflow executa um contêiner para o job ou o step.
Aplicações Java (Maven, Gradle) Variáveis de ambiente _JAVA_OPTIONS, MAVEN_OPTS com -Dhttp.proxyHost Aplicações Java precisam de propriedades de sistema específicas para configurar seu cliente HTTP. Elas podem ser definidas por variáveis de ambiente lidas pela JVM. Como alternativa, é possível usar arquivos de configuração da própria ferramenta.
Atualizado: 03.03.2026
Voltar à categoria

Leia também

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.