使用docker,jenkins自動化部署前端和nodejs項目

環(huán)境準備

CentOS 7(64位)
Docker安裝

yum -y install docker-ce
systemctl start docker
systemctl enable docker

Jenkins安裝

1、搜索拉取jenkins鏡像
docker search jenkins
docker pull jenkins/jenkins
首先需要新建文件夾,用來掛載docker目錄
mkdir -pv /var/jenkins_home
修改目錄權限
 chown -R 1000 /var/jenkins_home
2、運行鏡像
docker run --name jenkins -p 8088:8080 -p 50000:50000 \
--restart=always -u root \
-v /var/run/docker.sock:/var/run/docker.sock  \
-v $(which docker):/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /var/lib/docker/tmp:/var/lib/docker/tmp \
-v /var/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins

參數(shù)說明:
  --restart=always #Docker重啟后該容器也為隨之重啟
  -u root          
#以root的身份去運行鏡像(避免在容器中調(diào)用Docker命令沒有權限)
#最好使用docker用戶去運行
-v $(which docker):/bin/docker
#將宿主機的docker命令掛載到容器中
#可以使用which docker命令查看具體位置
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的進程可以通過它與Docker守護進程進行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
#libltdl.so.7是Docker命令執(zhí)行所依賴的函數(shù)庫
#容器中l(wèi)ibrary的默認目錄是 /usr/lib/x86_64-linux-gnu/
#把宿主機的libltdl.so.7 函數(shù)庫掛載到該目錄即可
#可以通過whereis libltdl.so.7命令查看具體位置
#centos7位置/usr/lib64/libltdl.so.7
#ubuntu位置/usr/lib/x86_64-linux-gnu/libltdl.so.7

配置Jenkins

打開瀏覽器訪問:http://[你的ip地址]:[你的Docker容器映射的端口號]
等待jenkins初始化加載完成
在下面路徑在獲取初始化密碼

/var/jenkins_home/secrets/initialAdminPassword

插件可以選擇推薦安裝,也可以不安裝,進入dashboard頁面去安裝

jenkins

在下圖的可選插件中去搜索安裝,安裝好的可以在已安裝中查看
目前jenkins版本為Jenkins 2.272
插件安裝

對于前端來講,主要安裝的插件就是nodejs、git,ssh等具體按需安裝


nodejs

ssh

安裝完插件之后要去配置一下,需要什么就配置什么,按需配置


配置

環(huán)境準備好了,開始進行部署,

首先要有一個git倉庫,可以是github,gitee,gitea,gitlab等中的一個
準備好之后,我們來自動部署一個前端項目例如vue項目和一個后端項目例如nodejs項目,可以將兩者放在一起,也可以單獨作為一個倉庫
現(xiàn)在我們新建兩個倉庫:

安裝好express和vue腳手架

  > npm install -g @vue/cli
  > npm install -g express
 
1、使用express初始化一個項目
   express node-demo
2、使用vue腳手架初始化一個項目
   vue create vue-demo

將項目存放在我們本地的gitea中如圖:

git倉庫

打開jenkins軟件,新建一個任務
設置好git地址,選擇構建寫入啟動的shell命令


vue-demo

構建環(huán)境

構建
# 執(zhí)行的shell
CONTAINER_ID=$(docker ps -a -q -f name=vue-demo)
IMAGE_ID=$(docker images | grep "vue-demo" | awk '{print $3}')
echo $CONTAINER_ID
echo "停止vue-demo"
npm config set registry https://registry.npm.taobao.org
npm install
npm run build
if [ -n "$CONTAINER_ID" ]; then
  docker stop $CONTAINER_ID
  echo "刪除vue-demo容器"
  docker rm $CONTAINER_ID
fi
if [ -n "$IMAGE_ID" ]; then
  echo "刪除vue-demo鏡像"
  docker rmi $IMAGE_ID
fi
echo "開始vue-demo鏡像打包"
docker build -t vue-demo .
echo "運行vue-demo鏡像在8008"
docker run --name vue-demo -p 8008:80 -d vue-demo


# Dockerfile文件

FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

jenkins保存配置文件后,點擊構建


立即構建

可查看構建日志


日志

日志

成功后訪問,能訪問到代表前端構建成功了
頁面

現(xiàn)在進行nodejs項目的構建
同樣
1、先新建一個任務,進行配置,選擇如下


node-demo

2、添加git倉庫


node-demo

3、添加構建shell


node-demo

4、點擊保存進行


node-demo

5、點擊立即構建


node-demo

構建成功后訪問:ip:8010端口,能正常訪問代表部署成功了


image.png

node-demo中的shell

# 先停止容器,再刪除容器,再刪除鏡像
CONTAINER_ID=$(docker ps -a -q -f name=node-demo)
IMAGE_ID=$(docker images | grep "node-demo" | awk '{print $3}')
if [ -n "$CONTAINER_ID" ]; then
  docker stop $CONTAINER_ID
  echo "刪除vue-demo容器"
  docker rm $CONTAINER_ID
fi
if [ -n "$IMAGE_ID" ]; then
  echo "刪除vue-demo鏡像"
  docker rmi $IMAGE_ID
fi
# 根據(jù)dockefile構建鏡像
docker build -t node-demo .
# 啟動鏡像,容器端口是3000
docker run --name node-demo -itd -p 8010:3000 node-demo
# 訪問8010端口
echo "服務運行在8010端口上"

dockerfile

FROM node:10-alpine

COPY . /app

WORKDIR /app
RUN rm -rf node_modules

RUN npm config set registry https://registry.npm.taobao.org

# install pm2
RUN npm install pm2 -g

# install logrotate
RUN pm2 install pm2-logrotate

RUN npm install

EXPOSE 3000
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirror.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
# ENV TZ=Asia/Taipei
# RUN apk --no-cache add tzdata zeromq \
#     && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
#     && echo '$TZ' > /etc/timezone

CMD [ "npm", "run", "prd"]

補充:

如果需要git提交代碼就進行構建,只需要在構建觸發(fā)器中配置token,勾上觸發(fā)遠程構建,然后在管理web鉤子中添加,當提交的時候就會觸發(fā)構建


構建

gitea webhook

以上就是關于docker,jenkins自動部署nodejs項目和前端項目的全部內(nèi)容。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內(nèi)容