Jenkins + docker + docker-compsoe + svn 持續集成

Jenkins + docker + docker-compsoe + svn 持續集成 

 

一  架構規劃

實驗環境是經過SVN提交代碼,使用Jenkins一鍵發佈到測試環境進行鏡像build和站點安裝測試,將DOCKER鏡像上傳到 私有鏡像倉庫,經過jenkins一鍵發佈到正式環境php

環境規劃:html

192.168.157.130  Jenkins  svn  registry前端

192.168.157.131  測試節點  docker Docker-Composejava

192.168.157.132  正式節點  docker Docker-Composemysql

二 192.168.157.130 上Jenkins SVN registry安裝

1 svn安裝

yum install -y subversion
mkdir /home/svn
#建立倉庫目錄
svnadmin create /home/svn/repos

vi /home/svn/repos/conf/svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

vi /home/svn/repos/conf/passwd
	svnuser = 123456

vi /home/svn/repos/conf/authz
	[repos:/]
svnuser = rw

svnserve -d -r /home/svn
ss -anltup | grep svn
tcp    LISTEN     0      7         *:3690                  *:*                   users:(("svnserve",pid=10888,fd=3))
倉庫地址:svn://192.168.157.130/repos

使用客戶端鏈接並上傳一個測試的index.html文件,文件內容爲 hello world!linux

2 安裝Docker

2.1 Docker安裝(全部節點)nginx

cd /etc/yum.repos.d
wget https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker

2.2 私有鏡像倉庫安裝c++

docker run -d \
-v /opt/registry:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--name registry \
Registry

2.3 全部節點 修改配置文件使之Pull鏡像到咱們的私有倉庫git

在部署節點配置Docker可信任私有倉庫:github

vi /etc/docker/daemon.json
{"registry-mirrors": ["http://04be47cf.m.daocloud.io"],"insecure-registries":["192.168.157.130:5000"]}


systemctl daemon-reload 
systemctl restart docker

2.4測試 是否能夠訪問

curl http://192.168.157.130:5000/v2/_catalog

{"repositories":[]} 說明成功

3 安裝 Jenkins

3.1安裝包下載地址:

http://mirrors.jenkins.io/war-stable/
http://maven.apache.org/download.cgi
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3.2 安裝jdk 和 maven

tar xf jdk-8u45-linux-x64.tar.gz
tar xf apache-maven-3.5.0-bin.tar.gz
mv jdk1.8.0_45/ /usr/local/jdk1.8
mv apache-maven-3.5.0 /usr/local/maven3.5

vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
MAVEN_HOME=/usr/local/maven3.5
PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
export JAVA_HOME CLASSPATH MAVEN_HOME PATH

source /etc/profile

查看java版本
java -version

3.3安裝啓動Tomcat

