5

我第一次为 SonarCloud 构建了一个 X 数量的模块的 maven 项目。该sonar.projectKey值需要是唯一的,因此我将其设置为${project.groupId}:{$project.artifactId},以便每个模块生成它。之后,运行 CI,这是响应消息:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar (default-cli) on project ${project.groupId}:${project.artifactId}: Could not find a default branch to fall back on. -> [Help 1]

我怀疑这是因为我没有在我的“组织”上使用该密钥创建一个项目,但问题是我有多个模块。事实上,我有 X 个。我还应该为每个要扫描的模块创建一个项目吗?sonarqube 插件不应该处理吗?

4

2 回答 2

10

对于那些努力让 sonarcloud.io 与 github 操作一起为通过 maven 多模块项目管理的 java 应用程序工作的人。

我创建了一个 Spring Maven 多模块项目,并希望能够在特定的 github 操作期间使用来自 sonarcloud.io 的声纳。

Github 项目:https ://github.com/MagicSoup/SpringJOOQ

声纳云项目:https ://sonarcloud.io/dashboard?id=MagicSoup_SpringJOOQ

你可以在这里找到我的 Github 操作: https ://github.com/MagicSoup/SpringJOOQ/blob/master/.github/workflows/maven-master.yml

sonar:
    name: Test - SonarCloud Scan
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: SonarCloud Scan
        run: mvn -B clean verify -Psonar -Dsonar.login=${{ secrets.SONAR_TOKEN }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

在我的根 pom.xml 中,声纳配置文件: https ://github.com/MagicSoup/SpringJOOQ/blob/master/pom.xml

 <profile>
            <id>sonar</id>
            <properties>
                <sonar.host.url>https://sonarcloud.io</sonar.host.url>
                <sonar.organization>magicsoup</sonar.organization>
                <sonar.projectKey>MagicSoup_SpringJOOQ</sonar.projectKey>
                <sonar.moduleKey>${project.groupId}:${project.artifactId}</sonar.moduleKey>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.sonarsource.scanner.maven</groupId>
                        <artifactId>sonar-maven-plugin</artifactId>
                        <version>${sonar.version}</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sonar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

这里的重要信息是以下键:

  • <sonar.projectKey>MagicSoup_SpringJOOQ</sonar.projectKey>
  • <sonar.moduleKey>${project.groupId}:${project.artifactId}</sonar.moduleKey>

如果没有 le sonar.moduleKey 定义,我在多个具有相同密钥的项目上遇到问题。

在使用分析 github 存储库在 sonarcloud.io https://sonarcloud.io/projects/create中创建项目期间,将显示一条消息,您应该使用另一种方式而不是自动方式,因为它不适用于 java应用。然后你会选择一个提议的“maven,gradle,...”,你会发现所有需要添加到你的 maven pom.xml 中的强制属性。包括您应该在 github 中导出为秘密令牌的 sonar.login)。

您可以在此处创建您的秘密令牌:https ://github.com/User/Project/settings/secrets 您需要进行身份验证并相应地更改用户和项目。

关于这个主题的一篇很棒的文章:https ://medium.com/faun/continuous-integration-of-java-project-with-github-actions-7a8a0e8246ef

于 2020-07-03T14:29:43.827 回答
2

似乎我的问题与此无关,但声纳云中的 gitlab 导入器创建了一个项目,其密钥与 gitlab 上的项目名称相匹配。相反,您应该手动创建一个项目并{groupId}:{artifactId}在声纳云中为其指定名称,以防止这种混淆。

出现错误消息是因为该键下没有项目,因此声纳云没有默认值。

于 2020-07-03T09:13:39.737 回答