使用Docker的jenkins镜像打包一个可运行的Angula
环境: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
默认拉取的是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用户运行,避免后面出现的一些执行权限问题
-p
表示映射容器的端口到宿主机的端口
-v
表示映射宿主机的目录到容器的目录
-v /home/jenkins_home:/var/jenkins_home
映射jenkins_home,将数据存储到宿主机,这样配置就不会随容器丢失
-v /var/run/docker.sock:/var/run/docker.sock
与-v /usr/bin/docker:/usr/bin/docker
把宿主机docker 映射到容器内,可以直接在容器内使用宿主机docker
-v /etc/timezone:/etc/timezone
映射时区文件,保证容器的时区和宿主机相同
查看正在运行的容器docker ps
4.使用Jenkins从SVN拉取代码打包工程镜像
- 登录
登录界面,IP是宿主机的IP
根据提示密码在/var/jenkins_home/secrets/initialAdminPassword
下面,我们之前已经将/var/jenkins_home目录映射到宿主机的/home/jenkins_home下面了,所以可以在宿主机的/home/jenkins_home/secrets/inintialAdminPassword文件中获取初始密码,然后进入到装插件的界面,代码是放在svn,所以要有个svn插件就是了 -
创建一个项目
创建项目
配置代码仓库
用shell脚本来构建
构建的脚本
构建的脚本:
// 在jenkins的容器根目录下创建dockerFiles文件夹
if [ ! -d "/dockerFiles/" ];then
mkdir /dockerFiles
fi
// 创建Dockerfile文件
if [ -d "/dockerFiles/Dockerfile"];then
rm /dockerFiles/Dockerfile
fi
touch /dockerFiles/Dockerfile
<!-- 编写Dockerfile文件用于创建镜像 -->
// 该镜像基于node的镜像
echo FROM node > /dockerFiles/Dockerfile
// 向宿主机暴露端口
echo EXPOSE 8888 >> /dockerFiles/Dockerfile
// 当前的工作目录定为 /app
echo WORKDIR /app >> /dockerFiles/Dockerfile
// 将当前的目录test_one下的所有文件拷贝到./angular_code下
//(test_one怎么来的下面有讲,./angular_code绝对路径为/app/angular_code,也就是相对路径为上面的定义的工作目录,angular_code的目录会自动创建)
echo COPY test_one ./angular_code >> /dockerFiles/Dockerfile
// 进入到angular_code的文件夹,安装依赖,很多反斜杠用来转义
echo RUN cd ./angular_code \&\& npm install \&\& npm install \-g \@angular\/cli >> /dockerFiles/Dockerfile
// 执行命令
echo CMD cd ./angular_code \&\& ng serve >> /dockerFiles/Dockerfile
<!-- 编写Dockerfile完成 -->
cd /dockerFiles/
if [ -d "/dockerFiles/test_one/" ];then
rm -rf test_one
fi
// 默认jenkins从svn拉下来的代码会保存在workspace下
// 将代码复制到/dockerFiles目录下
cp -r /var/jenkins_home/workspace/test_one .
// 创建镜像
docker build \-t angular_demo .
docker images 查看刚才生成的镜像
image.png
5.运行一个angular_demo容器
docker run -d angular_demo
6.问题
这只是demo,一般会先ng build我们的angular项目,再使用nginx来启动,要不然这样打出来的包太大了。同时还有一个问题每次都要npm install,不仅耗时,而且如果有多个前端项目依赖还不能复用。
所以后面需要docker的共用卷和分级构建的技术来优化。
7.参考
ubuntu下安装docker版:jenkinshttps://www.jianshu.com/p/9018cfa3654b