Docker+Jenkins+Maven+SVN搭建持續集成環境

 

Docker+Jenkins+Maven+SVN搭建持續集成環境php

環境拓撲圖(實驗項目使用PHP環境)html

發佈流程圖mysql


環境說明linux

  • 系統:Centos 7.4 x64
  • Docker版本:18.09.0
  • Maven版本:3.6
  • Tomcat版本:8
  • JDK版本:1.8
  • Jenkins版本:2.7
  • SVN版本:1.7.14
  • 管理節點Jenkins/SVN:192.168.1.79
  • 測試節點:192.168.1.78
  • 生產節點:192.168.1.77

應用環境部署nginx

一、管理節點:SVN安裝配置及簡單使用web

1.一、安裝SVN服務sql

yum -y install subversion 

1.二、建立SVN目錄docker

mkdir /home/svn 

1.三、建立SVN倉庫名爲repos數據庫

svnadmin create /home/svn/repos 

1.四、修改repos庫內主配置文件apache

vi /home/svn/repos/conf/svnserve.conf

# none設置不容許匿名訪問
anon-access = none
# 認證爲可寫
auth-access = write
# 密碼數據庫文件爲passwd
password-db = passw
# 認證數據庫文件爲authz
authz-db = authz 

1.五、修改passwd文件 添加用戶

vi /home/svn/repos/conf/passwd

# 用戶管理
[users]
# 用戶名爲test。密碼123456。
test = 123456 

1.六、修改authz文件 賦值建立用戶權限

vi /home/svn/repos/conf/authz

# 建立倉庫目錄「/」權限
[repos:/]
# 賦值test 讀寫權限
test = rw 

1.七、啓動SVN服務

svnserve -d -r /home/svn

注:倉庫地址 svn://192.168.1.79/repos

 

二、客戶端:鏈接SVN建立文件

2.一、 windos 鏈接SVN 輸入密碼

2.2 repos 文件夾下建立index.html

2.三、文件已html後綴的網頁文件

index.html文件內容:<h1>repos</h2>

2.三、提交代碼

 

三、部署Docker鏡像倉庫

注:保證全部節點都提早安裝好Docker應用

3.一、管理節點:下載安裝鏡像倉庫

docker run -d \
-v /opt/registry:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--name registry \
registry
命令:docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dba32d8c784d registry "/entrypoint.sh /etc…" 4 minutes ago Up 4 minutes 0.0.0.0:5000->5000/tcp registry
查看資源:映射宿主級端口到容器端口

3.二、管理節點:在部署節點配置Docker可信任私有倉庫:

vi /etc/docker/daemon.json

{"registry-mirrors": ["http://04be47cf.m.daocloud.io"],"insecure-registries":["192.168.1.79:5000"]}
命令:curl http://192.168.1.79:5000/v2/_catalog

{"repositories":[]}
查看當前倉庫長傳鏡像  
命令:curl http://192.168.1.79:5000/v2/lnmp-nginx/tags/list

{"name":"lnmp-nginx","tags":["base"]}
查看指定鏡像tags版本

3.三、測試節點:整理Dockerfile(提早整理好的LNMP環境包)

Dockerfile-lnmp/
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.1.tar.gz
│   └── nginx.conf
└── php
    ├── Dockerfile
    ├── php-5.6.31.tar.gz
    └── php.ini
  • LNMP包下載地址:https://pan.baidu.com/s/1SHR6WDMXKvPlXOB1J0y5tg
  • 密碼:ze4f

3.四、測試節點:構建LNMP環境

# 解壓包,進入nginx目錄
unzip Dockerfile-lnmp.zip;cd Dockerfile-lnmp/nginx/
# 構建nginx鏡像容器
docker build -t 192.168.1.79:5000/lnmp-nginx:base .
# 進入php目錄
cd ../php/
# 構建php鏡像如期
docker build -t 192.168.1.79:5000/lnmp-php:base .

注:地址IP須要根據環境修改,確認執行完畢,無誤。

3.5 測試節點:上傳到鏡像倉庫

docker push 192.168.1.79:5000/lnmp-nginx:base
docker push 192.168.1.79:5000/lnmp-php:base 

報錯處理:https://www.cnblogs.com/lkun/p/7990466.html

注:感謝無影無蹤大佬的解決方案。

 

 

四、測試正式節點:安裝docker-compose

 

五、測試節點:部署測試環境包

5.一、下載測試部署壓縮包

目錄結構
├── config
# 生產環境配置文件
│   ├── prod.html
│   ├── prod.tar.gz
# 測試環境配置文件
│   ├── test.html
│   └── test.tar.gz
# 部署LNMP項目
├── deploy.sh
# 編排描述內容
├── docker-compose.yml
# 構建鏡像
├── Dockerfile
│   ├── nginx
│   └── php
# 將容器目錄數據庫持久化到該目錄下
├── mysql_data
# 推送鏡像到線上使用
├── push_images.sh
# 記錄部署時的代碼版本號
├── revision.svn
# 存放項目目錄
└── wwwroot
  • 下載地址:https://pan.baidu.com/s/1sKxJBDd1wkUhOTxhskP_Ug
  • 密碼:feb5

