流水線視圖能夠很直觀地看到每一步執行的時間和進度,方便追蹤部署過程當中的每個環節。node
搭建 jenkins 參考 上一篇文章git
本文目的是搭建一個簡單的 pipeline,當 git 倉庫有提交時,builder server
進行構建和測試,完成以後 deploy server
進行部署。github
本地 -> SCM: 提交代碼 SCM -> Build Server: 觸發 jenkins 任務 Build Server: 啓動 pipeline Build Server -> Deploy Server: 部署服務
SCM
Source Code Management,如 githubBuild Server
jenkins 所在機器,負責構建Deploy Server
線上服務所在機器首先建立一個 Task,而後選擇流水線模板web
在這裏能夠配置 pipeline 的腳本,definition 能夠選擇 Pipeline script
或 Pipeline script from SCM
。docker
選擇前者後,jenkins 腳本須要在下方填寫,當任務啓動後,jenkins 會執行這裏配好的命令;選擇後者後,任務啓動後,jenkins 會去執行 SCM 倉庫下配置的 script path 下的腳本。shell
一句話說,二者區別在於腳本是寫在 jenkins 配置裏,仍是寫在你的代碼倉庫裏。因此修改腳本的時候在 jenkins 裏配就行,方便調試,沒問題以後使用 SCM 管理更好。npm
以 node 服務舉例,部署過程分爲四步:segmentfault
這個腳本以下,須要將 [user] 和 [ip] 替換成 deploy server 的登陸用戶和 ip:api
pipeline { agent any stages { stage('Build') { steps { sh "npm install" } } stage('Test') { steps { sh "npm test" } } stage('Deploy') { steps { sh """ ssh -o stricthostkeychecking=no [user]@[ip] " source /etc/profile cd /root/projects/my-api-server git pull npm install pm2 reload wool-digger-api " """ } } } }
固然這是一個很粗糙的構建方式,能夠稍後查看 使用 docker 進行改造。bash
主要概念有
agent
指示 Jenkins 分配一個執行器和工做空間來執行下面的Pipelinestage
表示這個 Pipeline 的一個執行階段,對應流水線中各個環節steps
表示在這個 stage 中每個步驟sh
命令用來執行一條 shell 語句。 這個配置文件被執行後:
首先 jenkins 會在工做區(通常來講在 ~/.jenkins/workspace/
)下拉取配置倉庫指定分支的代碼
pull 成功後進行 npm install
(Build)
build 成功以後進行 npm test
(Test)
test 成功後遠程執行一段腳本,即登陸 deploy server 並 cd 到服務目錄,而後進行服務的更新重啓操做。
注意上面 Deploy 中有一行 source /etc/profile
,這是 login shell
和 no-login shell
的不一樣。
若是使用 ssh 登陸再執行命令和腳本,用戶會得到 login shell,shell 首先會加載 /etc/profile
文件,而後依次嘗試 ~/.bash_profile
、~/.bash_login
和 ~/.profile
。
而若是直接使用 ssh 遠程執行命令和腳本,如上面的 ssh -o
,它不會去執行 /etc/profile
文件,而會去用戶的 HOME 目錄檢查 .bashrc
並加載。因此在 /etc/profile
中設置的 path 不會生效。若是 nvm 在此文件中,那麼 node、npm、pm2 等等就找不到了。
解決方法能夠在 shell 腳本中先手動加載配置文件。
在這裏能夠配置 pipeline 觸發的類型
啓動該項後能夠經過 GitHub 的 webhook 來觸發,參考 Github Plugin 文檔
這裏說一下最簡單的配置,即手動配置。
在 Jenkins -> 系統管理 -> 系統設置中,能夠找到 Git 配置,點擊右邊的問號按鈕,能夠看到默認的 jenkins hook 地址。
通常來講默認都是 $JENKINS_BASE_URL/github-webhook/
。拿到這個地址後,添加到 github 的 webhook 中。
注意 這個地址是沒有項目信息的,由於 github 調用這個 hook 地址時,會把倉庫信息傳過去,因此就只剩在 jenkins 中把 pipeline 和這個 git 倉庫關聯起來。這須要在 pipeline 中選擇 Pipeline script from SCM
並填寫 git 地址。
啓動該項後,jenkins 將定時對 SCM 倉庫進行輪詢,當倉庫有新提交時,會自動觸發 pipeline。
Schedule 填寫規則與 crond 相似,如 H/5 * * * *
表明每 5 分鐘查詢一次。詳細規則能夠點擊右邊的問號。
點擊 當即構建
,或去倉庫提交一個 commit(若是配置了 github hook),或提交一個 commit 並等待(若是配置了輪詢 SCM),而後就能看到咱們的第一個 pipeline 啓動了!