Skip to main content
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.

Esta versão do GitHub Enterprise foi descontinuada em 2022-06-03. 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.

Solucionar problemas no fluxo de trabalho do CodeQL

Se você estiver tendo problemas com Varredura de código, você usar estas dicas para resolver problemas.

Varredura de código está disponível para repositórios de organizações onde Segurança Avançada GitHub está habilitado. Para obter mais informações, consulte "Sobre Segurança Avançada GitHub".

Observação: Este artigo descreve as funcionalidades disponíveis com a versão da ação CodeQL e o pacote da CLI do CodeQL associado incluído na versão inicial desta versão de GitHub Enterprise Server. Se a sua empresa usar uma versão mais recente da ação do CodeQL, consulte o artigo de GitHub Enterprise Cloud para obter informações sobre as funcionalidades mais recentes. Para obter informações sobre como usar a versão mais recente, consulte "Configurando a digitalização de código para o seu dispositivo".

Produzir registros detalhados para depuração

Para produzir a saída de log mais detalhada, você pode habilitar o log de depuração da etapa. Para obter mais informações, consulte "Habilitar o registro de depuração".

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 autobuild, consulte "Configurar o fluxo de trabalho de CodeQL para linguagens compiladas."

  • Se seu fluxo de trabalho não especificar explicitamente linguagens para analisar, CodeQL irá detectar implicitamente as linguagens compiladas na sua base de código. Nesta configuração, das linguagens compiladas de C/C++, C#, e Java, CodeQL analisa apenas a linguagem com mais arquivos-fonte. Edite o fluxo de trabalho e adicione uma matriz especificando as linaguagens que você deseja analisar. O fluxo de trabalho de análise do CodeQL padrão usa essa matriz.

    Os seguintes extratos de um fluxo de trabalho mostram como usar uma matriz dentro da estratégia de trabalho para especificar linguagens e, em seguida, fazer referência a cada linguagem dentro da etapa "Inicializar CodeQL:

    jobs:
      analyze:
        ...
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp', 'cpp', 'javascript']
    
        steps:
        ...
          - name: Initialize CodeQL
            uses: github/codeql-action/init@v1
            with:
              languages: ${{ matrix.language }}
    

    Para obter mais informações sobre a edição do fluxo de trabalho, consulte "Configurar a varredura de código".

Nenhum código encontrado durante a criação

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

  1. O repositório pode não conter o código-fonte escrito em linguagens compatíveis por CodeQL. Verifique a lista de linguagens compatíveis e, se for esse o caso, remova o fluxo de trabalho de CodeQL. Para obter mais informações, consulte "Sobre digitalização de código com o CodeQL".

  2. 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 você deseja analisar atualizando a lista de linguagens na matriz de linguagem`. Por exemplo, a configuração a seguir analisará somente Go, e JavaScript.

      strategy:
        fail-fast: false
        matrix:
          # Override automatic language detection by changing the list below.
          # As opções compatíveis estão listadas em um comentário no fluxo de trabalho padrão.
          language: ['go', 'javascript']
    `

    Para obter mais informações, consulte a extração de fluxo de trabalho em "Criação automática para falhas de linguagem compilada" acima.

  3. 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 o fluxo de trabalho do CodeQL para linguagens compiladas".

  4. 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.

  5. 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.

  6. 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:

    • Executar seu processo de criação em um contêiner separado para CodeQL. Para obter mais informações, consulte "Executar a varredura de código do CodeQL em um contêiner".
    • Criar usando um sistema de compilação distribuído externo � s Ações GitHub, usando um processo de daemon.
    • CodeQL não está ciente do compilador específico que você está usando.

    Para projetos de .NET Framework e para projetos C# que usam dotnet build ou msbuild, você deverá especificar /p:UseSharedCompilation=false na etapa de executar do seu fluxo de trabalho, ao criar o seu código.

    Por exemplo, a seguinte configuração para C# irá passar o sinalizador durante a primeira etapa de criação.

    - run: |
        dotnet build /p:UseSharedCompilation=false
    

    Se você encontrar outro problema com seu compilador específico ou configuração, entre em contato com your site administrator.

