04: CI(持續集成)/CD(持續交付/持續部署)

1.1 持續集成、持續交付 介紹

    參考博客:http://www.javashuo.com/article/p-cuorghym-w.htmlhtml

  一、傳統交付java

      1. 傳統軟件的開發與交付的週期都很漫長,從需求的分析、系統的設計、編寫測試用例、系統開發、單元測試、組裝測試到交付調試。node

      2. 每一次交付、升級,都須要提供基礎的硬件、軟件的環境、軟件的代碼、軟件的文檔與手冊。linux

      3. 工程師都按照以前預演過好多遍的流程,對照着系統的部署手冊,一步一步的組裝硬件,安裝軟件,稍有差池,就要按照對應的應急預案進行回滾。git

            

  二、技術工程師平常 與 痛點github

      1)立項,建代碼庫,申請資源,拉分支寫代碼,聯調測試,發佈到線上,設置監控點,質效分析和總結等等web

      2)這些活動存在於不一樣的平臺,天天在不停的重複,須要不停的和各個團隊溝通,不停的作研發平臺和技術棧的切換docker

      3)因此咱們又回到持續交付的一個原則,若是有一件事讓你感受到痛苦,那麼就儘早實現自動化。apache

      4)梳理出規範化的玩法,採用自動化的高效手段,用技術去解決這些讓咱們感受頭疼的問題。json

      

  三、CI 持續集成 與 CD持續交付

       持續集成(Continuous Integration,CI): 代碼合併、構建、部署、測試都在一塊兒,不斷地執行這個過程,並對結果反饋(主要產出是一個鏡像)

       持續部署(Continuous Deployment,CD)加將產品部署到 測試環境、預生產環境、生產環境

       持續交付(Continuous Delivery,CD): 將最終產品發佈到生產環境,給用戶使用

      

  四、產品線發佈流程

      

  五、國內一些公司開發的輪子

      阿里雲效/codepipeline:https://www.aliyun.com/product/codepipeline

      百度效率雲:https://xiaolvyun.baidu.com/

      普元devops平臺:http://www.primeton.com/products/devops/

  六、構建持續集成環境介紹

      

      

1.2 構建持續集成環境(搭建Harbor私有鏡像倉庫+git服務:192.168.56.14)

  一、安裝Docker(192.168.56.14)

# 1)安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2)添加Docker軟件包源(不然doker安裝的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 3)安裝Docker CE
yum install -y docker-ce

# 4)啓動Docker服務並設置開機啓動
systemctl start docker
systemctl enable docker

# 5)安裝docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version  # 測試docker-compose是否安裝好

  二、安裝Harbor(192.168.56.14)

      1. 配置Harbor Https認證等,內容較多請參考, http://www.javashuo.com/article/p-wqwdygjt-bt.html 

      2. 必須保證Jenkins機器和Docker機器能經過命令 docker login linux-node4.example.com 登陸私有鏡像倉庫Harbor

'''安裝Harbor鏡像倉庫'''
# 一、下載離線安裝包
https://github.com/goharbor/harbor/releases

# 二、解壓並配置訪問地址'''
cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz
cd /home/work/harbor
vi harbor.yml
'''
hostname = 192.168.56.14
harbor_admin_password = 123456
'''

# 三、準備配置
./prepare

# 四、導入鏡像並啓動
./install.sh

# 五、查看容器狀態
docker-compose ps

安裝完成後能夠登陸Harbor:http://192.168.56.14

  三、Git代碼版本倉庫 

'''在192.168.56.14安裝git倉庫 '''
# 一、安裝Git
yum -y install git
# 二、建立Git用戶並設置密碼
useradd git
passwd git
# 三、建立倉庫(下面三步git倉庫已經建立完成)
su - git         # 切換到git用戶
mkdir solo.git   # 在git用戶家目錄建立鏡像倉庫文件夾 demo.git
cd solo.git
git --bare init  # 初始化鏡像倉庫


'''在192.168.56.13中模擬拉取git代碼進行測試 '''
# 四、模擬拉取並提交代碼
yum -y install git
git clone git@192.168.56.14:/home/git/solo.git
touch test.py  # 建立一個文件模擬代碼提交
git add .
git commit -m 'test'
git push origin master

# 五、配置客戶端與Git服務器SSH免交互認證
ssh-keygen  # 生成祕鑰
ssh-copy-id git@192.168.56.14  # 將私鑰拷貝到git服務器
ssh git@192.168.56.14  # 在192.168.56.13測試免密登陸192.168.56.14

1.3 構建持續集成環境(部署docker以便部署部署項目:192.168.56.13)

   一、安裝docker

# 1)安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2)添加Docker軟件包源(不然doker安裝的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 3)安裝Docker CE
yum install -y docker-ce

# 4)啓動Docker服務並設置開機啓動
systemctl start docker
systemctl enable docker

