本文以部署 Spring boot + Maven 項目爲例,使用碼雲做爲代碼託管倉庫,在 CentOS 7 上搭建 Jenkins 持續集成環境。java
Jenkins 是基於 Java 開發的持續集成工具,須要在 Java 環境下運行。用下面命令查看系統是否已安裝 Java:git
yum list installed | grep jdk
若是沒有,使用 yum search
命令查找 openjdk 版本,選擇合適的 jdk 進行安裝:shell
yum search openjdk
yum -y install java-1.8.0-openjdk-devel
驗證 Java 是否安裝成功:apache
java -version
依次運行如下兩條命令:瀏覽器
wget http://repos.fedorapeople.org... -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven
驗證 Maven 是否安裝成功:bash
mvn -v
直接經過 yum 安裝,安裝完成後查看版本驗證是否安裝成功:服務器
yum -y install git
git --version
依次運行如下三條命令:app
sudo wget https://pkg.jenkins.io/redhat... -O /etc/yum.repos.d/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat...
yum -y install jenkins
若是以前從 Jenkins 導入過 key,那麼 rpm --import 將失敗,由於已經有一個 key 了。忽略它,繼續執行 install 便可。ssh
啓動 Jenkins,而且設置開機自啓動:jvm
systemctl start jenkins.service
chkconfig jenkins on
Jenkins 默認使用8080端口,訪問如下連接便可看到 Jenkins 的 Web 界面:
http:// <服務器地址>:8080
若是沒法訪問,檢查一下防禦牆,是否有開放端口,或使用命令 netstat -ntulp
查看端口是否被佔用。
首次進入 Jenkins 須要輸入管理員密碼,使用如下命令查看初始密碼:
cat /var/lib/jenkins/secrets/initialAdminPassword
選擇默認的 install suggested plugins
安裝插件,等待安裝完成後依照步驟建立用戶,建立完成後便可登入。
進入 Manage Jenkins
-> Global Tool Configuration
,依次配置 JDK、Git 和 Maven 路徑。
使用 yum 安裝的軟件不會幫咱們配置環境變量,直接使用命令echo $JAVA_HOME
是看不到路徑的。
先用如下命令查看路徑:
which java
看到的結果是 /usr/bin/java
,但實際上這只是個軟鏈接,並非 JDK 真正的所在目錄。
繼續使用如下命令查看:
ls -l /usr/bin/java
看到 /usr/bin/java
指向了 /etc/alternatives/java
,很遺憾,還不是咱們要找的真正路徑。
繼續追蹤:
ls -l /etc/alternatives/java
結果指向了 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java
,不一樣版本的 JDK 目錄名可能有些不一樣,這就是 JDK 真正所在的地方。
同理可得到 Maven 的所在路徑。
進入 Manage Jenkins
-> Manage Plugins
,搜索並安裝 Publish Over SSH
和 Maven Integration
兩個插件, Git Plugins
插件已經默認安裝上了,咱們無需再安裝。
配置 SSH 免密碼登陸
在配置插件以前,咱們先在 Jenkins 服務器上生成密鑰對。運行如下命令切換到 jenkins 用戶:
sudo su jenkins
若是沒法切換,則打開 /etc/passwd
文件,找到 jenkins 那一行,將 /bin/fasle
改爲 /bin/bash
。
切換成功後,命令提示符的用戶名多是 bash-4.2$
,想要正常顯示用戶名的話,先切換回 root 用戶,執行如下操做:
編輯文件 vi ~/.bash_profile
加入語句 export PS1='[u@h W]$'
當即生效 source ~/.bash_profile
再切換到 jenkins 用戶,就顯示正常了。接下來運行如下命令生成密鑰對:
ssh-keygen -t rsa
一路按回車完成,會在 /var/lib/jenkins/.ssh/
目錄下生成 id_rsa
和 id_rsa.pub
兩個文件。
將 id_rsa.pub
文件裏的內容追加到應用服務器上的 /root/.ssh/authorized_keys
文件末尾,每行一個 key,注意是應用服務器。重啓應用服務器上的 ssh 服務:
systemctl restart sshd.service
如今 Jenkins 能夠免密碼登陸應用服務器了,以 jenkins 用戶身份運行命令來測試一下:
ssh root@<應用服務器地址>
首次鏈接會有確認提示,輸入 yes 便可。這步很重要,若是第一次沒有手動鏈接確認,Jenkins 會連不上。
配置 Public over SSH 插件
進入 Manage Jenkins
-> Configure System
,填寫 Publish over SSH
設置。
Path to key:填寫剛剛生成的 id_rsa 密鑰文件的路徑。
Name:服務名,隨意填寫。
HostName:應用服務器的 IP 地址或域名。
Username:登陸應用服務器的用戶身份。
Remote Directory:遠程目錄, 應用服務器上存放應用的目錄,Jenkins 會把應用拷貝至此目錄下。請確保此目錄存在。
save~
點擊 New Item
新建任務,隨意輸入任務名,選擇 Maven project
, ok。
在General
,勾選 Discard old builds
,能夠設置最多保留構建文件多少天,和最多保留多少個構建文件,否則每次構建生成的文件都會保留,佔用磁盤空間。
配置遠程代碼倉庫地址,Jenkins 會從該地址拉取代碼。注意此處若是提示沒法讀取倉庫,有多是:
勾選 Add timestamps to the Console Output
,在控制檯輸出構建過程。
填寫 Maven 打包指令,-DMaven.test.skip=true 表示跳過測試。
勾選 Run only if build succeeds
,選擇 Send files or execute commands over SSH
。
接下來就是設置 build 完以後,把 jar 包從 Jenkins 服務器拷貝到應用服務器上,並運行。
Name:選擇以前建立的服務。
Source files:maven 打包後生成的 jar 包,即要拷貝到應用服務器運行的程序,可填多個,英文逗號分隔。
Remove prefix:忽略前綴,咱們只須要拷貝 target 下的 jar 包,不須要在應用服務器上生成 target 目錄。
Remote directory:目標文件夾,會繼承全局設置,例如此處會把 jar 包拷貝到 /usr/local/app/demo
目錄下。
Exec command:拷貝完成後,在應用服務器上執行的命令或腳本。這裏只是簡單地殺掉已啓動的舊程序,並運行新程序。
save
-> build now
,構建成功後,打開瀏覽器訪問你的站點吧~
其實整個流程不是很複雜,Jenkins 從遠程代碼庫拉取代碼 -> 調用 maven 指令將項目打包 -> Jenkins 將打包好的文件拷貝到遠程應用服務器 -> 在遠程應用服務器上執行 shell 指令,啓動程序。其中 Jenkins 全部在遠程服務器上的操做都是經過 SSH 完成的。 經過 yum 安裝 Jenkins 和 Java 比較方便,可是在配置的時候相對麻煩,安裝路徑要本身找,配置 SSH 的時候也是要用 jenkins 用戶身份,而不是 root,若是採用解壓縮包的方式就比較自由一些。