咱們的正主Jenkins終於要來了,哈哈哈,老規矩,看一下Jenkins是幹嗎的,百度百科走起:vue
實現代碼部署的方式不少,咱們能夠在遠端去pull代碼,而後運行 npm install && npm run build等等的動做,也能夠在本地打包好代碼後用上一篇的方法將其傳輸到服務器上(也能夠用ftp軟件來進行傳輸),總之很麻煩了。
而如今只須要配置一個jenkins任務,在代碼push到github以後直接執行這個jenkins任務就能夠了,是否是很簡單,並且,jenkins來能夠去配置一個連接github倉庫的webhook鉤子,到時候只要咱們push代碼到github倉庫的某個分支,jenkins對應的任務就會自動執行,真的是居家旅行,殺人越貨,不對,是代碼部署的必備神器呀。
node
好啦,那麼接下來咱們就去giao起來吧。
react
首先,jenkins能夠脫離docker安裝在服務器上,可是既然咱們有了docker,那就直接由docker來拉取運行一個jenkins容器吧。
webpack
docker run \
--rm \
-u root \
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean
複製代碼
\是換行符啦,一行放不下分開放。-u 服務器用戶名,-p仍是映射端口,咱們訪問服務器的8080端口就會訪問到這個容器的8080端口了(jenkins服務默認開啓的就是8080端口),還有一句 比較重要nginx
-v "$HOME":/home
複製代碼
這個意思就是jenkins訪問的/home目錄,其實就是你服務器的$HOME目錄(其實默認的就是~目錄啦,~就是/root啦),上面兩句都是自動的,能夠不用理會,jenkinsci/blueocean就是咱們的鏡像名字,藍海(blueocean)是一個UI比較精美的jenkins的工做流任務臺,我猜測它的做者確定是海賊王的影迷,233333git
這個時候咱們能夠訪問 http://ip地址:8080 來配置jenkins了。github
首先須要解鎖一下jenkins:web
解鎖以後須要去選擇一些jenkins的插件配置,若是不知道選擇什麼的話,就選擇默認的插件吧,後面再自行更改。
接下來建立一個管理員帳號,而後登錄進去就能夠了。vue-cli
好的,下一個步驟咱們該去建立任務而後執行了,在這裏咱們先停下來去作另外一個事情吧,那就是在本地的web項目中建立一個Jenkinsfile文件(注意,沒有後綴名喲),這個文件就像gulp中的gulpfile.js、webpack中的webpack.config.js同樣來編寫任務的,格式也很簡單:docker
pipeline {
# 這裏是要依賴的鏡像,由於咱們的代碼須要在服務器上打包,因此須要node環境
# 在這裏配置一下讓那個docker去啓動一個node的容器(啓動的時候若是沒有node:8.16.1-alpine鏡像會自動pull,不用擔憂)
# node運行後端口爲3000:3000(這種端口映射不用說了吧)
agent {
docker {
image 'node:8.16.1-alpine'
args '-p 3000:3000'
}
}
# 配置環境變量
environment {
CI = 'true'
}
# 任務的具體動做(每個stage都是一個動做),形式是流式的,說白了就是上面的執行完下面的執行
stages {
# 首先先去打包構建
stage('Build') {
# steps表明步驟,一個stage能夠設置多個steps,每個sh後面跟着的就是這個步驟所執行的代碼
# 一個steps也能夠設置多個sh
steps {
# 這裏須要先去下載項目全部的包(這就是咱們運行node容器的緣由,沒有node下載個毛線)
# 使用yarn是由於npm實在是太慢了(不會用yarn就去學一下),yarn不須要單獨下載,node:8.16.1-alpine鏡像中已經下載好了
# 若是用到node-sass的話配置一下node-sass的下載地址,否則就算是yarn下載起來也是賊慢的
# 再而後執行打包任務
sh '''
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
yarn
yarn build
'''
}
}
# 打包完了理論上還應該有test的stage,算了算了,一切從簡
# 直接部署代碼
stage('Deliver') {
# 先清空/home/nginx/www/react-mixture目錄,爲何是/home而不是~路徑呢?由於咱們在啓動jenkins
# 容器的時候就配置了,jenkins訪問/home其實就是在訪問$HOME(就是~,也就是/root)
# 而後把打包出來的build文件夾裏的全部文件扔過去(vue-cli打包後應該是dist目錄),nginx服務器就能夠訪問到這些文件了,部署就完成了
steps {
sh '''
rm -rf /home/nginx/www/react-mixture/*
mv ./build/* /home/nginx/www/react-mixture
'''
}
}
}
}
複製代碼
這個配置是否是很是很是的簡單呢,哈哈哈,而後把代碼提交到github倉庫就能夠了。
可是不要高興的太早,個人乞丐版服務器運行yarn build基本上必失敗,沒辦法,運行內存過小了,因此我只能選擇在本地打包好代碼提交到github,jenkins去幫我直接移動代碼到nginx了。大家的服務器若是ok的話能夠安裝上面的來,和我同樣乞丐版的能夠參考下面的Jenkinsfile:
pipeline {
# 不須要node容器了
agent any
environment {
CI = 'true'
}
# 下面也沒啥看的,直接把代碼從githu分支里拉出來後扔到nginx www裏了
stages {
stage('Build') {
steps {
sh ''
}
}
stage('Deliver') {
steps {
sh '''
rm -rf /home/nginx/www/react-mixture/*
mv ./build/* /home/nginx/www/react-mixture
'''
}
}
}
}
複製代碼
ok,Jenkinsfile寫好後就能夠去jenkins裏建立個任務啦,一步一步來喲。
任務流是Jenkins中的基本單元,咱們分開步驟來作吧:
任務創建完成後會自動跳轉到任務的詳情頁(也能夠從任務列表中點擊任務進入詳情),而後選擇在 BlueOcean中進行操做(主要是由於UI好看)。
而後每次任務的運行均可以在下面table中查看到,點擊進去詳情還能夠看到這次運行的具體狀況。
若是失敗的話查看一下哪裏失敗了再來,成功的話那就ok了,此次自動部署就結束了啊,很簡單喲,須要注意的是,遠程鏈接總是斷掉,並且jenkins仍是崩掉,從新鏈接服務器,從新docker run就好啦。
ok,若是咱們想作到每次push代碼都會自動執行任務的話,還須要一些操做喲。
咱們先去在jenkins首頁中找到系統設置:
而後找到Github後點擊高級設置後勾選 「爲 Github 指定另一個 Hook URL」,下面的url地址不要改動就行了,而後就能夠保存啦。
而後去到github倉庫中進入Settings設置界面選擇web hook後點擊add webhook去添加一個鉤子:
而後對鉤子作一些配置,填入剛纔的URL,選擇那些動做能夠觸發鉤子等等:
這樣配置完成後,到咱們在對應的分支進行push的時候,jenkins就會自動的執行咱們配置好的任務,進行自動化部署啦。
進行到這裏確定很是不容易吧,我只是爲你們指出了一條「較爲簡單」的直達路線,可是具體的關於自動化部署的知識仍是須要你們本身慢慢摸索學習,若是碰到問題也不要慌張,一點一點的解決就好啦,好啦,就說這麼多!
がんばれ、少年!