【问题标题】:SonarQube Analysis on Pull Request and not during build pipelineSonarQube 分析拉取请求而不是在构建管道期间
【发布时间】:2022-01-28 10:18:04
【问题描述】:

请原谅我的无知,我还是个新手。

目标:SonarQube 分析并发布 PR 创建结果。

我现在拥有的:

带有内置存储库的 Azure Devops。 本地安装 git 以推/拉 Redgate SQL Source Control(我们的代码都是SQL)

SonarQube 分析和发布结果在我的构建管道中工作,我什至内置了一个构建断路器并且一切正常。

我面临并希望更改的问题是管道仅在 PR 完成并且合并到我的默认分支后触发。我希望在创建 PR(而不是完成)时进行分析,因为接下来的步骤是代码审查。结果是,如果 SQ 分析失败,则可以避免代码审查步骤,并将所需的修复返回给开发人员。

在构建阶段再次检查(检查整个项目的代码)之前完成分析(在功能分支上)将是一个巨大的优势。

提前致谢

trigger:
  - dev
jobs:
  - job: Rcs_Dev
    timeoutInMinutes: 0
    pool: Rcs Build
    cancelTimeoutInMinutes: 1
    steps:
      - checkout: self
        clean: true
      - task: SonarQubePrepare@4
        inputs:
          SonarQube: 'SonarQubeServiceConnection'
          scannerMode: 'CLI'
          configMode: 'manual'
          cliProjectKey: 'Rcs_Rcs'
          cliProjectName: 'Rcs'
          cliSources: '.'
      - task: SonarQubeAnalyze@4
        displayName: "Run Code Analysis"
        condition: and(succeeded(), or(eq(variables['Build.SourceBranchName'], 'dev'), contains(variables['Build.Reason'], 'PullRequest')))
      - task: SonarQubePublish@4
        inputs:
          pollingTimeoutSec: '300'
      - task: sonar-buildbreaker@8
        inputs:
          SonarQube: 'SonarQubeServiceConnection'
      - task: RedgateSqlChangeAutomationBuild@4
        inputs:
          operation: Build
          dbFolder: RootFolder
          packageName: Rcs
          tempServerTypeBuild: localDB
          buildAdvanced: true
          compareOptionsBuild: 'NoTransactions, IgnoreFileGroups'
          dataCompareOptionsBuild: 'DisableAndReenableDMLTriggers, SkipFkChecks'
          transactionIsolationLevelBuild: readCommitted
          queryBatchTimeoutBuild: '0'
          nugetPackageVersionSelector: Specific
          nugetPackageVersion: '1.0'
          nugetPackageVersionUseBuildId: true
          requiredVersionOfDlma: latestInstalled

【问题讨论】:

    标签: azure-devops yaml sonarqube pull-request redgate


    【解决方案1】:

    如果您希望在 PR 上触发具体的 Pipeline,那么您有两种选择:

    您始终使用以下方式触发管道(包括所有分支和 PR):

    trigger:
      branches:
        include:
        - '*' 
    

    或者,如果您想针对dev 触发 PR(考虑到您的描述,这似乎是最可能的情况),那么您应该使用 trigger 而不是:

    pr:
    - dev
    

    当然,如果您不想编写两次相同的管道,您可以使用模板功能,只定义整个管道一次,然后在每个 YAML 上扩展它,一个用于使用分支触发器的正常构建,一个用于PRs 触发器。

    1. 关于 PR 触发器的文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github?view=azure-devops&tabs=yaml#pr-triggers

    2. 关于模板的文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2023-03-02
      相关资源
      最近更新 更多