5.二、解壓文件,腳本加入執行權限,並查看相關文件信息

# 上傳test.zip腳本,解壓縮
unzip lnmp.zip;cd lnmp
# 將腳本添加執行權限
chmod +x push_images.sh
#!/bin/bash
# 修訂版本號
REVISION=$1
# 工做環境變量環境,test傳入構建dockerfile內
WORK_ENV=test
# 將當前版本寫入revison文件中
echo $REVISION >./revision.svn 
# 進入Dockerfile
cd Dockerfile
# 構建鏡像build傳入test環境
sudo docker build --build-arg work_env=$WORK_ENV -t lnmp-nginx:latest -f nginx ../
sudo docker build --build-arg work_env=$WORK_ENV -t lnmp-php:latest -f php ../
# 刪除當前容器全部內容
sudo docker-compose down
# 重啓初始化容器
sudo docker-compose up -d
腳本deploy.sh
# 版本號
version: '3'
# 服務管理
services:
# nginx服務
  nginx:
# 鏡像使用倉庫內鏡像
    image: lnmp-nginx:latest
# 暴露端口爲80
    ports:
      - 80:80
# 映射服務別名
    links:
      - php:php-cgi
    depends_on:
      - php
      - mysql

# php服務
  php:
# 鏡像使用倉庫內鏡像
    image: lnmp-php:latest
# 映射服務別名
    links:
      - mysql:mysql-db

# mysql服務
  mysql:
# 鏡像版本
    image: mysql:5.6
# 暴露端口
    ports:
      - 3306:3306
# 映射服務數據卷
    volumes:
      - ./mysql_data:/var/lib/mysql
    command: --character-set-server=utf8
# 指定數據庫變量
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123
dockercompose腳本
# 指定鏡像
FROM 192.168.1.97:5000/lnmp-nginx:base
# 指定管理員
MAINTAINER xiangsikai
# 接收構建參數
ARG work_env
# 更新網站目錄
ADD wwwroot /usr/local/nginx/html
# 解壓 接收參數傳入變量的壓縮包
ADD config/${work_env}.tar.gz /usr/local/nginx/html
# 聲明暴露端口
expose 80
Dockerfile 內 Nginx腳本
# 指定鏡像
FROM 192.168.1.79:5000/lnmp-php:base
# 指定管理員
MAINTAINER xiangsikai
# 接收構建參數
ARG work_env
# 更新網站目錄
ADD wwwroot /usr/local/nginx/html
# 解壓 接收參數傳入變量的壓縮包
ADD config/${work_env}.tar.gz /usr/local/nginx/html
# 聲明暴露端口
expose 9000
Dockerfile 內 PHP腳本
#!/bin/bash
# 指定鏡像倉庫地址
IMAGE_REPOS=192.168.01.79:5000
# 記錄部署時修訂版本號
REVISION=$(cat revision.svn)
# 聲明生產環境
WORK_ENV=prod
# 進入Dockerfile
cd Dockerfile
# 構建鏡像build傳入prod環境
sudo docker build --build-arg work_env=$WORK_ENV -t $IMAGE_REPOS/lnmp-nginx:$REVISION -f nginx ../
sudo docker build --build-arg work_env=$WORK_ENV -t $IMAGE_REPOS/lnmp-php:$REVISION -f php ../
# 將鏡像上傳到鏡像倉庫
sudo docker push $IMAGE_REPOS/lnmp-nginx:$REVISION
sudo docker push $IMAGE_REPOS/lnmp-php:$REVISION

# 注:經過jenkins在svn中自動拉取傳入wwwroot目錄下。
push_images.sh腳本

 

六、生產節點:部署生產環境包

6.一、下載生產部署壓縮包

目錄結構
├── deploy.sh
├── docker-compose.yml
├── revision.svn
└── roll-back.sh
  • 下載地址:https://pan.baidu.com/s/1SaZUubsnKJHe19ALHUfd8w
  • 密碼:opml

6.二、解壓文件,腳本加入執行權限,並查看想關文件信息

# 解壓文件,進入路徑下
unzip lnmp2.zip
# 加入文件執行權限
chmod +x deploy.sh roll-back.sh
#!/bin/bash
# 文件賦值變量
REVISION=revision.svn
# 鏡像倉庫位置
IMAGE_REPOS=http://192.168.1.79:5000/v2
# 獲取最新鏡像tag,取最大最新版本號
LATEST_REVISION=$(curl $IMAGE_REPOS/lnmp-nginx/tags/list |\
grep -Po '(?<=")\d+(?=")' |\
awk 'BEGIN{max=0}{for(i=1;i<=NF;i++)if($i>max)max=$i}END{print max}')
# 修改版本號到docker-compose內指定構建版本
sed -i -r '/:5000/s/[0-9]+$/'$LATEST_REVISION'/' docker-compose.yml
# 標記上一個版本和當前版本
if ! grep "^$LATEST_REVISION " $REVISION &>/dev/null; then
   sed -i -r '$s/([0-9]+).*/\1 Previous/' $REVISION
   echo "$LATEST_REVISION Current" >> $REVISION
fi
# 從新部署docker-compose文件
sudo docker-compose down
sudo docker-compose up -d
deploy.sh腳本
version: '3'
services:
  nginx:
    image: 192.168.1.79:5000/lnmp-nginx:12
    ports:
      - 80:80
    links:
      - php:php-cgi
    depends_on:
      - php

  php:
    image: 192.168.1.79:5000/lnmp-php:12
    links:
      - mysql:mysql-db

  mysql:
    image: mysql:5.6
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123
docker-compose.yml腳本
#!/bin/bash
# 修改成上一個鏡像版本
PRE_REVISION=$(awk '/Previous/{revision=$1}END{print revision}' revision.svn)
sed -i -r '/:5000/s/[0-9]+$/'$PRE_REVISION'/' docker-compose.yml

# 當前有問題的版本記錄
sed -i '$d' revision.svn

sudo docker-compose down
sudo docker-compose up -d
roll-back.sh腳本

 

七、管理節點:Jenkins安裝

注:Jenkins安裝須要依賴JDK環境,爲了也能夠部署JAVA項目一樣也安裝了maven。

注:Jenkins一樣也須要經過Tomcat來運行 經過平臺化方式管理。

7.一、安裝JDK和Maven並配置環境變量

  • JDK下載地址:https://pan.baidu.com/s/1TzyUAo3MPU0l6cUpUnzJIg
  • 密碼:gyxr
  • Maven下載地址:https://pan.baidu.com/s/1rM_NkeclLNeAY61hA0HRAw
  • 密碼:k3a3
# 解壓jdk
tar zxvf jdk-8u181-linux-x64.tar.gz
# 移動jdk目錄
mv jdk1.8.0_181 /usr/local/jdk1.8
# 解壓maven
tar zxvf apache-maven-3.6.0-bin.tar.gz
# 移動jdk目錄
mv apache-maven-3.6.0 /usr/local/maven3.6

7.二、配置JDK與Maven環境變量,並設置當即生效

vi /etc/profile

JAVA_HOME=/usr/local/jdk1.8
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
MAVEN_HOME=/usr/local/maven3.6
PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
export JAVA_HOME CLASSPATH MAVEN_HOME PATH
# 當即生效
source /etc/profile

7.三、部署tomcat應用服務

  • tomcat下載地址:https://pan.baidu.com/s/1IjaKDtUX7e_zjW5kb64Akw
  • 密碼:m1cz
# 解壓tomcat
tar zxvf apache-tomcat-8.0.53.tar.gz
# 運行tomcat
/root/apache-tomcat-8.0.53/bin/startup.sh
# 刪除目錄下默認網站數據
cd apache-tomcat-8.0.53/webapps;rm -rf ./*

7.四、添加Jenkins資源

  • Jenkins下載地址:https://pan.baidu.com/s/1sxQ8DnYl4ZS7JG0BgVWIWw
  • 密碼:8o8p
# 進入網站目錄
cd /root/apache-tomcat-8.0.53/webapps
# 解壓jenkins到指定ROOT目錄
unzip /root/jenkins.zip -d ROOT
# 查看生成隨機祕鑰文件路徑
/root/.jenkins/secrets/initialAdminPassword

7.五、Jenkins安裝

瀏覽器訪問:http://192.168.1.79:8080

選擇相關軟件確認後install

安裝ssh插件

安裝Git插件

安裝svn插件

 

初始化install 安裝

 

建立用戶

確認執行jenkins

 

 

八、Jenkins系統配置

8.一、進入主頁面

8.二、進入系統管理查看多個功能模塊

8.三、添加祕鑰 祕鑰用戶自定義

8.四、進入系統設置 添加設置。添加ssh。SSH 鏈接部署節點 傳輸相應命令

8.五、添加Publish over SSH項目代碼傳到部署節點。(保存)

8.六、進入全局工具配置

8.七、添加JDK

 

8.八、添加Maven(保存)

九、Jenkins建立項目1

9.一、建立項目

9.二、設置最大構建數

9.三、添加SVN訪問

9.四、新建SVN用戶

9.五、設置構建,指定網站目錄,執行相關腳本並傳入變量

9.六、測試構建

9.七、查看執行過程

 

9.七、瀏覽器測試

 

十、Jenkins建立項目2

10.一、建立項目

10.二、執行命令:進入指定目錄執行上傳鏡像腳本。(保存)

10.三、測試:執行構建

10.四、查看終端輸出

10.五、查看版本倉庫鏡像

命令:curl http://192.168.1.79:5000/v2/lnmp-nginx/tags/list

{"name":"lnmp-nginx","tags":["base","4"]}

 

 

十一、Jenkins建立項目3

11.一、建立Jenkins項目

11.二、加入命令指定執行相關腳本

11.三、測試構建查看終端輸出

11.四、瀏覽器測試

 

十二、Jenkins建立項目4

條件流程:svn提交新文件-->發佈到測試環境-->提交測試環境到鏡像-->發佈到正式環境

12.一、建立jenkins項目

12.二、添加構建執行相應腳本

12.三、測試構建查看控制檯輸出

注:按照流程順序依次使用

相關文章
相關標籤/搜索