อัปเดต Jenkins จากไฟล์สงคราม


92

ฉันมีเครื่องที่มี Ubuntu 12.04 และได้ติดตั้ง Jenkins ver. 1.424.6 โดยใช้ apt-get ตามคู่มือนี้แต่มีเวอร์ชันใหม่:

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

ถ้าฉันกดดาวน์โหลดฉันจะได้ไฟล์ jenkins.war ... แต่ฉันจะใช้มันเพื่ออัพเกรดการติดตั้งปัจจุบันได้อย่างไร? หรือเป็นไปไม่ได้ก่อนที่ที่เก็บ apt จะได้รับการอัปเดต?

คำตอบ:


162

คุณสามารถเขียนทับjenkins.warไฟล์ที่มีอยู่ด้วยไฟล์ใหม่จากนั้นรีสตาร์ท Jenkins

ไฟล์นี้มักจะอยู่ใน/usr/share/jenkins.

ถ้ากรณีนี้ไม่ได้สำหรับระบบของคุณในManage Jenkins -> System Informationก็จะแสดงเส้นทางไปที่ไฟล์ภายใต้.warexecutable-war


16
บนเครื่องของฉันมันอยู่ใน / usr / share / jenkins /. หลังจากคัดลอกและรีสตาร์ทด้วย "service jenkins restart" ก็ยังคงแสดงเวอร์ชันเก่าและแนะนำการอัปเดต - ฉันทำอะไรผิด?
u123

2
ความสอดคล้องของไฟล์คอนฟิกูเรชันหลังการอัพเกรดเป็นอย่างไร? คุณต้องตั้งค่าทั้งหมดอีกครั้งหรือไม่? พวกเขาสนับสนุนความเข้ากันได้ย้อนหลังหรือไม่?
Denys S.

@DEnysS. มันจะเก็บการกำหนดค่าทั้งหมดของคุณ ฉันลบไฟล์สงครามที่มีอยู่และย้ายไฟล์ใหม่จากดาวน์โหลดไปที่ / usr / share / jenkins และมันก็ทำงานได้อย่างสมบูรณ์ (ความถนัดไม่แสดงการอัปเดตสำหรับเจนกินส์)
Whitney Imura

+1 สิ่งนี้ช่วยฉันได้มากเพราะเวอร์ชันปัจจุบันบน Ubuntu คือ 1.6 ในขณะที่เวอร์ชันสงครามคือ 2.4 ความแตกต่างอย่างมากในรูปลักษณ์และความพร้อมใช้งานของปลั๊กอิน สิ่งนี้ช่วยฉันได้มาก เป็นกังวลว่าฉันจะต้องติดตั้ง tomcat และทำวิธีที่ยาก
Caperneoignis

1
ทีละขั้นตอนของคำตอบของ @bcmcfc ที่นี่: stackoverflow.com/a/46733405/1404135
3z33etm

32

หากคุณติดตั้ง Jenkins ผ่าน apt-get คุณควรอัปเดต Jenkins ผ่าน apt-get เพื่อหลีกเลี่ยงปัญหาในอนาคต การอัปเดตควรทำงานผ่าน "apt-get update" และ "apt-get upgrade"

สำหรับรายละเอียดโปรดไปที่ URL ต่อไปนี้:

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


13
+1 b / c คุณไม่มีทางรู้เลยว่า Ubuntu เปลี่ยนแปลงอะไรเกี่ยวกับการกำหนดค่า Jenkins การเพิ่มสิ่งนี้: pkg.jenkins-ci.org/debianจัดเตรียมแพ็คเกจที่อัปเดตซึ่งสามารถติดตั้งได้ผ่าน apt-get โดยตรงจากโครงการ
mabi

ไม่จำเป็นต้องอัปเดต jenkins จากไฟล์ war หากคุณทำเช่นนั้นข้างต้น ฉันคิดว่านี่เป็นวิธีที่ดีกว่าบน Ubuntu
Ripon Al Wasim

10
หากคุณติดตั้งไว้ก่อนหน้านี้เจนกินส์กับ apt-get แต่ผ่านการเริ่มต้นอูบุนตูที่เก็บแพคเกจ (คือไม่มี pkg.jenkins-ci.org/debian), คุณต้องเอาแพคเกจ Ubuntu เริ่มต้นก่อนการติดตั้งใหม่แล้วsudo apt-get remove jenkins jenkins-common sudo apt-get install jenkinsหากคุณไม่ทำเช่นนั้นการอัปเดตจะล้มเหลวในtrying to overwrite '/usr/share/jenkins/jenkins.war', which is also in package jenkins-common 1.424.6+dfsg-1ubuntu0.1
Matthieu Rouget

31
#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
เยี่ยมมาก! ลิงค์สุดท้ายที่เสถียรยังมีประโยชน์: updates.jenkins-ci.org/stable/latest/jenkins.war
ℛɑƒæĿᴿᴹᴿ

Best Practice ทำง่าย ขอบคุณสำหรับคำตอบนี้
Jinna Balu

วุ้ย คุณช่วยฉันจากอาการหัวใจวายกลางดึกด้วยเจนกินส์บังคับให้เราอัปเกรดและไม่ใช้ปลั๊กอินใด ๆ
Emjey

