Comment faire pour que Sonarcloud tourne sur les demandes de pull de forks avec Travis, Maven & github

en regardant dans ma question récente echec Sonarcloud avec Travis, Maven & github j'ai réalisé que je posais la mauvaise question. J'essayais d'aborder un symptôme plutôt que le problème sous-jacent.

un projet sur lequel je travaille ( eclipse / Scan) utilise Github comme dépôt et Travis avec Sonarcloud pour l'intégration continue et l'analyse de code.

alors que l'analyse du Sonarcloud fonctionne très bien sur les demandes de pull internes (pull requêtes des branches poussées directement vers eclipse / Scan) cela ne fonctionne pas lorsque Travis exécute des requêtes de traction externes (celles des repos fourchés).

le problème sous-jacent est que la façon dont nous exécutons actuellement sonarcloud repose sur des variables d'environnement qui ne sont pas peuplées pour des demandes de pull externes pour des raisons de sécurité:

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions

nous avons notre dépôt configuré pour ne pas se soucier de savoir si Sonarcloud est lancé, mais cela signifie que nous fusionnons souvent dans des changements qui brisez les règles de sonarcloud car nous ne réalisons pas qu'elles ont été brisées. Nous ne voyons que ces règles ont été brisés la prochaine fois ils sont changés par quelqu'un qui pousse directement vers le dépôt. Cela déplace le fardeau de fixer Sonarcloud a découvert des problèmes de collaborateurs à committers.

Donc,

  • Existe-t-il un moyen de permettre l'analyse par Sonarcloud des requêtes pull à partir de dépôts forqués sans introduire de sécurité des questions?

notez que cette question semble être un pas au-delà de dans Travis public Repository comment ajouter une variable sécurisée qui fonctionne sur les requêtes Pull aussi qui n'ont pas encore de réponse.

18
demandé sur Mark Booth 2017-08-10 14:41:00

2 réponses

comme vous l'avez parfaitement deviné, à moins de coder dur votre GitHub et votre sonarcloud tokens (ce que vous ne voulez évidemment pas, ne pas les dévoiler publiquement), il n'y a actuellement aucun moyen d'analyser les demandes de pull externe. Ceci est documenté sur le Sonarcloud officiel Travis Add-on page.

nous travaillons actuellement activement sur une façon de soutenir correctement ce cas d'utilisation - et j'espère que nous trouverons quelque chose avant la fin de l'année.

5
répondu Fabrice - SonarSource Team 2017-08-19 21:24:30

ce n'est probablement pas la solution facile que vous recherchez, mais je ne pense pas qu'il y ait un moyen beaucoup plus facile d'accéder aux secrets lors de la construction de demandes pull, à moins que Travis ajoute un support pour cela sous une forme ou une autre. Après tout, les variables secrètes ne sont pas disponibles pour une bonne raison car les requêtes pull peuvent contenir du code arbitraire qui est exécuté pendant la compilation. Un attaquant peut l'utiliser pour créer une requête pull qui modifie le processus de compilation pour lire les variables d'environnement déchiffrées et les envoyer. pour lui.

le problème sous-jacent est que le code qui exécute la construction et le code qui est construit proviennent de la même source (parfois non fiable). Afin d'être en mesure d'utiliser les secrets du processus de construction, le code qui construit et le code qui est construit doivent être séparés et que le code doit provenir d'une source approuvée. Aucun code de la source non fiable ne doit être exécuté à moins qu'il ne soit placé dans un bac à sable de sorte qu'il ne puisse accéder à aucun des secrets.

À ma connaissance Travis ne fournit pas une méthode standard pour atteindre cet objectif.

en suivant l'idée de séparer le code de construction et le code en cours de construction, il devrait tout de même être possible d'exécuter une analyse Sonarqube contre les demandes de pull externes.

la première étape serait de créer un nouveau dépôt "code de construction" sur Github qui ne contient que les scripts de construction de confiance. Ces scripts sont chargés de vérifier la requête pull et d'effectuer l'analyse Sonarqube. Comme ce ne sont pas des une partie de la demande externe pull, ils peuvent accéder à des variables secrètes. Faites attention, cependant, de ne pas exécuter les tests unitaires dans la demande pull car ceux-ci ne sont pas fiables.

la deuxième étape est de déclencher une construction du dépôt "code de construction" chaque fois qu'une demande de pression est faite contre le dépôt de code source réel. Travis fournit un API pour déclencher construit. Mais cela nécessite aussi un secret. Nous ne pouvons donc pas simplement déclencher une construction du dépôt "code de construction" lorsque construction de la demande de traction. Ce que nous pouvons faire, c'est d'installer un webhook sur le dépôt de code source de Github, qui appelle un petit service web lorsqu'une demande est faite. Ce service appelle ensuite L'API Travis pour déclencher une compilation du référentiel de code de compilation fiable.

j'espère que cela a du sens. Faites-moi savoir si quelque chose n'est pas clair.

je n'ai pas encore fait moi-même. Je ne peux donc pas fournir de code. Mais je pense que ça ne devrait pas être trop difficile de configurer un petit service web qui transforme un webhook de GitHub request en build request for Travis.

4
répondu Christoph Böhme 2017-08-15 07:35:44