Mettre à jour Jenkins à partir d'un fichier war


91

J'ai une machine avec Ubuntu 12.04 et j'ai installé Jenkins ver. 1.424.6 utilisant apt-get basé sur ce guide , mais il existe une nouvelle version:

New version of Jenkins (1.447.2) is available for download (changelog).

Si j'appuie sur Télécharger, j'obtiens un fichier jenkins.war ... mais comment l'utiliser pour mettre à jour mon installation actuelle? ou n'est-ce pas possible avant que les référentiels apt soient mis à jour?

Réponses:


161

Vous pouvez remplacer le jenkins.warfichier existant par le nouveau, puis redémarrer Jenkins.

Ce fichier se trouve généralement au format /usr/share/jenkins.

Si ce n'est pas le cas pour votre système, dans Manage Jenkins -> System Information, il affichera le chemin d'accès au .warfichier sous executable-war.


16
Sur ma machine, il se trouve dans / usr / share / jenkins /. Après avoir copié et redémarré avec "service jenkins restart", il affiche toujours l'ancienne version et suggère une mise à jour - qu'est-ce que je fais mal?
u123

2
Qu'en est-il de la cohérence des fichiers de configuration après la mise à niveau? Avez-vous besoin de tout configurer à nouveau? Prennent-ils en charge la rétrocompatibilité?
Denys S.

@DEnysS. il conservera toutes vos configurations. J'ai supprimé le fichier war existant et déplacé le nouveau de Téléchargements vers / usr / share / jenkins et cela a parfaitement fonctionné. (Aptitude n'a pas montré de mise à jour pour jenkins)
Whitney Imura

+1 Cela m'a beaucoup aidé, car la version actuelle sur Ubuntu est 1.6 tandis que la version de guerre est 2.4. C'est une énorme différence dans l'apparence et la disponibilité des plugins. Donc cela m'a beaucoup aidé. J'avais peur de devoir installer Tomcat et de le faire à la dure.
Caperneoignis

1
étape par étape de la réponse de @bcmcfc ici: stackoverflow.com/a/46733405/1404135
3z33etm

32

Si vous avez installé Jenkins via apt-get, vous devez également mettre à jour Jenkins via apt-get pour éviter de futurs problèmes. La mise à jour devrait fonctionner via «apt-get update» puis «apt-get upgrade».

Pour plus de détails, visitez l'URL suivante:

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu


13
+1 b / c vous ne savez jamais ce qu'Ubuntu a changé à propos de la configuration Jenkins. En plus de cela: pkg.jenkins-ci.org/debian fournit des paquets mis à jour installables via apt-get directement depuis le projet.
mabi

Pas besoin de mettre à jour jenkins à partir du fichier war si vous faites cela mentionné ci-dessus. Je pense que c'est le meilleur moyen sur Ubuntu.
Ripon Al Wasim

10
Si vous avez installé précédemment avec jenkins apt-get , mais à travers le dépôt de paquets par défaut Ubuntu (sans pkg.jenkins-ci.org/debian), vous devez supprimer les paquets Ubuntu par défaut avant d' installer le nouveau sudo apt-get remove jenkins jenkins-commonensuite sudo apt-get install jenkins. Si vous ne le faites pas, la mise à jour échouera dans untrying to overwrite '/usr/share/jenkins/jenkins.war', which is also in package jenkins-common 1.424.6+dfsg-1ubuntu0.1
Matthieu Rouget

30
#on ubuntu, in /usr/share/jenkins:

sudo service jenkins stop
sudo mv jenkins.war jenkins.war.old
sudo wget https://updates.jenkins-ci.org/latest/jenkins.war
sudo service jenkins start

1
Génial! Le dernier lien stable est également utile: updates.jenkins-ci.org/stable/latest/jenkins.war
ℛɑƒæĿᴿᴹᴿ

Meilleure pratique, facile à faire. Merci pour cette réponse
Jinna Balu

