環(huán)境:ubuntu 18.1
Docker版本:Docker version 18.06.1-ce, build e68fc7a
1.安裝Docker
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
2.拉取jenkins的鏡像
docker pull jenkins/jenkins 默認(rèn)拉取的是jenkins/jenkins:latest的鏡像
3.運行一個jenkins容器
docker run -d --name my-jenkins \
-p 8080:8080 -p 50000:50000 -u root \
-v /home/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /etc/timezone:/etc/timezone \
jenkins/jenkins:latest
-d表示將此容器掛在后臺運行
--name 為容器定義一個名字(后面可以代替容器id使用)
-u root 使用root用戶運行,避免后面出現(xiàn)的一些執(zhí)行權(quán)限問題
-p 表示映射容器的端口到宿主機的端口
-v 表示映射宿主機的目錄到容器的目錄
-v /home/jenkins_home:/var/jenkins_home 映射jenkins_home,將數(shù)據(jù)存儲到宿主機,這樣配置就不會隨容器丟失
-v /var/run/docker.sock:/var/run/docker.sock與-v /usr/bin/docker:/usr/bin/docker把宿主機docker 映射到容器內(nèi),可以直接在容器內(nèi)使用宿主機docker
-v /etc/timezone:/etc/timezone 映射時區(qū)文件,保證容器的時區(qū)和宿主機相同
查看正在運行的容器docker ps

4.使用Jenkins從SVN拉取代碼打包工程鏡像
- 登錄
登錄界面,IP是宿主機的IP
根據(jù)提示密碼在/var/jenkins_home/secrets/initialAdminPassword下面,我們之前已經(jīng)將/var/jenkins_home目錄映射到宿主機的/home/jenkins_home下面了,所以可以在宿主機的/home/jenkins_home/secrets/inintialAdminPassword文件中獲取初始密碼,然后進(jìn)入到裝插件的界面,代碼是放在svn,所以要有個svn插件就是了 -
創(chuàng)建一個項目
創(chuàng)建項目
配置代碼倉庫
用shell腳本來構(gòu)建
構(gòu)建的腳本
構(gòu)建的腳本:
// 在jenkins的容器根目錄下創(chuàng)建dockerFiles文件夾
if [ ! -d "/dockerFiles/" ];then
mkdir /dockerFiles
fi
// 創(chuàng)建Dockerfile文件
if [ -d "/dockerFiles/Dockerfile"];then
rm /dockerFiles/Dockerfile
fi
touch /dockerFiles/Dockerfile
<!-- 編寫Dockerfile文件用于創(chuàng)建鏡像 -->
// 該鏡像基于node的鏡像
echo FROM node > /dockerFiles/Dockerfile
// 向宿主機暴露端口
echo EXPOSE 8888 >> /dockerFiles/Dockerfile
// 當(dāng)前的工作目錄定為 /app
echo WORKDIR /app >> /dockerFiles/Dockerfile
// 將當(dāng)前的目錄test_one下的所有文件拷貝到./angular_code下
//(test_one怎么來的下面有講,./angular_code絕對路徑為/app/angular_code,也就是相對路徑為上面的定義的工作目錄,angular_code的目錄會自動創(chuàng)建)
echo COPY test_one ./angular_code >> /dockerFiles/Dockerfile
// 進(jìn)入到angular_code的文件夾,安裝依賴,很多反斜杠用來轉(zhuǎn)義
echo RUN cd ./angular_code \&\& npm install \&\& npm install \-g \@angular\/cli >> /dockerFiles/Dockerfile
// 執(zhí)行命令
echo CMD cd ./angular_code \&\& ng serve >> /dockerFiles/Dockerfile
<!-- 編寫Dockerfile完成 -->
cd /dockerFiles/
if [ -d "/dockerFiles/test_one/" ];then
rm -rf test_one
fi
// 默認(rèn)jenkins從svn拉下來的代碼會保存在workspace下
// 將代碼復(fù)制到/dockerFiles目錄下
cp -r /var/jenkins_home/workspace/test_one .
// 創(chuàng)建鏡像
docker build \-t angular_demo .
docker images 查看剛才生成的鏡像

5.運行一個angular_demo容器
docker run -d angular_demo
6.問題
這只是demo,一般會先ng build我們的angular項目,再使用nginx來啟動,要不然這樣打出來的包太大了。同時還有一個問題每次都要npm install,不僅耗時,而且如果有多個前端項目依賴還不能復(fù)用。
所以后面需要docker的共用卷和分級構(gòu)建的技術(shù)來優(yōu)化。
7.參考
ubuntu下安裝docker版:jenkinshttp://www.itdecent.cn/p/9018cfa3654b




