Docker容器中运行Jenkins实现前端自动化部署

拿公司已经配置好的jenkins做个示例和理解,起码懂个大概吧。

1. 必要的插件

公司的代码库是 gitlab,所以gitlab 插件少不了。需要在线安装,肯定少不了nodejs的呀。

gitlab

nodejs

2. 新建项目
freestyle project
3. 项目配置
源码管理

构建环境

主目录
构建命令
sudo npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install --unsafe-perm node-sass
npm install 
npm run build

PROJECT_NAME=test-dev
//进入项目目录
cd /home/$PROJECT_NAME
//删除目录下的dist 压缩包
rm -rf dist.tgz
//压缩项目下的dist目录为dist压缩包(备份)
tar -cvf dist.tgz ./dist/*
//删除项目下的dist目录
rm -rf ./dist
//将新build的dist目录拷贝到项目下(/home/jenkins/.jenkins 是jenkins主目录,见上图)
cp -r /home/jenkins/.jenkins/workspace/$PROJECT_NAME/dist /home/$PROJECT_NAME
//将Dockerfile 配置拷贝到项目下
cp  /home/jenkins/.jenkins/workspace/$PROJECT_NAME/docker/Dockerfile /home/$PROJECT_NAME/

str1="$PROJECT_NAME"
//根据名称查询容器
str2=$(docker ps -a|grep "$PROJECT_NAME"|awk '{print $2}')
//非空
if [ -n "$str2" ]
then
  //删除该容器
  docker rm -f $str1  
fi
//查询镜像ID
str=$(docker images|grep "/test/$PROJECT_NAME"|awk '{print $3}')

if [ -n "$str" ]; 
then
   //移除镜像
   docker images|grep "/test/$PROJECT_NAME"|awk '{print $3 }'|xargs docker rmi -f
fi
//创建镜像
docker build -t $PROJECT_NAME .
//生成镜像的同名容器,容器的80端口映射到访问的8093端口(80端口是nginx默认的端口号),把nginx.conf挂载到容器的/etc/nginx/nginx.conf(/etc/nginx/nginx.conf是nginx默认的配置文件)
docker run -d --name $PROJECT_NAME -p 8093:80 -v /home/$PROJECT_NAME/nginx.conf:/etc/nginx/nginx.conf $PROJECT_NAME:latest 

SERVER_NAME=$PROJECT_NAME:latest
DATE=`date +%Y%m%d%H%M`
echo "push镜像到docker镜像仓库"
//打上tag
docker tag $SERVER_NAME ip:port/test/$PROJECT_NAME:$DATE
docker push ip:port/test/$PROJECT_NAME:$DATE
echo "成功push镜像到docker镜像仓库"
附录:镜像和容器的关系

简单点说,镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同机器上部署系统(容器),系统内的操作只会保留在当前的系统(容器)中,如果要升级系统,需要使用到光盘,但是可能会导致操作系统的数据丢失。

摘自:Docker的镜像和容器的区别

推荐阅读更多精彩内容