12
อัปเดต apt-get
apt-get อัพเกรด 

วิธีที่ง่ายที่สุดในการอัปเกรดบน linux ใช้งานได้เหมือนมีเสน่ห์ทุกครั้ง


คล้ายกับ CentOS โดยวิธีการที่yum update jenkinsควรทำ
Nagev

4

แม้ว่าฉันจะไม่ถือว่านี่เป็นคำตอบที่ถูกต้องสำหรับคำถามของ OP แต่ฉันก็ยังคงเน้นย้ำว่าวิธีที่ดีที่สุดในการปรับใช้เจนกินส์ (และส่วนใหญ่ถ้าไม่ใช่ไลบรารี / แพ็คเกจ / ซอฟต์แวร์ทั้งหมด) บน Ubuntu คือการใช้ประโยชน์จากความถนัด (หรือ apt- รับ) ระบบการจัดการ

มีการบันทึกไว้ที่นี่: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu (สังเกตว่าหากคุณต้องการใช้โครงสร้าง LTS ให้กดที่ repo นี้http: // pkg jenkins-ci.org/debian-stable/ )

ดังนั้นหากบังเอิญคุณใช้วิธีนี้จริงๆคุณก็แค่ทำ a apt-get upgrade jenkins


ในทางทฤษฎีคุณพูดถูก แต่ไม่ได้ผลเมื่ออัปเกรดจากการติดตั้งสต็อก หลังจากติดตั้งแพคเกจล่าสุดจะเริ่มต้นขึ้น แต่มีข้อผิดพลาด 503 ฉันทำตามขั้นตอนที่เขียนไว้ที่นั่นและฉันต้องใช้โซลูชันของ Matthieu Rouget เพื่อให้ได้สถานะ pkg ที่สม่ำเสมอ
Glenn Plas

3

เมื่อคุณเปิดพาเนล Jenkins จะแสดงแพ็กเกจที่พร้อมใช้งานจากเวอร์ชันล่าสุด คุณสามารถดาวน์โหลดผ่านคำสั่งwgetในเซิร์ฟเวอร์หลังจากดาวน์โหลดแพ็คเกจล่าสุดคุณควรใช้ไฟล์สำรอง. war

เช่น: wget http://updates.jenkins-ci.org/download/war/2.205/jenkins.war

เส้นทางไฟล์ Jenkins war สำหรับ Ubuntu - / usr / share / jenkins /

เส้นทางไฟล์ Jenkins war สำหรับ centos - / usr / lib / jenkins /

หลังจากทำการสำรองข้อมูลทับไฟล์ war และเริ่มบริการเจนกินส์ใหม่

Ubuntu - บริการ jenkins รีสตาร์ท centos - systemctl รีสตาร์ท jenkins.service


2

เราเรียกใช้เจนกินส์จากไฟล์. war ด้วยคำสั่งต่อไปนี้

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

คุณสามารถเรียกใช้คำสั่งจากไดเร็กทอรี ~ / Downloads


2

ฉันใช้สคริปต์ที่น่าสนใจนี้เพื่อดาวน์โหลดไฟล์สงครามใหม่

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')

และสคริปต์อื่นปิดตัวลง tomcat - คัดลอกสงครามและรีสตาร์ท

เราโฮสต์บน windows 2008 และ tomcat ฉันใช้ sc query, sc config, sc stop, sc เริ่มจัดการบริการ 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

Mine ถูกติดตั้งภายใต้ / usr / share / jenkins ฉันคิดว่ามันถูกติดตั้งผ่าน apt-get ดังนั้นอาจต้องการตรวจสอบที่นั่นด้วย

Ubuntu 12.04.1


1

ฉันไม่ต้องการติดตั้ง x11-common และส่วนประกอบอื่น ๆ ที่มาพร้อมกับวิธีการติดตั้ง apt-get ดังนั้นฉันจึงดาวน์โหลดไฟล์. war และรันคำสั่งที่ Francois กล่าวถึง มันทำงานได้ดี แต่คุณต้องเขียนสคริปต์ daemon ของคุณเองด้วยวิธีการนั้น รายละเอียดทั้งหมดที่นี่: http://strem.in/stream/9488/Using-the-war-file-for-jenkins-ci


1

ในการอัปเกรดไฟล์ Jenkins WAR ให้ทำตามขั้นตอนด้านล่าง:

  • หยุดเซิร์ฟเวอร์ Jenkins โดยใช้คำสั่ง: systemctl stop jenkins
  • ไปที่สถานที่สงครามของ Jenkins: เช่น: /usr/lib/jenkins
  • สำรองข้อมูลจาก jenkins.war: mv jenkins.war jenkins.war_bkp
  • ดาวน์โหลด Jenkins โดยใช้คำสั่ง wget หรือ curl: wget http://updates.jenkinsci.org/download/war/(version)/jenkins.war
  • เริ่มต้นเซิร์ฟเวอร์ Jenkins โดยใช้คำสั่ง: systemctl start jenkins
  • ตรวจสอบสถานะเซิร์ฟเวอร์ Jenkins โดยใช้คำสั่ง: systemctl status jenkin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.