Jenkins+SVN+Maven+Shell 實現專案一鍵釋出
Jenkins+SVN+Maven+Shell
實現專案一鍵釋出
一、前言
眾所周知,Jenkins預設情況下可以實現專案更新(通過SVN),和專案釋出,通過(MAVEN外掛),但是這種情況下發布到一些容器底下(如Tomcat)時,經過多次釋出後JVM會報OutOfMemoryError PermGen space,這個原因是由於這些容器在覆蓋老專案後並不會釋放老專案記憶體永久區的資源,久而久之,導致系統永久區記憶體溢位。為解決這個問題,我們只有通過釋出後重新啟動容器才能解決該問題。那有什麼辦法可以使容器在釋出新專案後自動重啟呢?重啟過程中,我們希望容器正在處理的作業安全完成後(如quartz作業執行完後),容器再重啟,如何做到?本文要與大家分享的便是其中一種便利安全的方法。
二、 Jenkins安裝與配置
Jenkins是一個開源軟體專案,旨在提供一個開放易用的軟體平臺,使持續整合變成可能。
安裝:
安裝及啟動過程:
Ruby程式碼- rpm -ivh jenkins-1.590-1.1.noarch.rpm
- service jenkins start
訪問:
http://<ip>:8080/
依次單擊“Jenkins->系統管理->管理外掛”選單
在可選外掛選項卡中找到勾選Publish Over SSH外掛,點選介面下方的直接安裝按鈕。等待jenkins安裝完畢即可。
全域性配置:
依次點開“Jenkins->系統管理->系統設定”選單
找到Publish over SSH配置項,配置如下配置
底下還有個Test Configuration按鈕,點選,如出現Success則表示配置成功。
最後點選頁底的儲存按鈕,完成配置。
五、 建立Jenkins Item
直接點選Jenkins首頁的新建按鈕,建立一個Maven專案,配置根據大家需要,實際配置,本文僅列出作者的配置,供參考:
其中Exec command的指令碼是一個shell檔案,放置在遠端釋出機上後,可執行引數有三個,分別如下,第一個引數必填,後面兩個選填,預設值是8080和/save/apache-tomcat-7.0.56,大家可以在第六節的SHELL指令碼中改成大家專案中自己的預設引數。
- ./publish.sh <專案WEB顯示名稱> [TOMCAT埠] [tomcat安裝主目錄]
六、 編寫Shell指令碼
需要在你釋出的目標機器上編寫該指令碼,你也可以在開發環境編好後,放到目標機器上,以下給出我的指令碼:
Ruby程式碼- #!/bin/bash
- #defined
- TOMCAT_HOME="/save/apache-tomcat-7.0.56"
- TOMCAT_PORT=8080
- PROJECT="$1"
- #param validate
- if [ $# -lt 1 ]; then
- echo "you must use like this : ./publish.sh <projectname> [tomcat port] [tomcat home dir]"
- exit
- fi
- if [ "$2" != "" ]; then
- TOMCAT_PORT=$2
- fi
- if [ "$3" != "" ]; then
- TOMCAT_HOME="$3"
- fi
- #shutdown tomcat
- "$TOMCAT_HOME"/bin/shutdown.sh
- echo "tomcat shutdown"
- #check tomcat process
- tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
- echo "current :" $tomcat_pid
- while [ -n "$tomcat_pid" ]
- do
- sleep 5
- tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
- echo "scan tomcat pid :" $tomcat_pid
- done
- #publish project
- echo "scan no tomcat pid,$PROJECT publishing"
- rm -rf "$TOMCAT_HOME"/webapps/$PROJECT*
- cp /save/$PROJECT*.war "$TOMCAT_HOME"/webapps/$PROJECT.war
- #bak project
- BAK_DIR=/save/bak/$PROJECT/`date +%Y%m%d`
- mkdir -p "$BAK_DIR"
- cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war
- #remove tmp
- rm -rf /save/$PROJECT*.war
- #start tomcat
- "$TOMCAT_HOME"/bin/startup.sh
- echo "tomcat is starting,please try to access $PROJECT conslone url"
該指令碼具有自動安全停Tomcat,自動釋出專案,自動備份已釋出專案版本的功能。
需要注意的是你連上來的admin使用者需要具有執行該檔案的許可權,如果沒有可以
chmod 600(或755) publish.sh
具體許可權給多少,根據你們的需要,決定權在你們手上。
如果shell執行出現如下錯誤,則可能是你在etc/profile中設定了JAVA_HOME,同時您還需要在/etc/bashrc也設定JAVA_HOME。
原因:遠端機器的java_home在配置在/etc/profile中的,這個只給shell使用者使用的;
但對於ssh 這種非login shell(non-login shell)使用者,需要配置在/etc/bashrc中。
參考配置:
Ruby程式碼- export JAVA_HOME=/usr/java/jdk1.6.0_45
- export JAVA_BIN=/usr/java/jdk1.6.0_45/bin
- export PATH=$PATH:$JAVA_HOME/bin
如果以上配置還不能解決你的問題,嘗試下去的做法:
---------------------------------------------修改.bash_profile檔案開始----------------------------------
修改.bash_profile檔案方式是使用者級的,對當前使用者可用,其它使用者無法使用。這種方式一般用於生產。.bash_profile檔案在使用者的根目錄,比如說www使用者的根目錄是/home/www。
具體配置如下:
Java程式碼- cd /home/www/
- vim .bash_profile
插入下面3行配置後儲存退出:
Ruby程式碼- export JAVA_HOME=/usr/java/jdk1.6.0_45/
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
相關推薦
Jenkins+SVN+Maven+Shell 實現專案一鍵釋出
Jenkins+SVN+Maven+Shell 實現專案一鍵釋出 一、前言 眾所周知,Jenkins預設情況下可以實現專案更新(通過SVN),和專案釋出,通過(MAVEN外掛),但是這種情況下發布到一些容器底下(如Tomcat)時,經過多次釋出後JVM會報OutOfMe
java 自己實現專案一鍵全轉碼 解決檔案亂碼問題
經常在使用外部匯入的專案,開啟之後想學習一番,結果發現所有註釋都亂碼,看起來很頭疼,這個問題困擾我很久,相信大家在學習過程中也會遇到。所以昨晚寫了一個小程式,只要輸入專案檔案的根目錄,可以實現專案內所有java檔案自動轉碼的功能。預設是從GBK轉碼為UTF-8。 首先聊聊正
Jenkins 實現.net專案一鍵部署
一、下載安裝Jenkins : 官網地址 https://jenkins.io/index.html 安裝沒什麼特殊的 常規安裝即可。安裝後預設佔用8080埠。可通過瀏覽器訪問。二、配置:首次訪問,會提示安裝外掛,如果安裝Jenkins的伺服器可以聯網,選擇需要的安裝即
基於Shell指令碼的Linux下Javaweb專案一鍵部署
剛買到伺服器的時候想把專案部署上去時,經常會用到各種scp、unzip之類一大堆的命令。雖然整個流程不是特別麻煩,不過學了一些Shell的命令知識之後我發現這個過程還是有優化的空間,於是大概花了幾個小時完成了這樣一個自動部署的指令碼。 首先要解決的問題是,命令如何在遠端伺服器上執行,因為之前每次
Jenkins+SVN+Maven+Docekr自動化部署流程搭建(一)
目的: 公司團隊研發,在產品敏捷開發過程有利於保證產品的可迭代性,QC缺陷的及時管控和保證開發人員注重業務編碼,以此來提高開發效率。將開發過程產品化,自動化,大大減少後期整合出現不可預料的問題。 環境說明: 1.需要inux系統虛機一臺(此案例我將
Shell指令碼實現軟體一鍵安裝和自動重啟(一)
前言 在LINUX開發過程中,往往需要對已經開發好的軟體進行打包,一鍵安裝後程序能自動後臺啟動,當程序意外關閉後能自動重啟,本篇來介紹實現過程。 業務分析 對功能進行拆分 1、實現程式後臺執行,掛掉重啟的監聽器指令碼 2、將監聽器指令碼放入開機啟動項 3、實現軟體
使用開源軟體Jenkins一鍵釋出專案到伺服器
首先Jenkins是什麼呢?就是一種持續整合專案的一款開源軟體,是用java寫的。部署簡單,中文介面,可一鍵從git clone、pull。也可以打包釋出,功能還是很多的,比如可以自動安裝jdk、git、maven等等。在專案構建前後執行相關操作,比如shell指令碼,也可以
Shell腳本一鍵擴展LVM新分區
shell腳本 lvm擴容 在線掃描 最近接到經理要求對RHEL7的LVM新分區擴容自動化,因為使用的是虛擬化平臺,故采用添加新磁盤的方式來做:#!/bin/bash##在線掃描新磁盤##Step1: Recognize New Hard Disk##Logdir=~/disk_logif [ !
使用shell腳本一鍵安裝zabbix並配置客戶端的自動發現選項
監控 shell zabbix 自動註冊 zabbix_agent 1.緣由: 我自己的ESXi服務器上上最近新加了好多虛擬主機,但我現在還不會安裝,使用,那種批量運維工具(saltstack,ansible,puppet等)。雖然還有一種方法:就是通過shell工具一次打開
shell腳本一鍵安裝LNMP菜單方式安裝
shell腳本一鍵安裝LNMP#!/bin/bash#定義軟件包變量Tnginx="nginx-1.6.0.tar.gz"nginx="nginx-1.6.0"Tcmake="cmake-2.8.6.tar.gz"cmake="cmake-
jenkins+Gitlab+maven+tomcat實現自動化集成、打包、部署。
linux 編譯 oracle system group org 51cto check soft 為什麽需要持續集成呢? 1.因為在開發的過程中,用於階段性地構建出產品。這樣可以更加清楚地審視產品的不足之處。2.由於在某些情況下,例如有緊急bug的時候,研發的版本更新可能
自開發自動拉群微信雲控系統,可實現全自動一鍵拉群
tco key return cati 劃線 除了 com off shm 微信自動拉群雲控系統源碼,全自動一鍵拉群。自動統計新加的好友,自動將所有新加好友一鍵拉群。服務器端下發群二維碼,手機端一鍵拉群。全自動大批量,同時拉群。 在系統的開發實現過程中,除了服務器端推送指
小程式 - 實現【一鍵複製】功能
小程式 - 實現【一鍵複製】功能 為啥想起使用【一鍵複製】功能?因為個人小程式裡,不許加外連結,很是頭疼,就想到一鍵複製連結,這是我剛寫的一個減一的小程式: 使用【一鍵複製】: wxml 檔案: <view> 官網:<text selectable='true' bin
Jenkins+SVN+maven+Tomcat構建自動化整合任務
安裝Jenkins方法詳解:https://www.cnblogs.com/lizhe860/p/9901257.html 一、安裝maven外掛 1.依次進入系統管理→外掛管理→可選外掛, 找到Maven Integration,並勾選,點選立即安裝。 2
shell腳本一鍵安裝redis集群
make onf 權限 and nload clu 清理 完成 dev 簡介: 明天再寫,上腳本 #!/bin/bash #-----------------------------------------------------------------------
windows下使用bat檔案一鍵釋出dot專案
直接上一個bat檔案比較好。 簡而言之就是完全通過windows命令列操作。 諸如: 1.進入專案資料夾 2.pull最新程式碼 3.使用msbuild.exe命令編譯 4.通過InstallUtil.
阿里雲 jenkins svn maven 構建自動化部署
第一步:下載 jdk 、tomcat、jenkins、maven jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html maven:http://maven.apach
一個簡單的shell指令碼:一鍵部署tomcat及釋出簡單程式指令碼
測試環境中一鍵部署的一個小指令碼,這裡記錄下,方便想聯絡的人進行參考 環境介紹: 作業系統cos7.4 jdk版本:1.8 中介軟體服務版本:tomcat7.0.75 ——————————————以下是指令碼內容—————————————————————————
Windows版Jenkins+SVN+Maven自動化部署環境搭建
前言 因今年公司新產品線較多,為了降低耦合,達到業務分離、重用,提高內部開發效率的目的,採用了基於服務元件、前後端分離的架構體系。與之前傳統單應用架構相比,系統部署、配置更加複雜,為了能夠頻繁地將軟體的最新版本,及時、持續地交付給測試團隊及質量控制團隊,以供評審,所以引入持續整合工具Jenkins,從而實現公
和我一起實現EditText一鍵清空功能
序 在實際專案中我們經常看到這樣的效果: 這就是我們常說的一鍵清除功能,Android並沒有自帶的API供我們使用,所以我們需要自己來編寫,下面我將介紹常見實現方式. 1.常見的實現方式 在EditText的基礎上進行拓展,俗稱