參考官方提供的安裝教程:https://jenkins.io/doc/book/installing/,可以發現官方推薦使用Docker進行安裝。雖然用Docker有很多好處,但也有缺點。
下面是各種安裝方法:
無論怎么的安裝方法,jenkins在啟動時,都會在運行用戶的目錄下生成.jenkins文件夾,此文件夾用於存放配置和項目文件,因此,想要備份和遷移jenkins的可以在此文件夾入手。
一、Docker
Docker運行簡單,無需關心Java環境,但弊端是不能使用Docker版的Jenkins來打包Docker,但可以使用子節點的形式來實現。還有就是Docker啟東市參數的配置其實是比較少的,沒那么靈活。其實研究到最后你會發現它的運行也就是java -var jenkins.war的形式,那么可以通過改寫容器里面的進程啟動參數來增加可配置參數的靈活性。
# 下載鏡像 # 最新版 docker pull jenkinsci/blueocean # 指定版 # docker pull jenkinsci/blueocean:1.3.6 # 運行 docker run \ -u root \ --rm \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
說明:
1 (可選) jenkinsci/blueocean
關閉時自動刪除Docker容器(下圖中的實例化)。如果您需要退出Jenkins,這可以保持整潔。2 (可選) jenkinsci/blueocean
在后台運行容器(即“分離”模式)並輸出容器ID。如果未指定此選項,則會在終端窗口中輸出正在運行的此容器的Docker日志。3 映射(即“發布”) jenkinsci/blueocean
容器的端口8080到主機上的端口8080。第一個數字表示主機上的端口,而最后一個表示容器的端口。因此,如果您-p 49000:8080
為此選項指定,則將通過端口49000訪問主機上的Jenkins。4 (可選)將 jenkinsci/blueocean
容器的端口50000 映射到主機上的端口50000。只有在其他計算機上設置了一個或多個基於JNLP的Jenkins代理時才需要這樣做,而這些代理又與jenkinsci/blueocean
容器交互(充當“主”Jenkins服務器,或簡稱為“Jenkins master”)。基於JNLP的Jenkins代理默認通過TCP端口50000與Jenkins主機通信。您可以通過“配置全局安全性” 頁面更改Jenkins主服務器上的此端口號。如果您要將JNSLP代理的 Jenkins主服務器TCP端口 值更改為51000(例如),那么您需要重新運行Jenkins(通過此docker run …
命令)並指定此“發布”選項,例如-p 52000:51000
,其中最后一個值與Jenkins主服務器上的此更改值匹配,第一個值是Jenkins主服務器上的端口號,基於JNLP的Jenkins代理通過該端口號與Jenkins主服務器進行通信 - 即52000。5 (可選但強烈建議)使用名稱 /var/jenkins_home
將容器中的目錄映射到Docker 卷jenkins-data
。如果此卷不存在,則此docker run
命令將自動為您創建卷。如果您希望每次重新啟動Jenkins時都保持Jenkins狀態(通過此docker run …
命令),則需要此選項 。如果未指定此選項,則Jenkins將在每次重新啟動后有效地重置為新實例。
注意: 所述的jenkins-data
體積也可以獨立地使用所創建的docker volume create
:命令docker volume create jenkins-data
代替映射/var/jenkins_home
在Docker卷的目錄中,您還可以將此目錄映射到計算機本地文件系統上的目錄。例如,指定該選項-v $HOME/jenkins:/var/jenkins_home
會將容器的/var/jenkins_home
目錄映射 到 本地計算機上目錄中的jenkins
子目錄,該子目錄$HOME
通常為/Users/<your-username>/jenkins
或/home/<your-username>/jenkins
。6 (可選) /var/run/docker.sock
表示Docker守護程序通過其偵聽的基於Unix的套接字。此映射允許jenkinsci/blueocean
容器與Docker守護程序通信,如果jenkinsci/blueocean
容器需要實例化其他Docker容器,則需要該守護程序。如果運行語法包含agent
帶docker
參數的部分的聲明性管道,則此選項是必需的 - 即agent { docker { … } }
。在Pipeline Syntax頁面上閱讀更多相關信息 。7 jenkinsci/blueocean Docker鏡像
。如果尚未下載此鏡像,則此docker run
命令將自動為您下載鏡像。此外,如果自上次運行此命令后發布了對此映像的任何更新,則再次運行此命令將自動為您下載這些已發布的映像更新。
注意:也可以使用以下docker pull
命令單獨下載(或更新)此Docker鏡像 :docker pull jenkinsci/blueocean
文件主目錄:
上面安裝指定了-v jenkins-data:/var/jenkins_home,那么此時在Docker容器目錄已經變了,不再是用戶目錄下的.jenkins文件夾,變成/var/jenkins_home文件夾;當這個選項沒有填寫時才是默認的.jenkins文件夾。如果想要變成宿主機也有這個文件夾映射,需要這樣寫-v /var/jenkins_home:/var/jenkins_home。
查看日志:
此時的日志沒有在容器里沒有指定的位置,所以只能通過docker logs <name>進行日志的查看。
二、Tomcat部署war包
這個方法最簡單,直接交給tomcat容器,並且jvm參數這些也同樣由tomcat進行配置;那么此時可以配置的選項已經有所折扣,主目錄默認放在用戶目錄下的.jenkins文件夾;而進入系統設置后會提示“代理服務器設置錯誤”等信息,且無法修復。
# 在此地址下載war包http://mirrors.jenkins.io/war-stable/ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -O jenkins.war # 移動到tomcat目錄 mv jenkins.war $TOMAT_HOME/webapps/
# 最后訪問地址
http://$TOMCAT_IP:$TOMCAT_PORT/jenkins
主目錄:
可以修改,不過需要結合Tomcat的啟動腳本,把這些參數加上去:
日志:
變成這個:/data/service/tomcat/logs/catalina.out
官方參考:
https://wiki.jenkins.io/display/JENKINS/Tomcat
三、yum源安裝
這個應該是網上最多人用的方式,其運行原理也就是java -jar jenkins.war,同時你只能通過這種方式安裝最新版本,某些指定版本不一定可以安裝的到,當然這都是可以解決的,比如在這里https://pkg.jenkins.io/redhat-stable/下載特定的RPM包進行安裝即可,同樣RPM包沒有那么多指定版本可以選擇,但可以下載war包替換即可實現指定版本的安裝;並且需要JDK的路徑必須為如下所示:
/usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java/usr/bin/java
安裝好后的文件如下:
/etc/init.d/jenkins /etc/logrotate.d/jenkins /etc/sysconfig/jenkins /usr/lib/jenkins /usr/lib/jenkins/jenkins.war /usr/sbin/rcjenkins /var/cache/jenkins /var/lib/jenkins /var/log/jenkins
安裝腳本:
# 安裝依賴 yum install -y epel-release wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key # 安裝jenkins yum install jenkins
主目錄:
在配置文件/etc/sysconfig/jenkins下進行配置,默認為:/var/lib/jenkins,同時這個文件也是可以配置jenkins的啟動參數等。
日志:
在目錄/var/log/jenkins下
官方參考:
https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions
四、war包的java -jar運行
目前這種方式應該是最好的,采用java -jar的運行,參數可以隨意指定,此運行時基於jetty的容器。
# 下載war包 # 在此地址下載war包http://mirrors.jenkins.io/war-stable/ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -O jenkins.war
使用nohup進行運行,此方法可以指定控制台的日志輸出位置,其實上面幾種方式都是這樣的方式輸出日志的:
nohup java -jar jenkins.war > /tmp/jenkins.log 2>&1
命令參數如下:
命令行參數
Jenkins通常使用端口8080啟動。但是,如果啟動了其他Web服務,您可能會發現此端口已被占用。您可以使用希望Jenkins運行的端口
--httpPort=
$HTTP_PORT
在哪里指定其他端口$HTTP_PORT
。其他命令行參數包括:
命令行參數
描述
-help 顯示所有可用選項及其用法 --httpPort=$HTTP_PORT
使用標准http協議在端口$HTTP_PORT上運行Jenkins偵聽器。默認端口為8080.要禁用(因為您使用的是https),請使用端口
-1
。此選項不會影響在Jenkins邏輯(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定義。--httpListenAddress=$HTTP_HOST
將Jenkins綁定到$HTTP_HOST表示的IP地址。默認值為0.0.0.0 - 即偵聽所有可用接口。
例如,要僅偵聽來自localhost的請求,您可以使用: - httpListenAddress=127.0.0.1--httpsPort=$HTTP_PORT
在端口$HTTP_PORT上使用HTTPS協議。此選項不會影響在Jenkins邏輯(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定義。
--httpsListenAddress=$HTTPS_HOST
綁定Jenkins以偵聽$HTTPS_HOST表示的IP地址上的HTTPS請求。
--http2Port=$HTTP_PORT 在端口$HTTP_PORT上使用HTTP/2協議。此選項不會影響在Jenkins邏輯(UI,JNLP文件等)中生成的根URL; 它由全局配置中指定的Jenkins URL定義。 --http2ListenAddress=$HTTPS_HOST 綁定Jenkins以偵聽$HTTPS_HOST表示的IP地址上的HTTP/2請求。 --prefix=$PREFIX
運行Jenkins以在URL末尾包含$PREFIX。
例如,要使Jenkins可以訪問,請設置--prefix=/jenkins
http
://
myServer
:8080/jenkins
--ajp13Port=$AJP_PORT
使用標准AJP13協議在端口$AJP_PORT上運行Jenkins監聽器。默認值為端口8009.要禁用(因為您使用的是https),請使用端口
-1
。--ajp13ListenAddress=$AJP_HOST
將Jenkins綁定到$AJP_HOST表示的IP地址。默認值為0.0.0.0 - 即偵聽所有可用接口。
--argumentsRealm.passwd.$ADMIN_USER
設置用戶$ADMIN_USER的密碼。如果啟用了Jenkins安全性,則必須以$ADMIN_USER身份登錄才能配置Jenkins或Jenkins項目。注意:您還必須指定此用戶具有管理員角色。(見下面的下一個論點)。
--argumentsRealm.roles.$ADMIN_USER=admin
設置$ADMIN_USER是管理用戶,如果啟用了Jenkins的安全性,則可以配置Jenkins。有關更多信息,請參閱保護Jenkins。
--sessionTimeout=$SESSION_TIMEOUT 將http會話超時值設置為$SESSION_TIMEOUT分鍾。默認為webapp指定的內容,然后是60分鍾
--useJmx 啟用Jetty JMX(參見文檔) -Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n
設置調試開啟,您可以訪問$DEBUG_PORT上的調試。
-logfile=$LOG_PATH/winstone_`date +“%Y%m-%d_%H-%M”`.log
記錄到所需的文件
-XX:PermSize=512M -XX:MaxPermSize=2048M -Xmn128M -Xms1024M -Xmx2048M
官方參考:
https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins
五、反向代理設置
其實無需在Jenkins的jetty容器配置SSL,只需在Nginx配置即可。
# 普通方向代理 server { listen 80; server_name www.jenkins.com; client_max_body_size 200m; location / { sendfile off; proxy_pass http://127.0.0.1:8080; proxy_redirect default; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_max_temp_file_size 0; #this is the maximum upload size client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffering off; proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54 proxy_set_header Connection ""; # Clear for keepalive } }
SSL反向代理 server { listen 443; server_name www.jenkins.com; ssl on; root html; index index.html index.htm; ssl_certificate /data/service/nginx_vhost/cert/215082065120461.pem; ssl_certificate_key /data/service/nginx_vhost/cert/215082065120461.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { sendfile off; proxy_pass http://127.0.0.1:8080; proxy_redirect default; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_max_temp_file_size 0; #this is the maximum upload size client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffering off; proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54 proxy_set_header Connection ""; # Clear for keepalive } }
官方參考:
https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy
六、總結
1、war包使用java -jar運行其實是個趨勢,Docker雖然快,但也有弊端。
2、yum其實配置最好,什么項都非常清晰,只是目錄規划不能自定義,需要后期維護。
3、war包直接運行最靈活,要什么參數都可以自行配置。
4、tomcat部署最弱,依托於tomcat容器后續配置可能要兼顧考慮。
5、每個版本的安裝各有千秋,適合自己的才是最好的。我個人覺得yum安裝還是不錯的,至少配置是標准的。
6、對於運行的用戶來說,root無疑是最爽的,但存在風險,容易rm -rf /,但想一想,對於這種情況強制分配權限就可以解決,但可能會存在BUG,如果確實要做,可以通過新建jenkins用戶實現。
七、一鍵安裝腳本
https://github.com/easonjim/centos-shell/tree/master/jenkins
參考:
https://www.blazemeter.com/blog/how-to-install-jenkins-on-the-apache-tomcat-server(tomcat)
https://www.vultr.com/docs/how-to-install-jenkins-on-centos-7(yum)
https://jenkins.io/doc/book/installing/ (官方教程)
https://blog.whsir.com/post-2505.html
https://ken.io/note/centos7-jenkins-install-tutorial
https://www.cnblogs.com/stulzq/p/9291237.html