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

一  架构规划

实验环境是通过SVN提交代码,使用Jenkins一键发布到测试环境进行镜像build和站点安装测试,将DOCKER镜像上传到 私有镜像仓库,通过jenkins一键发布到正式环境

环境规划:

192.168.157.130  Jenkins  svn  registry

192.168.157.131  测试节点  docker Docker-Compose

192.168.157.132  正式节点  docker Docker-Compose

二 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!

2 安装Docker

2.1 Docker安装(所有节点)

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 私有镜像仓库安装

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

2.3 所有节点 修改配置文件使之Pull镜像到我们的私有仓库

在部署节点配置Docker可信任私有仓库:

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

905bb16b05aac65e81ff35140237290b793.jpg

查看密码

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

17918f41bc3f6b20705ef19139617d7b515.jpg

登陆进去后 选择自定义安装插件

6851bc190d20b2a26e1a6037b161b898fb9.jpg

9e9e0b0d8bb6b6e820cc98c7a05790ab7b0.jpg

e51e094f2219d4f9c672b775f0bcdc7a15d.jpg

增加管理员账号

1cbbe82289a44debdd8834748c9f0a13899.jpg

Jenkins 配置

系统管理->系统设置:主要配置workspace目录,全局环境变量,邮件通知,其他插件配置等。

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

在系统设置里面先配置好SSH连接各个部署节点信息,在创建项目中使用。

创建 ssh的连接凭据: 作用 发布版本需元远程连接 服务器 是ssh的用户和密码

70d16a967f315b48822123244fa76e5854f.jpg

系统设置

8169000dbedc8cd29e008a3172f2c9a5c19.jpg

6f7311178e178beeda70a3af413ee7192ee.jpg

全局工具配置

1846c63a4d2cc03fd0c2d04592ae5540658.jpg

d6f9ece41b3c5deb8cd1430dd82021c0ce6.jpg

三 私有镜像制作

制作nginx 镜像 和 php 镜像并上传到私有仓库,mysql镜像使用官方镜像即可

Nginx 和 php 的相关Dockerfile 文件和 软件包,配置文件放在一个名为Dockerfile-lnmp的文件夹中

目录结构

ead51b715508eae5deda90dbcc3046d4f00.jpg

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发布到测试环境

8e4df518115a8e2c37922bcdc00252fee24.jpg

96f7324a0d045e2ef95f880402490c26536.jpg

1.1 设置 SVN

凭据为 连接SVN 账户密码

8f938601017bf09ba0e764df8a0c1b018a8.jpg

378d254b17e30904f527cfc31f909ebbb96.jpg

aefa914488a585c319ef689a500b7497db0.jpg

370a675dbf49916c3748ba1560b823dcded.jpg

**  源文件 为匹配方式,指全部拷贝

lnmp/wwwroot  远程目录 为我们设置全局的工作目录为 /root/ 下面的 lnmp 文件夹 此文件夹包含脚本和 完整根目录,后期发布的文件将拷贝到 wwwroot下 cd lnmp;./deploy.sh $SVN_REVISION  在发布时 执行的脚本, $SVN_REVISION 为SVN自身的 版本号作为变量 传到脚本中。   要预先将 LNMP文件上传到 测试节点,里面包晗 docker相关的脚本 和根目录

1.2 测试构建项目(将wordpress代码提交到svn)

d6b8e236997ba8c0bedd7b9600dc1aa948b.jpg

 

bb6eeff7d0954e9c4d90929a8d9f548fd08.jpg

控制输出success 表示构建成功。

1.3 访问测试节点IP 查验结果

http://192.168.157.131:/test.html
这个不是wordpress的代码是我们的测试页面文件

1.4 查看我们的wordpres

d709d39f76876f94e3c616ffac22e72c971.jpg

523eec27d45b757e5e6b008e40a54ba128a.jpg

上面连接数据库的信息从 docker-compose.yml 获取

1ac7d2978b0eaf69f2e69ad244a7c049c24.jpg

可以手工创建wp-config.php文件并将以下信息贴入其中,创建一个 名为wp-config.php 的文件将 内容复制到里面 提交到SVN,然后从新构建,构建完成后 刷新页面继续安装。

7661ba5e58888b33b501bbc3850ae5faa18.jpg

f9117c4e8c847ac8ba05b8226bd6aa1d93e.jpg

1.4 查看生成的数据库文件

a708000f0df479ccc12f5d2b6ab6f6dc526.jpg

1.5 查看svn版本号

cat revision.svn

2 创建一个项目将测试环境的镜像 提交到私有仓库

项目名称:提交测试环境镜像到私有仓库

7f8975f0c0c360dc73bc4d1a3b96a367ed2.jpg

0bd1fd32633fed441d6789c0fb7ce9aceab.jpg

7f8302886b05962033264717f4f0cd75ae2.jpg

构建成功后查看 镜像仓库里面的镜像是否已经打了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发布到正式环境

274316d005c681ac21c3b476f50fc61785e.jpg

00bdf333f074f50be9de5b8d0e90812db03.jpg

注意所有脚本是需要授权才能够执行

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

487161f700dd7ddab2b09923a78fe390ead.jpg

现在我们测试回滚岛上一个版本,上一个版本里面是没有duke.html我们通过回滚验证

cac286771a0013965a7ace415b3c8605894.jpg

721a33d5b57da519ed8d94745a728f4c535.jpg

构建后验证

090b2f03896bb02548a9e8fdd2457b9caf1.jpg

404 的出现说明我们已经成功回滚。

 

转载于:https://my.oschina.net/54188zz/blog/3023574

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值