【问题标题】:Update Jenkins from a war file从战争文件更新 Jenkins
【发布时间】:2012-06-19 05:05:16
【问题描述】:

我有一台装有 Ubuntu 12.04 的机器并安装了 Jenkins 版本。 1.424.6基于this guide使用apt-get,不过有新版本:

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

如果我按下下载,我会得到一个 jenkins.war 文件...但是如何使用它来升级我当前的安装?或者在 apt 存储库更新之前这是不可能的?

【问题讨论】:

    标签: ubuntu jenkins war


    【解决方案1】:

    这可以通过两种方式完成

    1. 直接下载.war文件,替换成已有的。
    2. 直接从 ubuntu 更新

    第一种方法

    如果您在标准路径中找不到 jenkins war 文件,您可以转到管理 Jenkins → 系统信息,它会显示 .war 文件的路径。

    Jenkins war文件在ubuntu服务器上的常用位置是:

    /usr/share/jenkins
    

    跳转到jenkins主目录

    cd /usr/share/jenkins
    

    停止詹金斯服务器

    sudo service jenkins stop
    

    移动现有的詹金斯战争文件

    sudo mv jenkins.war jenkins.war.old
    

    下载最新的詹金斯战争文件

    sudo wget https://updates.jenkins-ci.org/latest/jenkins.war
    

    启动 Jenkins 服务器

    sudo service jenkins start
    

    现在一切都应该好了。

    故障排除步骤

    如果您使用 root 权限运行 jenkins(您不应该这样做),您需要更改 jenkins.war 权限。

    $ sudo chown root:root jenkins.war
    

    您可以选择使用以下命令重新启动 jenkins 服务器:

    $ sudo /etc/init.d/jenkins 重启

    第二种方法

    在 ubuntu 上,您也可以尝试以下两个命令来更新所有内容:

    $ sudo apt-get update
    $ sudo apt-get install jenkins --fix-missing
    

    【讨论】:

      【解决方案2】:

      正如 Vasan 所说,在 ubuntu 中升级 jenkins 是迄今为止最简单的方法。

      apt-get 更新 apt-get 升级

      【讨论】:

        【解决方案3】:

        当您打开 Jenkins 面板时,它将显示最新版本的可用包。你可以通过服务器中的wget命令下载它。下载最新的包后你应该把.war备份文件。

        例如-: wget http://updates.jenkins-ci.org/download/war/2.205/jenkins.war

        Ubuntu 的 Jenkins 战争文件路径 - /usr/share/jenkins/

        centos 的 Jenkins 战争文件路径 - /usr/lib/jenkins/

        备份后覆盖war文件并重启jenkins服务。

        Ubuntu - 服务 jenkins 重启, centos - systemctl restart jenkins.service

        【讨论】:

          【解决方案4】:

          要升级 Jenkins WAR 文件,请按照以下步骤操作:

          • 使用命令停止 Jenkins 服务器:systemctl stop jenkins
          • 转到詹金斯战争地点:例如:/usr/lib/jenkins
          • 从 jenkins.war 备份:mv jenkins.war jenkins.war_bkp
          • 使用 wget 或 curl 命令下载 Jenkins: wget http://updates.jenkinsci.org/download/war/(version)/jenkins.war
          • 使用命令启动 Jenkins 服务器:systemctl start jenkins
          • 使用命令检查 Jenkins 服务器状态:systemctl status jenkin

          【讨论】:

            【解决方案5】:
            #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
            

            【讨论】:

            • 太棒了!最后一个稳定链接也很有用:updates.jenkins-ci.org/stable/latest/jenkins.war
            • 最佳实践,简单易行。感谢您的回答
            • 呸!你帮助我避免在半夜心脏病发作,我们的 Jenkins 迫使我们升级并且不运行它的任何插件
            【解决方案6】:
            apt-get 更新 apt-get 升级

            到目前为止,在 linux 上升级最简单的方法,每次都像魅力一样工作。

            【讨论】:

            • 顺便说一句,在 CentOS 上类似,yum update jenkins 应该这样做。
            【解决方案7】:
            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.
            

            【讨论】:

              【解决方案8】:

              您可以用新的jenkins.war 文件覆盖现有的文件,然后重新启动 Jenkins。

              此文件通常位于/usr/share/jenkins

              如果您的系统不是这种情况,则在Manage Jenkins -> System Information 中,它将显示executable-war 下的.war 文件的路径。

              【讨论】:

              • 在我的机器上它位于 /usr/share/jenkins/。使用“service jenkins restart”复制并重新启动后,它仍然显示旧版本并建议更新 - 我做错了什么?
              • 升级后配置文件的一致性如何?你需要重新设置整个事情吗?它们是否支持向后兼容?
              • @DEnysS。它将保留您的所有配置。我删除了现有的战争文件并将新的战争文件从下载移动到 /usr/share/jenkins 并且它运行良好。 (Aptitude 没有显示 jenkins 的更新)
              • 一步一步的@bcmcfc 的答案在这里:stackoverflow.com/a/46733405/1404135
              • /usr/lib/jenkins
              【解决方案9】:

              我不想安装 apt-get 安装方法中捆绑的 x11-common 和其他组件,所以我只下载了 .war 文件并运行了 Francois 提到的命令。效果很好,但是您必须使用这种方法编写自己的守护程序脚本。详细信息在这里:http://strem.in/stream/9488/Using-the-war-file-for-jenkins-ci

              【讨论】:

                【解决方案10】:

                如果您已经通过 apt-get 安装了 Jenkins,您还应该通过 apt-get 更新 Jenkins 以避免将来出现问题。更新应该通过“apt-get update”然后“apt-get upgrade”进行。

                详情请访问以下网址:

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

                【讨论】:

                • +1 b/c 你永远不知道 Ubuntu 改变了 Jenkins 配置。添加到此:pkg.jenkins-ci.org/debian 提供可通过 apt-get 直接从项目安装的更新包。
                • 如果你按照上面提到的那样做,就不需要从war文件中更新jenkins。我认为这是在 Ubuntu 上更好的方法。
                • 如果您之前使用 apt-get 但通过默认的 Ubuntu 软件包存储库(即没有 pkg​​.jenkins-ci.org/debian)安装了 jenkins,则必须在安装新的之前删除默认的 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 中失败
                【解决方案11】:

                我使用这个 groovy 脚本来下载新的战争文件

                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 start 来管理 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
                

                【讨论】:

                  【解决方案12】:

                  虽然我不认为这是对 OP 问题的有效答案,但我仍然要强调,在 Ubuntu 上部署 Jenkins(如果不是所有库/包/软件的话,也可能是大多数库/包/软件)的最佳方法是利用 aptitude (或 apt-get) 管理系统。

                  在此处记录:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu(请注意,如果您想使用 LTS 构建,请点击此 repo http://pkg.jenkins-ci.org/debian-stable/

                  因此,如果您确实使用了这种方法,您只需执行apt-get upgrade jenkins

                  【讨论】:

                  • 理论上你是对的,但是从库存安装升级时这不起作用。安装最新软件包后,它正在启动,但出现 503 错误。我按照那里写的程序,我必须应用 Matthieu Rouget 的解决方案才能获得一致的 pkg 状态。
                  【解决方案13】:

                  我的安装在 /usr/share/jenkins 下 我认为它是通过 apt-get 安装的,所以可能也想在那里检查一下。

                  Ubuntu 12.04.1

                  【讨论】:

                    【解决方案14】:

                    我们使用以下命令从 .war 文件运行 jenkins。

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

                    您甚至可以从 ~/Downloads 目录运行命令

                    【讨论】:

                      猜你喜欢
                      • 2014-05-17
                      • 1970-01-01
                      • 2016-09-19
                      • 2017-11-12
                      • 2015-01-06
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-10-18
                      • 1970-01-01
                      相关资源
                      最近更新 更多