實驗環境是經過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
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.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.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.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.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
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 回滾腳本
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
項目名稱:提交測試環境鏡像到私有倉庫
構建成功後查看 鏡像倉庫裏面的鏡像是否已經打了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.wordpress發佈到正式環境
注意全部腳本是須要受權纔可以執行
chmod +x {deploy.sh,roll-back.sh}
構建完成後可使用 docker ps 查看咱們都啓動了那些容器
訪問測試
項目名稱:4.項目回滾
回滾以前,咱們上傳一個測試名爲duke.html 文件執行構建,index.html內容爲 I am duke,svn提交後構建。(重複第一二三個項目便可)
構建完成後測試:
訪問 duke.html
如今咱們測試回滾島上一個版本,上一個版本里面是沒有duke.html咱們經過回滾驗證
構建後驗證
404 的出現說明咱們已經成功回滾
參考:https://my.oschina.net/54188zz/blog/3023574