2 votes

Pipeline Jenkins à partir du SCM -> reconstruction toujours complète

pour notre serveur de build jenkins, j'utilise un pipeline script qui était jusqu'à présent uniquement dans jenkins. Maintenant j'ai déplacé le pipeline script sur notre serveur git.

Le projet jenkins et votre application se construisent bien, mais : avant le passage à git, la construction de votre application C++ était "incrémentale", donc seules les nouvelles modifications étaient construites. Par conséquent, un build déclenché manuellement était assez rapide.

Maintenant avec le pipeline dans git, jenkins/msbuild fait toujours une reconstruction complète, mais je ne comprends pas pourquoi. La reconstruction complète prend environ 30 minutes.

Voici le code abrégé de notre pipeline.

Quelqu'un a-t-il observé un tel comportement ? Ou une idée de la raison pour laquelle msbuild signifie qu'il doit faire une reconstruction complète ?

Merci d'avance, Jonas

pipeline 
{
    stages
    {
        stage('Checkout from Github') { ... }
        stage('CppCheck') { ... }
        stage('Generate Doxygen Documentation') { ... }
        stage('Version read') { ... }
        stage('Cmake Repo Preparations') { ... }
        stage('Build x64')
        {
            steps
            {
                dir('build')
                {
                     // MSBuild command line parameters:
                     // /m: parallel build with as many cores as the CPU has
                     bat '"C:/Program Files (x86)/MSBuild/14.0/Bin/amd64/MSBuild.exe" project.sln /p:configuration=release /p:platform=x64 /m'
                }
            }
        }
        stage('Create installer') { ... }
        stage('Archive') { ... }
        stage('Deploy to NFS') { .. }
    }
    post { ... }
}

0voto

c0op Points 15

Cette question date déjà d'un an mais je veux partager nos recherches car nous sommes tombés sur le même problème et avons observé ce qui suit sur Jenkins v.235.2 .

La première commande exécutée sur l'agent est "Pipeline from SCM", l'étape visible est "Declarative SCM Checkout" dans l'aperçu des étapes du pipeline. Cette commande va donc télécharger le fichier Jenkins qui contient les instructions du pipeline vers l'espace de travail Jenkins correspondant sur l'agent. En exécutant cette commande et en téléchargeant le fichier Jenkins, un dossier ".git" est créé dans l'espace de travail racine de votre agent (par exemple, le dossier ".git"). C:\jenkins\workspace\jobA\.git ). Puisque vous récupérez maintenant votre code source, afin de construire votre logiciel, dans le même espace de travail, le dossier ".git" lui-même sera écrasé / remplacé. En supprimant les métadonnées du dossier ".git", vous obtenez une nouvelle récupération propre et une nouvelle construction du logiciel. Cela peut également conduire à un comportement étrange de Git lui-même.

D'après nos investigations, vous avez deux options pour résoudre ce problème (il y en a peut-être d'autres mais cela nous a aidé).

  1. Gardez l'espace de travail Root pour récupérer le fichier Jenkins et téléchargez le code source dans un autre dossier, par ex. dir('src') { git clone ... } .

ou la possibilité deux ce que nous avons mis en œuvre maintenant dans nos pipelines.

  1. De la Documentation sur Jenkins c'est mentionné :

skipDefaultCheckout Ignorer l'extraction du code du contrôle de la source par défaut dans la directive de l'agent. Par exemple : options { skipDefaultCheckout() }

Cette commande empêchera le téléchargement du fichier Jenkins sur l'agent au lieu de l'extraire sur le maître Jenkins lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X