Jenkins CI: builds activeren op SVN-commit

Welke plug-ins en plug-infuncties moet ik instellen om ervoor te zorgen dat mijn Jenkins-taak een build activeert wanneer code wordt vastgelegd in een SVN-project?

Ik heb zowel de standaard SVN-plug-in als de SVN-tagging-plug-in geïnstalleerd, maar ik zie geen nieuwe functies die triggerconfiguratie toestaan.


Antwoord 1, autoriteit 100%

Er zijn twee manieren om dit aan te pakken:

Ik raad in eerste instantie de eerste optie aan, vanwege het gemak van implementatie. Zodra u volwassen bent in uw bouwprocessen, schakelt u over naar de tweede.

  1. Bevraag de repository om te zien of er wijzigingen zijn opgetreden. Dit kan een commit “overslaan” als twee commits binnen hetzelfde polling-interval binnenkomen. Beschrijving van hoe u dit hier doet, let op de vierde schermafbeelding waar u tijdens het werk configureert een “build-trigger” gebaseerd op polling van de repository (met een crontab-achtige configuratie).

  2. Configureer je repository met een post-commit hook die Jenkins laat weten dat een build moet beginnen. Beschrijving van de plug-in hier, in de sectie “post-commit hooks”

De SVN Tag-functie maakt geen deel uit van de polling, het maakt deel uit van het promoten van de huidige “kop” van de broncode naar een tag, om een ​​momentopname van een build te maken. Hierdoor kun je naar Jenkins buid #32 verwijzen als SVN-tag /tags/build-32 (of iets dergelijks).


Antwoord 2, autoriteit 2%

Je hebt maar één plug-in nodig, namelijk de Subversion-plug-in.

Ga dan gewoon naar de sectie Jenkins → job_name → Build Trigger
(i) Trigger build op afstand (d.w.z. vanuit scripts)
Authenticatietoken: Token_name

Ga naar de hooks-directory van de SVN-server en na het afvuren van de onderstaande commando’s:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    Opmerking:Alle regels moeten worden becommentarieerd
    Voeg de onderstaande regel als laatste toe

Syntaxis (voor Linux-gebruikers):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Syntaxis (voor Windows-gebruiker):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Antwoord 3

Ik heb een tool gemaakt met Python met wat bash om een ​​Jenkins-build te activeren. In principe moet je deze twee waarden van post-commit verzamelen wanneer een commit de SVN-server bereikt:

REPOS="$1"
REV="$2"

Vervolgens gebruik je “svnlook dirs-changed $1 -r $2” om het pad te krijgen dat zojuist is vastgelegd. Van daaruit kun je controleren welke repository je wilt bouwen. Stel je voor dat je honderdduizenden projecten hebt. Je kunt toch niet de hele repository controleren?

Je kunt mijn script van GitHubbekijken.


Antwoord 4

Je kunt een post-commit hook gebruiken.

Plaats het post-commit hook-script in de map hooks, maak een wget_folderin je C:\-station en plaats de wget.exebestand in deze map.
Voeg de volgende code toe aan het bestand met de naam post-commit.bat

SET REPOS=%1   
SET REV=%2
FOR /f "tokens=*" %%a IN (  
'svnlook uuid %REPOS%'  
) DO (  
SET UUID=%%a  
)  
FOR /f "tokens=*" %%b IN (  
'svnlook changed --revision %REV% %REPOS%'  
) DO (  
SET POST=%%b   
)
echo %REPOS% ----- 1>&2
echo %REV% -- 1>&2
echo %UUID% --1>&2
echo %POST% --1>&2
C:\wget_folder\wget ^   
    --header="Content-Type:text/plain" ^   
    --post-data="%POST%" ^   
    --output-document="-" ^   
    --timeout=2 ^     
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    

waar Test = naam van de baan

echowordt gebruikt om de waarde te zien en je kunt ook exit 2aan het einde toevoegen om meer te weten te komen over het probleem en of het post-commit hook-script actief is of niet.

Other episodes