環(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)容。