Tilpas arbejdsprocessen for kodescanning med CodeQL – del 1

Fuldført

Arbejdsprocesser til kodescanning, der bruger CodeQL, har forskellige konfigurationsindstillinger, som du kan justere, så de passer bedre til organisationens behov.

Når du bruger CodeQL til at scanne kode, genererer CodeQL-analyseprogrammet en database ud fra koden og kører forespørgsler på den. CodeQL-analysen bruger et standardsæt af forespørgsler, men du kan angive flere forespørgsler, der skal køres ud over standardforespørgslerne.

Du kan køre ekstra forespørgsler, hvis de er en del af en CodeQL-pakke (beta), der er publiceret til GitHub Container-registreringsdatabasen, eller en QL-pakke, der er gemt i et lager.

Der er to muligheder for at angive, hvilke forespørgsler du vil køre med CodeQL-kodescanning:

  • Brug af arbejdsprocessen for kodescanning
  • Brug af en brugerdefineret konfigurationsfil

I dette undermodul lærer du, hvordan du redigerer en arbejdsprocesfil for at referere til yderligere forespørgsler, hvordan du bruger forespørgsler fra forespørgselspakker, og hvordan du kombinerer forespørgsler fra en arbejdsprocesfil og en brugerdefineret konfigurationsfil.

Angiv yderligere forespørgsler i en arbejdsprocesfil

De indstillinger, der er tilgængelige for at angive de yderligere forespørgsler, du vil køre, er:

  • packs at installere en eller flere CodeQL-forespørgselspakker (beta) og køre standardforespørgselspakken eller -forespørgslerne for disse pakker.
  • queries til at angive en enkelt .ql fil, en mappe, der indeholder flere .ql filer, en .qls definitionsfil til forespørgselspakken eller en hvilken som helst kombination.

Du kan bruge både pakker og forespørgsler i den samme arbejdsproces.

Vi anbefaler ikke, at du refererer til forespørgselspakker direkte fra det github/codeql lager, f.eks. github/codeql/cpp/ql/src@main. Sådanne forespørgsler kan ikke kompileres med den samme version af CodeQL som brugt til dine andre forespørgsler, hvilket kan føre til fejl under analysen.

Brug CodeQL-forespørgselspakker

Seddel

Funktionerne til administration af CodeQL-pakker, herunder CodeQL-pakker, er i øjeblikket i betaversion og kan ændres.

Hvis du vil tilføje en eller flere CodeQL-forespørgselspakker (beta), skal du tilføje en with: packs: post i afsnittet uses: github/codeql-action/init@v1 i arbejdsprocessen. I pakker kan du angive en eller flere pakker, der skal bruges, og eventuelt hvilken version der skal downloades. Hvis du ikke angiver en version, downloades den nyeste version. Hvis du vil bruge pakker, der ikke er offentligt tilgængelige, skal du angive miljøvariablen GITHUB_TOKEN til en hemmelighed, der har adgang til pakkerne.

I følgende eksempel er omfanget den organisation eller personlige konto, der publicerede pakken. Når arbejdsprocessen kører, downloades de tre CodeQL-forespørgselspakker fra GitHub og standardforespørgslerne eller forespørgselspakken for hver pakkekørsel. I følgende eksempel downloades hver af pakkerne på listen baseret på deres specifikationer:

  • Den nyeste version af pack1 downloades, og alle standardforespørgsler køres.
  • Version 1.2.3 af pack2 downloades, og alle standardforespørgsler køres.
  • Den nyeste version af pack3 , der er kompatibel med version 3.2.1, downloades, og alle forespørgsler køres.
  • Version 4.5.6 af pack4 downloades, og kun de forespørgsler, der findes i sti/til/forespørgsler, køres.
- uses: github/codeql-action/init@v3
  with:
    # Comma-separated list of packs to download
    packs: scope/pack1,scope/pack2@1.2.3,scope/pack3@~3.2.1,scope/pack4@4.5.6:path/to/queries

Seddel

For arbejdsprocesser, der genererer CodeQL-databaser til flere sprog, skal du i stedet angive CodeQL-forespørgselspakkerne i en konfigurationsfil.

Brug forespørgsler i QL-pakker

Hvis du vil tilføje en eller flere forespørgsler, skal du tilføje en with: queries: post i afsnittet uses: github/codeql-action/init@v3 i arbejdsprocessen. Hvis forespørgslerne er i et privat lager, skal du bruge parameteren external-repository-token til at angive et token, der har adgang til at tjekke det private lager ud.

- uses: github/codeql-action/init@v3
  with:
    # Comma-separated list of queries / packs / suites to run.
    # This may include paths or a built in suite, for example:
    # security-extended or security-and-quality.
    queries: security-extended
    # Optional. Provide a token to access queries stored in private repositories.
    external-repository-token: ${{ secrets.ACCESS_TOKEN }}

Du kan også angive forespørgselspakker i værdien af queries. Forespørgselspakker er samlinger af forespørgsler, der normalt er grupperet efter formål eller sprog.

Følgende forespørgselspakker er indbygget i CodeQL-kodescanning og er tilgængelige til brug:

Forespørgselspakke Beskrivelse
security-extended Forespørgsler fra standardpakken plus forespørgsler med lavere alvorsgrad og præcision
security-and-quality Forespørgsler fra security-extendedplus forespørgsler om vedligeholdelse og pålidelighed

Hver af disse forespørgselspakker indeholder et andet undersæt af de forespørgsler, der er inkluderet i den indbyggede CodeQL-forespørgselspakke for det pågældende sprog. Forespørgselspakkerne genereres automatisk ved hjælp af metadataene for hver forespørgsel.

Når du angiver en forespørgselspakke, kører CodeQL-analyseprogrammet de forespørgsler, der er indeholdt i pakken, for dig ud over standardsættet af forespørgsler.

Kombiner forespørgsler fra en arbejdsprocesfil og en brugerdefineret konfigurationsfil

Hvis du også bruger en konfigurationsfil til brugerdefinerede indstillinger, bruges eventuelle ekstra pakker eller forespørgsler, der er angivet i arbejdsprocessen, i stedet for dem, der er angivet i konfigurationsfilen. Hvis du vil køre det kombinerede sæt ekstra pakker eller forespørgsler, skal du foranfikse værdien af packs eller queries i arbejdsprocessen med symbolet +.

I følgende eksempel sikrer symbolet +, at de angivne ekstra pakker og forespørgsler bruges sammen med de værdier, der er angivet i den konfigurationsfil, der refereres til:

- uses: github/codeql-action/init@v3
  with:
    config-file: ./.github/codeql/codeql-config.yml
    queries: +security-and-quality,octo-org/python-qlpack/show_ifs.ql@main
    packs: +scope/pack1,scope/pack2@1.2.3,scope/pack3@4.5.6:path/to/queries