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.

Solucionar problemas da varredura de código

Você pode ver dicas para resolver problemas comuns com o Varredura de código.

Neste artigo

Nota: Varredura de código está atualmente em versão beta e sujeito a alterações. Para solicitar acesso ao beta, join the waitlist.

Ocorreu uma falha durante a criação automática para uma linguagem compilada

Se ocorrer uma falha na uma criação automática de código para uma linguagem compilada dentro de seu projeto, tente as seguintes etapas para a solução de problemas.

  • Remova a etapa de autobuild do seu fluxo de trabalho de Varredura de código e adicione etapas de criação específicas. Para obter informações sobre a edição do fluxo de trabalho, consulte "Configurar Varredura de código". Para obter mais informações sobre a substituição da etapa de autobuild, consulte "Configurar Varredura de código para linguagens compiladas."
  • Se o repositório para o seu projeto contiver um código em um idioma específico que não crie , desative a detecção automática de idioma no seu fluxo de trabalho de Varredura de código e especifique apenas as inguagens que deseja construir. Para obter mais informações, consulte "Configurar Varredura de código".

Nenhum código encontrado durante a criação

Se ocorrer uma falha no seu fluxo de trabalho Nenhum código fonte foi visto durante a criação ou O processo'/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' falhou com o código de saída 32, isto indica que CodeQL não conseguiu de rastrear o seu código. Há várias explicações para essa falha:

  1. A detecção automática da linguagem identificou uma linguagem compatível, mas não há código analisável dessa linguagem no repositório. Um exemplo típico é quando nosso serviço de detecção de linguagem encontra um arquivo associado a uma determinada linguagem de programação, como um arquivo .h, or .gyp, mas nenhum código executável correspondente está presente no repositório. Para resolver o problema, você pode definir manualmente as linguagens que deseja analisar, atualizando a etapa init para especificar as linguagens compatíveis presentes no seu repositório. Por exemplo, a configuração a seguir analisará somente Go, e JavaScript.

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
       languages: go, javascript # Other options are csharp, python, cpp, java
    
  2. O seu fluxo de trabalho de Varredura de código está analisando uma linguagem compilada (C, C++, C#, ou Java), mas o código não foi compilado. Por padrão, o fluxo de trabalho da análise do CodeQL contém uma etapa autobuild. No entanto, esta etapa representa um melhor processo de esforço, e pode não ter sucesso na criação do seu código, dependendo do seu ambiente de criação específico. Também pode ocorrer uma falha na criação se você removeu a etapa de autobuild e não incluiu as etapas de criação manualmente. Para obter mais informações sobre a especificação de etapas de criação , consulte "Configurar Varredura de código para linguagens compiladas".

  3. O seu fluxo de trabalho está analisando uma linguagem compilada (C, C++, C#, ou Java), mas partes de sua compilação são armazenadas em cache para melhorar o desempenho (é mais provável que ocorra com sistemas de criação como o Gradle ou Bazel). Uma vez que o CodeQL observa a atividade do compilador para entender os fluxos de dados em um repositório, CodeQL exige uma compilação completa para realizar a análise.

  4. O seu fluxo de trabalho está analisando uma linguagem compilada (C, C++, C#, ou Java), mas a compilação não ocorre entre as etapas init e analisar no fluxo de trabalho. O CodeQL exige que a sua compilação aconteça entre essas duas etapas para observar a atividade do compilador e realizar a análise.

  5. Seu código compilado (em C, C++, C#, ou Java) foi compilado com sucesso, mas o CodeQL não conseguiu detectar as chamadas do compilador. As causas mais comuns são certas opções de configuração como executar o processo de criação em um contêiner, se você estiver fazendo a criação usando um sistema de compilação distribuída externo ao GitHub Actions, usando um processo do daemon, ou se CodeQL não estiver ciente do compilador específico que você estiver usando.

    1. Para projetos de C# usando dotnet build ou msbuild qual abordam .NET Core 2, você deverá especificar /p:UseSharedCompilation=false na sua etapa de execução do fluxo de trabalho ao criar o seu código. O sinalizador UseSharedCompilation não é necessário para o .NET Core 3.0 ou versão superior.

      Por exemplo, a configuração a seguir irá passar o sinalizador durante a primeira etapa de criação.

      - run: |
          dotnet build /p:UseSharedCompilation=false
      
    2. Se você encontrar outro problema com seu compilador específico ou configuração, entre em contato com Suporte do GitHub or Suporte do GitHub Premium.

Para obter mais informações sobre a especificação de etapas de criação, consulte "Configurar varredura de código para linguagens compiladas".

Partes do meu repositório não foram analisadas usando build automático

O recurso de CodeQL autobuild usa heurística para criar o código em um repositório. No entanto, às vezes, essa abordagem resulta em uma análise incompleta de um repositório. Por exemplo, quando uma compilação múltipla de build.sh existe em um único repositório, é possível que a análise não seja concluída, já que a etapa autobuild executará apenas um dos comandos. A solução é substituir a etapa autobuild pelas etapas de criação que criam todo o código-fonte que você deseja analisar. Como alternativa, se mais de uma linguagem compilada estiver presente no seu repositório e você quiser que o Varredura de código analise todas essas linguagens compiladas, você poderá usar uma matriz de criação no seu fluxo de trabalho. Para obter mais informações, consulte "Configurar uma matriz de criação" e "Configurar varredura de código para linguagens compiladas".

Error: "Erro do servidor"

Se a execução de um fluxo de trabalho para Varredura de código falhar devido a um erro no servidor, tente executar o fluxo de trabalho novamente. Se o problema persistir, entre em contato com Suporte do GitHub or Suporte do GitHub Premium.

Erro: "Fora do disco" ou "Sem memória"

Em projetos muito grandes, CodeQL pode ficar ficar sem disco ou sem memória no executor do GitHub Actions hospedado. Se você encontrar esse problema, entre em contato com Suporte do GitHub or Suporte do GitHub Premium para que possamos averiguar o problema.

A criação demora muito tempo

Se a sua criação com a análise de CodeQL demorar muito para ser executada, existem várias abordagens que você pode tentar para reduzir o tempo de criação.

Usar criações da matriz para paralelizar a análise

Por padrão, o CodeQL executa a análise de cada linguagem sequencialmente, o que pode impactar o desempenho, especialmente para repositórios com mais de uma linguagem. Você pode acelerar a análise usando uma matriz de criação que divide a análise por linguagem. Para obter mais informações, consulte "Configurar uma matriz de criação".

Por exemplo, o fluxo de trabalho abaixo será executado com um trabalho para análise de JavaScript e outro para análise de Go.


name: "Code Scanning - Action"

on:
  pull_request:
    branches: [master]
  push:
    branches: [master]

jobs:
  CodeQL-Build:

    strategy:
      fail-fast: false
      matrix:
        language: [ 'go', 'javascript']

    # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: $

    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
    # If this step fails, then you should remove it and run the build manually (see below).
    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

Reduz a quantidade de código em análise em um único fluxo de trabalho

O tempo de análise é tipicamente proporcional à quantidade de código em análise. Você pode reduzir o tempo de análise reduzindo a quantidade de código em análise de uma vez, por exemplo, excluindo o código de teste, ou dividindo a análise em vários fluxos de trabalho que analisam apenas um subconjunto do seu código por vez.

Para linguagens compiladas como Java, C, C++ e C#, o CodeQL analisa todo o código construído durante a execução do fluxo de trabalho. Para limitar a quantidade de código em análise, crie apenas o código que você deseja analisar especificando suas próprias etapas de criação em um bloco Executar. Você pode combinar a especificação das suas próprias etapas de criação ao usar os filtros caminhos ou paths-ignore nos eventos pull_request e push para garantir que o seu fluxo de trabalho só será executado quando o código específico for alterado. Para obter mais informações, consulte "Sintaxe de fluxo de trabalho para o GitHub Actions".

Para linguagens interpretadas como Go, JavaScript, Python e TypeScript, que CodeQL analisa sem uma criação específica, você pode especificar opções de configuração adicionais para limitar a quantidade de código a ser analisado. Para obter mais informações, consulte "Especificar diretórios a serem varridos".

Se você dividir sua análise em vários fluxos de trabalho, conforme descrito acima, ainda assim recomendamos que você tenha pelo menos um fluxo de trabalho que seja executado em um agendamento que analise todo o código no seu repositório. Já que o CodeQL analisa os fluxos de dados entre os componentes, alguns comportamentos de segurança complexos só podem ser detectados em uma criação completa.

Executar somente durante um evento de agendamento`

Se sua análise ainda é muito lenta para ser executada durante eventos push` ou `pull_request`, você poderá acionar apenas a análise no evento `agendamento`. Para obter mais informações, consulte "[Acionar um fluxo de trabalho com eventos](/actions/configuring-and-managing-workflows/configuring-a-workflow#triggering-a-workflow-with-events)".

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato