CentOS下安裝Jenkins(Docker/war/tomcat/java -jar)

參考官方提供的安裝教程:https://jenkins.io/doc/book/installing/,能夠發現官方推薦使用Docker進行安裝。雖然用Docker有不少好處,但也有缺點。html

下面是各類安裝方法:java

不管怎麼的安裝方法,jenkins在啓動時,都會在運行用戶的目錄下生成.jenkins文件夾,此文件夾用於存放配置和項目文件,所以,想要備份和遷移jenkins的能夠在此文件夾入手。nginx

1、Dockergit

Docker運行簡單,無需關心Java環境,但弊端是不能使用Docker版的Jenkins來打包Docker,但可使用子節點的形式來實現。還有就是Docker啓東市參數的配置實際上是比較少的,沒那麼靈活。其實研究到最後你會發現它的運行也就是java -var jenkins.war的形式,那麼能夠經過改寫容器裏面的進程啓動參數來增長可配置參數的靈活性。github

# 下載鏡像
# 最新版
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

說明:web

可選jenkinsci/blueocean關閉時自動刪除Docker容器(下圖中的實例化)。若是您須要退出Jenkins,這能夠保持整潔。
2 可選jenkinsci/blueocean在後臺運行容器(即「分離」模式)並輸出容器ID。若是未指定此選項,則會在終端窗口中輸出正在運行的此容器的Docker日誌。
3 映射(即「發佈」)jenkinsci/blueocean容器的端口8080到主機上的端口8080。第一個數字表示主機上的端口,而最後一個表示容器的端口。所以,若是您-p 49000:8080爲此選項指定,則將經過端口49000訪問主機上的Jenkins。
可選)將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。
可選但強烈建議使用名稱 /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容器,則須要該守護程序若是運行語法包含agentdocker參數部分的聲明性管道,則此選項是必需的 - 即
agent { docker { …​ } }Pipeline Syntax頁面上閱讀更多相關信息 
7 jenkinsci/blueocean Docker鏡像若是還沒有下載此鏡像,則此docker run命令將自動爲您下載鏡像。此外,若是自上次運行此命令後發佈了對此映像的任何更新,則再次運行此命令將自動爲您下載這些已發佈的映像更新。
注意:也可使用如下docker pull 命令單獨下載(或更新)此Docker鏡像 
docker pull jenkinsci/blueocean

文件主目錄:docker

上面安裝指定了-v jenkins-data:/var/jenkins_home,那麼此時在Docker容器目錄已經變了,再也不是用戶目錄下的.jenkins文件夾,變成/var/jenkins_home文件夾;當這個選項沒有填寫時纔是默認的.jenkins文件夾。若是想要變成宿主機也有這個文件夾映射,須要這樣寫-v /var/jenkins_home:/var/jenkins_home。shell

查看日誌:apache

此時的日誌沒有在容器裏沒有指定的位置,因此只能經過docker logs <name>進行日誌的查看。windows

2、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

3、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

4、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

參考Oracle Java的這些選項

官方參考:

https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins

5、反向代理設置

其實無需在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

6、總結

一、war包使用java -jar運行實際上是個趨勢,Docker雖然快,但也有弊端。

二、yum其實配置最好,什麼項都很是清晰,只是目錄規劃不能自定義,須要後期維護。

三、war包直接運行最靈活,要什麼參數均可以自行配置。

四、tomcat部署最弱,依託於tomcat容器後續配置可能要兼顧考慮。

五、每一個版本的安裝各有千秋,適合本身的纔是最好的。我我的以爲yum安裝仍是不錯的,至少配置是標準的。

六、對於運行的用戶來講,root無疑是最爽的,但存在風險,容易rm -rf /,但想想,對於這種狀況強制分配權限就能夠解決,但可能會存在BUG,若是確實要作,能夠經過新建jenkins用戶實現。

7、一鍵安裝腳本

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

http://www.javashuo.com/article/p-vjyyfiqf-z.html

相關文章
相關標籤/搜索