tar zxvf apache-tomcat-8.0.46.tar.gz
cd apache-tomcat-8.0.46/webapps
rm -rf  ROOT/*
unzip /root/jenkins.war -d ROOT

#啓動tomcat
../bin/startup.sh
Using CATALINA_BASE:   /root/apache-tomcat-8.0.46
Using CATALINA_HOME:   /root/apache-tomcat-8.0.46
Using CATALINA_TMPDIR: /root/apache-tomcat-8.0.46/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /root/apache-tomcat-8.0.46/bin/bootstrap.jar:/root/apache-tomcat-8.0.46/bin/tomcat-juli.jar
Tomcat started. 
說明Tomcat已經啓動

3.4 配置Jenkins

Jenkins 訪問地址:

http://192.168.157.130:8080

查看密碼

cat /root/.jenkins/secrets/initialAdminPassword
4a5be2f79ecd4dd5b2e713db64a2a834

登錄進去後 選擇自定義安裝插件

增長管理員帳號

Jenkins 配置

系統管理->系統設置:主要配置workspace目錄,全局環境變量,郵件通知,其餘插件配置等。

系統管理->Global Tool Configuration:主要配置JDK、Maven等工具。

在系統設置裏面先配置好SSH鏈接各個部署節點信息,在建立項目中使用。

建立 ssh的鏈接憑據: 做用 發佈版本需元遠程鏈接 服務器 是ssh的用戶和密碼

系統設置

全局工具配置

三 私有鏡像製做

製做nginx 鏡像 和 php 鏡像並上傳到私有倉庫,mysql鏡像使用官方鏡像便可

Nginx 和 php 的相關Dockerfile 文件和 軟件包,配置文件放在一個名爲Dockerfile-lnmp的文件夾中

目錄結構

1 Nginx鏡像製做

1.1 Nginx 的Dockerfile文件內容:

cat Dockerfile 
FROM centos:6
MAINTAINER zzzz
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel && \
    yum clean all
ADD nginx-1.12.1.tar.gz /tmp
RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && make install && \
    rm -rf /tmp/nginx-1.12.1
COPY nginx.conf /usr/local/nginx/conf

EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

1.2 Nginx 配置文件設置

cat nginx.conf 

user  root; 
worker_processes  auto; 
error_log  logs/error.log  info;
pid        logs/nginx.pid; 

events {
    use epoll; 
}
http {

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log main;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;
        server_name localhost;
        root html;
        index index.php index.html;

        location ~ \.php$ {
            root html;
            fastcgi_pass php-cgi:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
            include fastcgi_params;
        }
    }
}

1.3 build nginx鏡像

docker build -t 192.168.157.130:5000/lnmp-nginx:base .

1.4 上傳鏡像到私有倉庫

docker push 192.168.157.130:5000/lnmp-nginx:base

2 php鏡像製做

2.1 Php 的Dockerfile文件內容:

cat Dockerfile 

FROM centos:6
MAINTAINER zzzz
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel \
    libcurl-devel libjpeg-devel libpng-devel openssl-devel && \
    yum clean all
ADD php-5.6.31.tar.gz /tmp/
RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
    chmod +x /etc/init.d/php-fpm && \
    rm -rf /tmp/php-5.6.31 
COPY php.ini /usr/local/php/etc

EXPOSE 9000
CMD /etc/init.d/php-fpm start && tail -F /var/log/messages

2.2 php.ini 文件內容都是默認的設置未作改變(能夠直接從其餘的php服務器中拷貝)

2.3 build php私有鏡像

docker build -t 192.168.157.130:5000/lnmp-php:base

2.4 上傳鏡像到私有倉庫

docker push 192.168.157.130:5000/lnmp-php:base

四 在測試節點上和正式節點上部署Docker-Compose

1 安裝Docker-compose

curl -L https://github.com/docker/compose/releases/download/1.22.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

docker-compose -version
docker-compose version 1.22.0-rc2, build 6817b533

2 上傳測試節點的相關腳本(lnmp目錄)

# tree
.
├── config            
│   └── test.tar.gz        這是一個前端測試包,裏面就一個index測試頁面,發佈時會自動解壓
├── deploy.sh              發佈腳本
├── docker-compose.yml     compose構建腳本,發佈腳本會調用compose  
├── Dockerfile
│   ├── nginx              nginx鏡像構建腳本
│   └── php                php鏡像構建腳本
├── mysqldata              mysql數據目錄
├── push_images.sh         push鏡像腳本
├── revision.svn           記錄svn提交的版本號 默認爲空
└── wwwroot                nginx 根目錄

3 正式環境相關腳本

# tree
.
├── deploy.sh              發佈腳本
├── docker-compose.yml     compose構建文件
├── revision.svn           
└── roll-back.sh           回滾腳本

五 使用jenkins建立項目

1 建立第一個項目 wordpress發佈到測試環境

1.1 設置 SVN

憑據爲 鏈接SVN 帳戶密碼

**  源文件 爲匹配方式,指所有拷貝

lnmp/wwwroot  遠程目錄 爲咱們設置全局的工做目錄爲 /root/ 下面的 lnmp 文件夾 此文件夾包含腳本和 完整根目錄,後期發佈的文件將拷貝到 wwwroot下 cd lnmp;./deploy.sh $SVN_REVISION  在發佈時 執行的腳本, $SVN_REVISION 爲SVN自身的 版本號做爲變量 傳到腳本中。   要預先將 LNMP文件上傳到 測試節點,裏面包晗 docker相關的腳本 和根目錄

1.2 測試構建項目(將wordpress代碼提交到svn)

 

控制輸出success 表示構建成功。

1.3 訪問測試節點IP 查驗結果

http://192.168.157.131:/test.html
這個不是wordpress的代碼是咱們的測試頁面文件

1.4 查看咱們的wordpres

上面鏈接數據庫的信息從 docker-compose.yml 獲取

能夠手工建立wp-config.php文件並將如下信息貼入其中,建立一個 名爲wp-config.php 的文件將 內容複製到裏面 提交到SVN,而後重新構建,構建完成後 刷新頁面繼續安裝。

1.4 查看生成的數據庫文件

1.5 查看svn版本號

cat revision.svn

2 建立一個項目將測試環境的鏡像 提交到私有倉庫

項目名稱:提交測試環境鏡像到私有倉庫

構建成功後查看 鏡像倉庫裏面的鏡像是否已經打了tag

curl http://192.168.157.130:5000/v2/_catalog

{"repositories":["lnmp-nginx","lnmp-php"]}

# curl http://192.168.157.130:5000/v2/lnmp-nginx/tags/list

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

2 表明版本號,咱們向svn提交了三次,說明是正確的

3 正式環境部署

項目名稱:3.wordpress發佈到正式環境

注意全部腳本是須要受權纔可以執行

chmod +x {deploy.sh,roll-back.sh}

構建完成後可使用 docker ps 查看咱們都啓動了那些容器

訪問測試

網址:http://192.168.157.132

4 版本回滾

項目名稱:4.項目回滾

回滾以前,咱們上傳一個測試名爲duke.html 文件執行構建,index.html內容爲 I am duke,svn提交後構建。(重複第一二三個項目便可)

構建完成後測試:

訪問 duke.html

如今咱們測試回滾島上一個版本,上一個版本里面是沒有duke.html咱們經過回滾驗證

構建後驗證

404 的出現說明咱們已經成功回滾

 

參考:https://my.oschina.net/54188zz/blog/3023574

相關文章
相關標籤/搜索