# 5)配置鏡像加速器:https://www.daocloud.io/mirror
[root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
[root@linux-node2 ~]# cat /etc/docker/daemon.json # 執行上面命令後就會將鏡像源修改爲國內的地址
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
[root@linux-node2 ~]# systemctl restart docker # 重啓docker生效

  二、複製Harbor證書登陸Harbor服務器

mkdir -p /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/ vi /usr/lib/systemd/system/docker.service  # 添加--insecure-registry 192.168.56.14
''' ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14 ''' systemctl restart docker.service # 重啓docker

# 能夠在linux-node3.example.com機器上測試docker登陸
docker login linux-node4.example.com

  三、配置java JDK環境

[root@linux-node3 ~]# cd /usr/local/ # 將jdk-8u45-linux-x64.tar.gz包上傳到當前文件夾中
[root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
[root@linux-node3 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_45 export CLASSPATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH [root@linux-node3 local]# source /etc/profile
[root@linux-node3 local]# java -version

1.4 構建持續集成環境(安裝Jenkins服務:192.168.56.12)

  一、安裝docker

# 1)安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2)添加Docker軟件包源(不然doker安裝的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 3)安裝Docker CE
yum install -y docker-ce

# 4)啓動Docker服務並設置開機啓動
systemctl start docker
systemctl enable docker

# 5)配置鏡像加速器:https://www.daocloud.io/mirror
[root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
[root@linux-node2 ~]# cat /etc/docker/daemon.json # 執行上面命令後就會將鏡像源修改爲國內的地址
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
[root@linux-node2 ~]# systemctl restart docker # 重啓docker生效

  二、複製Harbor證書登陸Harbor服務器

mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/

vi /usr/lib/systemd/system/docker.service  # 添加--insecure-registry 192.168.56.14
'''
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
'''

 systemctl restart docker.service  # 重啓docker
# 能夠在linux-node2.example.com機器上測試docker登陸
docker login linux-node4.example.com

  三、上傳配置Java JDK環境

[root@linux-node3 ~]# cd /usr/local/ # 將jdk-8u45-linux-x64.tar.gz包上傳到當前文件夾中
[root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
[root@linux-node3 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_45 export CLASSPATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH [root@linux-node3 local]# source /etc/profile
[root@linux-node3 local]# java -version

  四、上傳配置maven

[root@linux-node2 work]# tar -xvf apache-maven-3.5.0-bin.tar.gz -C /usr/local/ # 先上傳apache-maven-3.5.0-bin.tar.gz

  五、拉取java的博客系統測試

[root@linux-node2 ~]# yum –y install git
[root@linux-node2 ~]# cd /root/test/
[root@linux-node2 ~]# git clone https://github.com/b3log/solo.git
[root@linux-node2 test]# cd solo/
[root@linux-node2 solo]# git remote rm origin 
[root@linux-node2 solo]# git remote add origin git@192.168.56.14:/home/git/solo.git
[root@linux-node2 solo]# git add .
[root@linux-node2 solo]# git commit -m 'all'
[root@linux-node2 solo]# git push origin master # 配置客戶端與Git服務器SSH免交互認證
[root@linux-node2 solo]# ssh-keygen # 生成祕鑰
[root@linux-node2 solo]# ssh-copy-id git@192.168.56.14 # 將私鑰拷貝到git服務器
[root@linux-node2 solo]# ssh git@192.168.56.14 # 在192.168.56.13測試免密登陸192.168.56.14

  六、構建一個Tomcat基礎鏡像,並推送到Harbor中

[root@linux-node2 solo]# mkdir -p /root/solo/
[root@linux-node2 solo]# vi /root/solo/Dockerfile
''' FROM centos:7 MAINTAINER www.example.com RUN yum install unzip iproute -y ENV JAVA_HOME /usr/local/jdk # 使用宿主機的java JDK環境 ADD apache-tomcat-8.0.46.tar.gz /usr/local RUN mv /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat WORKDIR /usr/local/tomcat EXPOSE 8080 ENTRYPOINT ["./bin/catalina.sh", "run"] '''

## 注:必定要把apache-tomcat-8.0.46.tar.gz上傳到/root/solo/目錄下
[root@linux-node2 solo]# docker build -t linux-node4.example.com/test/tomcat:v1 . # 構建一個tomcat鏡像 # linux-node4.example.com # Harbor鏡像倉庫名稱 # test # 在Harbor頁面中建立的項目(必定記獲得Harbor管理頁面建立test項目) # tomcat:v1 # 咱們打的鏡像名稱
 [root@linux-node2 jenkins]# docker images # 查看到剛剛構建的linux-node4.example.com/test/tomcat 鏡像
[root@linux-node2 solo]# docker push linux-node4.example.com/test/tomcat:v1 # 將鏡像推送到Harbor中

  七、安裝Jenkins(使用官方提供的Jenkins二次構建)

[root@linux-node2 ~]# mkdir –p /home/work/jenkins
[root@linux-node2 ~]# cd /home/work/jenkins
[root@linux-node2 jenkins]# vim Dockerfile # 使用官方Jenkins鏡像構建咱們的鏡像
''' FROM jenkins USER root RUN apt-get update && apt-get install -y git libltdl-dev ''' [root@linux-node2 jenkins]# docker build -t jenkins:v1 . # 構建Jenkins鏡像
[root@linux-node2 jenkins]# docker images # 能夠看到咱們的鏡像了
[root@linux-node2 jenkins]# docker rm -f $(docker ps -q -a) # 刪除咱們剛剛建立的測試鏡像
[root@linux-node2 jenkins]#  #### 使用下面命令建立Jenkins容器(使用上面構建的jenkins:v1鏡像) # -v命令進行掛載,其中冒號前面的是本機的目錄 # 將本機的javahome和mavenhome的路徑,掛載到Jenkins容器上,冒號後面是容器上的目錄,能夠寫跟本機目錄相同
''' docker run -d \ --name jenkins \ -p 8080:8080 \ -v /var/jenkins_home/:/var/jenkins_home \ -v /usr/local/apache-maven-3.5.0:/usr/local/maven \ -v /usr/local/jdk1.8.0_45:/usr/local/jdk \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ -v ~/.ssh:/root/.ssh \ jenkins:v1 ''' [root@linux-node2 work]# cat /var/jenkins_home/secrets/initialAdminPassword # 查看Jenkins密碼,要放到頁面中驗證
3628631b13f04919ac864a597c336ce1

1.5 構建持續集成環境(在頁面中完成Jenkins安裝:192.168.56.12)

    訪問Jenkinshttp://192.168.56.12:8080

   一、輸入Jenkins初始密碼

       

  二、選擇安裝插件

      安裝報錯常看法決方案:http://www.javashuo.com/article/p-obswskck-bg.html

      

  三、配置Jenkins admin用戶信息

      

1.6 構建持續集成環境(配置Jenkins:192.168.56.12)

  一、配置配置git、jdk、maven

      Manage Jenkins  ----》Global Tool Configure----》Global Tool Configuration

      [root@linux-node2 local]#   sudo chown -R 1000 /var/jenkins_home        #注意掛載目錄受權

      [root@linux-node2 local]#   docker restart d57a     # 重啓Jenkins所在的docker容器

    1)配置java JDK

         

    2)配置git

        

    3)配置maven

        

  二、系統配置

      # 配置192.168.56.13中用戶密碼ssh登陸,好讓Jenkins一會run你的鏡像

    1)配置ssh憑證

        憑證---》global---》添加憑證

        

    2)配置使用上面憑證ssh 192.168.56.13的docker主機

        Manage Jenkins ----》Global Tool Configure ----》Configuration System

        注:若是沒有 SSH remote hosts,記得主動安裝插件,插件名(SSH)

        

 1.7 使用Jenkins建立一個新的項目,將java項目從Jenkins(192.168.56.12)自動部署到docker(192.168.56.13)機器中

  一、建立一個新任務

      create new jobs   # 若是沒有「構建一個maven項目」選項,本身安裝插件:Maven Integration
      

  二、配置Jenkins使用git拉取代碼的路徑

       git@192.168.56.14:/home/git/solo.git   是咱們本身搭建的git倉庫地址

       

  三、簡單測試一下觸發器配置

       注:每隔一分鐘拉取一次git倉庫中的代碼

       

  四、指定maven構建選項

      

  五、測試構建

      

      

      # 構建完成後Jenkins工做目錄便可看到構建生成的 solo.war包,這個solo.war包放到Tomcat中就能夠啓動了

      [root@linux-node2 target]# ll /var/jenkins_home/workspace/solo_blog/target/solo.war

   六、配置構建成功後的動做(將項目打包推送到鏡像中)

      剛剛已經看到構建沒問題,此時能夠配置構建成功後的動做

    1)再次配置

         

    2)構建項目鏡像,並推送到Harbor中

        1. 使用上面生成,推送到Harbor的 tomcat:v1鏡像生成項目鏡像 solo:v1

        2. 將solo:v1推送到Harbor中

         

cd $WORKSPACE cat > Dockerfile << EOF FROM linux-node4.example.com/test/tomcat:v1 MAINTAINER WWW.example.com COPY target/solo.war /tmp/ROOT.war RUN rm -rf /usr/local/tomcat/webapps/* && \ unzip /tmp/ROOT.war -d /usr/local/tomcat/webapps/ROOT && \ rm -f /tmp/ROOT.war ENTRYPOINT ["./bin/catalina.sh", "run"] EOF docker build -t linux-node4.example.com/test/solo:v1 . docker login -u admin -p 123456 linux-node4.example.com docker push linux-node4.example.com/test/solo:v1

  七、配置完構建成功後動做後,從新構建,保證輸出臺是(success)

       注: 使用Jenkins遠程,讓docker主機(192.168.56.13)拉取上步構建的solo:v1項目鏡像啓動docker容器

      

docker rmi -f solo:v1 | true docker rm -f solo | true docker login -u admin -p 123456 linux-node4.example.com docker run -dit --name solo -p 8888:8080 -v /usr/local/jdk1.8.0_45/:/usr/local/jdk linux-node4.example.com/test/solo:v1

 

 

 

 

 

 

1111111111111111

相關文章
相關標籤/搜索