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.
-
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).
-
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:
cp post-commit.tmpl post-commit
chmod 777 post-commit
chown -R www-data:www-data post-commit
-
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_folder
in je C:\-station en plaats de wget.exe
bestand 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
echo
wordt gebruikt om de waarde te zien en je kunt ook exit 2
aan het einde toevoegen om meer te weten te komen over het probleem en of het post-commit hook-script actief is of niet.