使用Docker的jenkins鏡像打包一個可運行的Angular項目

環(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 查看剛才生成的鏡像


image.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言:自動用了微服務(wù),持續(xù)化集成開發(fā)/測試/部署就提上日程了,不然部署應(yīng)用真的是挺傷神的。今天就介紹一下自動構(gòu)建神...
    我不吃姜閱讀 3,994評論 0 4
  • 一.docker 是什么: 2.安裝docker 系統(tǒng):ubuntu16.04 使用腳本自動安裝 Docker 官...
    Black_Sun閱讀 2,254評論 0 2
  • 第一次發(fā)布博客。希望可以給需要的朋友們一些幫助。 1. 基礎(chǔ)環(huán)境 本文基于64位的CentOS 7.2系統(tǒng),內(nèi)核版...
    凌風(fēng)TM閱讀 2,981評論 5 6
  • 前言 在應(yīng)用還處于單體架構(gòu)的時候,交付周期通常都以周、月為單位,在這種情況下項目的部署一般都是由開發(fā)人員手動將程序...
    Briseis閱讀 22,300評論 5 70
  • 2018-04-09 感恩日記 1)看見:今天中午沒有回家喂奶,感謝琛琛一整天和奶奶好狀態(tài),在外面玩的開心、睡得舒...
    陳艷芳_育兒及修行成長閱讀 190評論 0 1

友情鏈接更多精彩內(nèi)容