随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代。尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker镜像,实现自动部署。
emmmm,最近在自己的服务器上,利用docker+jenkins+nginx_proxy,搭建了一套多项目自动化部署的网站,大致流程图如下。
1、开发人员提交代码到gitlab。
2、gitlab将代码变动提交到jenkins上(这一步可后续补上)。
3、jenkins进行Dockerfile自动化构建项目。
4、push项目镜像到阿里云镜像仓库。
5、命令远程服务端执行shell脚本,拉取前一步构建好的阿里云镜像,在本地启动并允许项目容器。
6、将构建结果通知到相关测试人员。
一、准备工作
- 基本了解docker容器命令及用法(Dockerfile、docker-compose)。
- 一台安装好docker、docker-composer环境的服务器。
- 一个gitlab账号,也可以是码云、github
- 项目文件
- 部署所需镜像 (后面会提供)
- nginx_proxy镜像:起到反向代理、负债均衡等等作用。
- jenkins镜像:起到自动化部署作用。
- nginx+php(项目镜像,也可以是java、web,根据需要而定)
- 其他非必须扩展镜像(mysql、redis、mongo等等)。
二、Docker Compose 文件配置
Compose 是用于定义和运行多容器Docker应用程序的工具,通过Compse,你可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有容器。
如果不太了解YML文件配置,可以阅读以下链接先
YAML 入门教程 | 菜鸟教程www.runoob.comCompose 使用的三个步骤:
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml,定义构成应用程序的服务,这样它们可以在隔离环境一起进行。
- 执行docker-compose up命令来启动并运行整个程序。
以下是一个完整的docker-compose.yml文件
version
在yml中,简单的配置了一个nginx_proxy容器、项目容器、redis容器、mysql容器。
参数说明:
- image:拉取所需镜像
- container_name:容器名称
- restart:always重启时默认启动
- environment:环境变量
- VIRTUAL_HOST:域名,不同项目配置不同域名
- MYSQL_ROOT_PASSWORD:数据库密码
- ports:映射端口
- links:关联网络
配置说明:
nginx_proxy容器:当docker容器发送变化后,会生成 nginx 反向代理配置并且重新加载 nginx,将VIRTUAL_HOST域名信息代理到对应项目容器。
项目容器:集成了php+nginx的项目镜像,nginx_proxy代理到项目容器后,由项目容器里的nginx去调用php文件。
redis容器、mysql容器:作为项目文件需要的扩展镜像。
执行下命令并访问
打印网页信息phpinfo.birdnight.cndocker-compose up
docker ps
当终端正常显示docker进程,页面正常显示,那么手动构建流程顺利完成。
三、jenkin安装、配置
运行并安装jenkins
docker pull jenkins/jenkins
docker run -d -p 9001:8080 --name jenkins jenkins
9001可以换成一个没有被用过的端口号,阿里云服务器的话,还需要取开放下端口号,并查看docker的运行情况,如下图所示。
安装完成后,访问http://ip:端口号,会出现如下图的页面
选择第一个进行安装,并新建一个账号
如下图,至此jenkins已经安装完毕。
接下来需要对Jenkins进行一些配置,进入系统管理->系统配置,找到SSH remote hosts、Gitlab,添加服务器进行配置和gitlab账号,并connection成功,如下图。
最后拉到最后,配置cloud configuration信息,将自己服务器的docker服务端口2376开放出来,并connection成功,如图所示。
四、自动化构建配置
这是一个简单的项目部署文件,可以配置在自己的gitlab或者码云上。
https://gitlab.com/gitlab_xin/phpinfo.gitgitlab.comgitlab鑫 / phpinfo
gitlab鑫 / phpinfogitlab.com1、选择第一个进行配置构建项目
2、按下图信息进行配置。
配置gitlab凭证,并连接成功。
配置阿里云项目镜像。
配置shell脚本命令,根据自己服务器目录进行对应修改。
点击应用保存,后进行项目构建。
3、项目构建
出现蓝色图片则表示构建成功
构建失败我们可以在控制台进行查看失败原因。
4、查看结果,自己gitlab上修改代码后,Jenkins点击构建,项目会进行自动部署。
。
。
。
。
至此,自动化部署大概就是以上的流程,配置虽然比较繁琐,但是部署完毕后,开发起项目后,会变的非常方便,无论是单项目还是多项目,单人还是多人。
当然还可以做很多优化,例如在gitlab加钩子、加载一些证书、负债均衡等等。以上只是将网上的一些大佬的信息整理了下。