Phew! Vous m'avez aidé à avoir une crise cardiaque au milieu de la nuit avec notre Jenkins nous forçant à mettre à niveau et à ne pas exécuter l'un de ses plugins
Emjey

12
apt-get mise à jour
apt-get mise à niveau 

de loin le moyen le plus simple de mettre à niveau sur Linux, fonctionne comme un charme à chaque fois.


Semblable sur CentOS en passant, yum update jenkinsdevrait le faire.
Nagev

4

Bien que je ne considère pas cela comme une réponse valide à la question d'OP, je soulignerais quand même que la meilleure façon de déployer Jenkins (et probablement la plupart sinon toutes les bibliothèques / packages / logiciels) sur Ubuntu est de tirer parti d'aptitude (ou apt- get) système de gestion.

Il est documenté ici: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu (notez que si vous souhaitez utiliser la version LTS, cliquez sur ce repo http: // pkg. jenkins-ci.org/debian-stable/ )

Donc, si par hasard vous utilisiez réellement cette approche, vous feriez simplement un apt-get upgrade jenkins


En théorie, vous avez raison, mais cela ne fonctionne pas lors de la mise à niveau à partir de l'installation de stock. Après l'installation du dernier package, il démarre mais donne une erreur 503. J'ai suivi la procédure qui y est écrite et j'ai dû appliquer la solution de Matthieu Rouget afin d'obtenir un état pkg cohérent.
Glenn Plas

3

lorsque vous ouvrez le panneau Jenkins, il affichera les packages disponibles à partir de leur dernière version. vous pouvez le télécharger via la commande wget sur le serveur.Après avoir téléchargé le dernier package, vous devez prendre le fichier de sauvegarde .war.

Par exemple: wget http://updates.jenkins-ci.org/download/war/2.205/jenkins.war

Chemin du fichier de guerre Jenkins pour Ubuntu - / usr / share / jenkins /

Chemin du fichier de guerre Jenkins pour centos - / usr / lib / jenkins /

après avoir pris la sauvegarde, écrasez le fichier war et redémarrez le service jenkins.

Ubuntu - redémarrage du service jenkins, centos - redémarrage systemctl jenkins.service


2

Nous exécutons jenkins à partir du fichier .war avec la commande suivante.

java -Xmx2500M -jar jenkins.war --httpPort=3333 --prefix=/jenkins

Vous pouvez même exécuter la commande à partir du répertoire ~ / Downloads


2

J'utilise ce script groovy pour télécharger un nouveau fichier de guerre

import java.util.concurrent.atomic.AtomicInteger

class ThreadHelper{
    static done = false;
    static starttime = System.currentTimeMillis()
    static synchronized printx (message) {    printf ("%5s seconds: %20s",(System.currentTimeMillis()-starttime)/1000.0 , message); println("") }
    def download(address)
    {
    def filename = new File(System.getenv()['CI_HOME'] + '/' + address.tokenize("/")[-1])
    println(filename.getCanonicalPath())
    def file = new FileOutputStream(filename)
    def out = new BufferedOutputStream(file)
    out << new URL(address).openStream()
    out.close()
    done=true;
    }

}

println("executing from ... "+ new File(".").getCanonicalPath())

def counter = new AtomicInteger();
    th = Thread.start {
    while(!ThreadHelper.done) {
    sleep 1000
    counter.incrementAndGet()
    print '.'
    }
}

th2 = Thread.start { new ThreadHelper().download("http://mirrors.jenkins-ci.org/war/latest/jenkins.war") }
th.join()
th2.join()

ThreadHelper.printx('done')

Et un autre script arrête Tomcat - copie la guerre et la redémarre

Nous l'hébergeons sur windows 2008 et tomcat, j'utilise sc query, sc config, sc stop, sc start pour gérer les services Windows

    set warname=jenkins

if '%name%' == 'trak' set warname=trak

pushd .
if '%name%'=='' goto badname
if '%warname%'=='' goto badname

if '%ci_home%'=='' goto badcihome

REM =====================================================
REM stop windows service
sc stop %name%

REM sleep for 5 seconds see http:\\stackoverflow.com\questions\1672338\how-to-sleep-for-5-seconds-in-windowss-command-prompt-or-dos
ping 1.1.1.1 -n 1 -w 3000 > nul

rem replace forward slash with backward slash
set tomcat_dir=%ci_home:/=\%\instances\tomcat7-%name%

REM Create sub directory called bak-yymmdd-hhmmss
REM where yymmdd-hhmmss is a date-time stamp like 120601-142907

set hh=%time:~0,2%

REM Since there is no leading zero for times before 10 am, have to put in
REM a zero when this is run before 10 am.

if "%time:~0,1%"==" " set hh=0%hh:~1,1%

set yymmdd_hhmmss=%date:~12,2%%date:~4,2%%date:~7,2%-%hh%%time:~3,2%%time:~6,2%

set backupdir=bak-%yymmdd_hhmmss%

REM =====================================================
md %tomcat_dir%\logs\%backupdir%

cd %tomcat_dir%\logs

dir bak*
echo "nothing-to-log" >> force.log

REM move command will fail if there is nothing to move hence the force log statement above

call move *.* %backupdir%

REM =====================================================
rmdir %tomcat_dir%\webapps\%name% /q/s

echo f|xcopy %ci_home%\%warname%.war %tomcat_dir%\webapps\%name%.war /y

REM TODO===== something about jenkins plugins

REM =====================================================
cd "%tomcat_dir%\bin"
call catalina version

echo =====================================================
echo ====== removing %name%
call service remove %name%

echo =====================================================
echo ====== installing %name%
call service install %name%

echo on

REM setting service to start automatically, note that space before the word auto IS REQUIRED
sc config %name% start= auto

REM =====================================================
sc start %name%

popd

exit 0

goto done

:badname
echo 'name required - this will be used as windows service name as well'
pause
exit 1

:badcihome
echo 'CI home env var required - ci_home'
pause
exit 1

:done

2
https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+on+Ubuntu

Once installed like this, you can update to the later version of Jenkins (when it comes out) by running the following commands:
-------
sudo apt-get update
sudo apt-get install jenkins
-------
(aptitude or apt-get doesn't make any difference.)
What does this package do?
Jenkins will be launched as a daemon up on start. See /etc/init.d/jenkins for more details.
The 'jenkins' user is created to run this service.
Log file will be placed in /var/log/jenkins/jenkins.log. Check this file if you are troubleshooting Jenkins.
/etc/default/jenkins will capture configuration parameters for the launch like e.g JENKINS_HOME
By default, Jenkins listen on port 8080. Access this port with your browser to start configuration.

1

Le mien est installé sous / usr / share / jenkins. Je pensais qu'il avait été installé via apt-get donc je voudrais peut-être vérifier là aussi.

Ubuntu 12.04.1


1

Je ne voulais pas installer le x11-common et d'autres composants fournis dans l'approche d'installation apt-get, alors j'ai juste téléchargé le fichier .war et exécuté la commande mentionnée par François. Cela a bien fonctionné, mais vous devez écrire votre propre script démon avec cette approche. Détails complets ici: http://strem.in/stream/9488/Using-the-war-file-for-jenkins-ci


1

Pour mettre à niveau le fichier WAR Jenkins, suivez les étapes ci-dessous:

  • Arrêtez le serveur Jenkins à l'aide de la commande: systemctl stop jenkins
  • Allez à l'emplacement de la guerre Jenkins: ex: /usr/lib/jenkins
  • Faites une sauvegarde de jenkins.war: mv jenkins.war jenkins.war_bkp
  • Téléchargez Jenkins à l'aide de la commande wget ou curl: wget http://updates.jenkinsci.org/download/war/(version)/jenkins.war
  • Démarrage du serveur Jenkins à l'aide de la commande: systemctl start jenkins
  • Vérifiez l'état du serveur Jenkins à l'aide de la commande: systemctl status jenkin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.