拿公司已經(jīng)配置好的jenkins
做個(gè)示例和理解譬猫,起碼懂個(gè)大概吧。
1. 必要的插件
公司的代碼庫(kù)是 gitlab
羡疗,所以gitlab
插件少不了染服。需要在線安裝,肯定少不了nodejs
的呀叨恨。
gitlab
nodejs
2. 新建項(xiàng)目
freestyle project
3. 項(xiàng)目配置
源碼管理
構(gòu)建環(huán)境
主目錄
構(gòu)建命令
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
//進(jìn)入項(xiàng)目目錄
cd /home/$PROJECT_NAME
//刪除目錄下的dist 壓縮包
rm -rf dist.tgz
//壓縮項(xiàng)目下的dist目錄為dist壓縮包(備份)
tar -cvf dist.tgz ./dist/*
//刪除項(xiàng)目下的dist目錄
rm -rf ./dist
//將新build的dist目錄拷貝到項(xiàng)目下(/home/jenkins/.jenkins 是jenkins主目錄柳刮,見上圖)
cp -r /home/jenkins/.jenkins/workspace/$PROJECT_NAME/dist /home/$PROJECT_NAME
//將Dockerfile 配置拷貝到項(xiàng)目下
cp /home/jenkins/.jenkins/workspace/$PROJECT_NAME/docker/Dockerfile /home/$PROJECT_NAME/
str1="$PROJECT_NAME"
//根據(jù)名稱查詢?nèi)萜?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
//創(chuàng)建鏡像
docker build -t $PROJECT_NAME .
//生成鏡像的同名容器,容器的80端口映射到訪問的8093端口(80端口是nginx默認(rèn)的端口號(hào)),把nginx.conf掛載到容器的/etc/nginx/nginx.conf(/etc/nginx/nginx.conf是nginx默認(rèn)的配置文件)
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鏡像倉(cāng)庫(kù)"
//打上tag
docker tag $SERVER_NAME ip:port/test/$PROJECT_NAME:$DATE
docker push ip:port/test/$PROJECT_NAME:$DATE
echo "成功push鏡像到docker鏡像倉(cāng)庫(kù)"
附錄:鏡像和容器的關(guān)系
簡(jiǎn)單點(diǎn)說痒钝,鏡像就類似操作系統(tǒng)光盤介質(zhì)诚亚,容器相當(dāng)于通過光盤安裝后的系統(tǒng)。通過光盤(鏡像)午乓,我們能在不同機(jī)器上部署系統(tǒng)(容器)站宗,系統(tǒng)內(nèi)的操作只會(huì)保留在當(dāng)前的系統(tǒng)(容器)中,如果要升級(jí)系統(tǒng)益愈,需要使用到光盤梢灭,但是可能會(huì)導(dǎo)致操作系統(tǒng)的數(shù)據(jù)丟失。