美文网首页
使用Docker的jenkins镜像打包一个可运行的Angula

使用Docker的jenkins镜像打包一个可运行的Angula

作者: 北星七斗 | 来源:发表于2018-12-14 10:47 被阅读0次

    环境: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

    相关文章

      网友评论

          本文标题:使用Docker的jenkins镜像打包一个可运行的Angula

          本文链接:https://www.haomeiwen.com/subject/wbvchqtx.html