Para obter mais informações sobre a especificação de etapas de criação, consulte "Configurar o fluxo de trabalho do CodeQL 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. Para obter mais informações, consulte "Configurar o fluxo de trabalho do CodeQL para linguagens compiladas".

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

Se você usar executores auto-hospedados para executar a análise do CodeQL, você poderá aumentar a memória ou o número de núcleos nesses executores.

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

O padrão Fluxo de trabalho de análise do CodeQL usa uma matriz de linguagens, o que faz com que a análise de cada linguagem seja executada em paralelo. Se você especificou as linguagens que deseja analisar diretamente na etapa "Inicializar CodeQL", a análise de cada linguagem acontecerá sequencialmente. Para acelerar a análise de várias linguagens, modifique o seu fluxo de trabalho para usar uma matriz. Para obter mais informações, consulte a extração de fluxo de trabalho em "Criação automática para falhas de linguagem compilada" acima.

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 como Go, JavaScript, Python e TypeScript, que CodeQL analisa sem compilar o código-fonte, você pode especificar as 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 "[Eventos](/actions/learn-github-actions/introduction-to-github-actions#events)".

Verifique qual conjunto de consultas que o fluxo de trabalho executa

Por padrão, existem três principais conjuntos de consultas disponíveis para cada linguagem. Se você otimizar a compilação do banco de dados CodeQL mesmo assim o processo continuar sendo muito longo, você poderá reduzir o número de consultas que você executa. O conjunto de consulta padrão é executado automaticamente. Ele contém as consultas de segurança mais rápidas com as taxas mais baixas de resultados falso-positivos.

Você pode executar consultas adicionais ou conjuntos de consulta além das consultas padrão. Verifique se o fluxo de trabalho define um conjunto de consultas adicional ou consultas adicionais a serem executadas usando o elemento consultas. Você pode experimentar desabilitar o conjunto de consultas adicionais ou consultas. Para obter mais informações, consulte "Configurando Varredura de código."

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 your site administrator.

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

Em projetos muito grandes, CodeQL pode ficar sem disco ou memória no executor. Se você encontrar esse problema, tente aumentar a memória no executor.

Erro: "não é um arquivo .ql, arquivo, não é um arquivo .qls, um diretório ou uma especificação de consulta de pacote"

Você verá este erro se o CodeQL não conseguir encontrar a consulta nomeada, conjunto de consultas ou pacote de consultas no local solicitado no fluxo de trabalho. Há duas razões comuns para este erro.

  • Há um erro de digitação no fluxo de trabalho.
  • Um recurso que o fluxo de trabalho se refere por caminho foi renomeado, excluído ou transferido para um novo local.

Depois de verificar a localização do recurso, você pode atualizar o fluxo de trabalho para especificar a localização correta. Se você executar consultas adicionais em análise do Go, é possível que você tenha sido afetado pela deslocalização dos arquivos de origem. Para obter mais informações, consulte Anúncio de realocação: github/codeql-go transferindo-se para github/codeql no repositório github/codeql-go.

Aviso: "git checkout HEAD^2 is no longer necessary"

Se você estiver usando um fluxo de trabalho antigo de CodeQL, você poderá receber o aviso a seguir na saída "Inicializar CodeQL" da ação:

Aviso: 1 issue was detected with this workflow: git checkout HEAD^2 is no longer 
necessary. Please remove this step as Code Scanning recommends analyzing the merge 
commit for best results.

Corrija isto removendo as seguintes linhas do fluxo de trabalho CodeQL. Essas linhas foram incluídas na seção etapas do trabalho Analyze nas versões iniciais do fluxo de trabalho de CodeQL.

        with:
          # We must fetch at least the immediate parents so that if this is
          # a pull request then we can checkout the head.
          fetch-depth: 2

      # If this run was triggered by a pull request event, then checkout
      # the head of the pull request instead of the merge commit.
      - run: git checkout HEAD^2
        if: ${{ github.event_name == 'pull_request' }}

A seção revisada de etapas do fluxo de trabalho será parecida com esta:

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

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

      ...

Para obter mais informações sobre a edição do arquivo de fluxo de trabalho CodeQL, consulte "Configurar Varredura de código".