目的
这篇介绍基于Docker快速实现持续交付系统。持续交付主要涉及代码管理,集成打包与自动部署几个环节。我们使用GitLab CE解决代码管理,使用Jenkins解决集成打包,使用Ansible解决自动部署,同时使用Portainer来管理Docker。这次先把需要的环境搭建起来,后续还会继续写一篇关于验证和调整的部分。
本文使用CentOS 7.8。
软件简单介绍
Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,比虚拟机更加强大,体积小,运行速度快,Docker 容器可以打包为镜像文件(类似VM虚拟机的那些快照文件),迁移的时候我们只需要在新服务器上安装Docker,就能把之前打包好的镜像文件导入到 Docker 里面,运行容器,就能实现访问,不需要重新配置环境。
Portainer
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
Gitlab
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的web服务。GitLab是由 GitLabInc. 开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
Jenkins
Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Ansible
ansible 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible 是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible 所运行的模块,ansible 只是提供一种框架。
安装Docker
- 设置仓库
1 | sudo yum install -y yum-utils |
- 安装Docker Engine
1 | sudo yum install docker-ce docker-ce-cli containerd.io |
- 启动Docker
1 | sudo systemctl start docker |
- 开机启动
1 | sudo systemctl enable docker |
- 下载Docker Compose
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
- 设置权限
1 | sudo chmod +x /usr/local/bin/docker-compose |
安装Portainer
- 单机版运行
1 | docker run -d -p 9000:9000 \ |
安装Gitlab CE
- 通过Portainer的GitlabCE的模板创建容器,设置容器名,及高级选项,注意为端口和卷的映射。
- 通过http://ip进行访问,登录时会提示需要输入root用户的密码(gitlabce)。
安装Jenkins
- 通过Portainer的GitlabCE的模板创建容器,设置容器名,及高级选项,注意为端口和卷的映射,这里
- 连接到容器里,/var/jenkins_home/secrets/initialAdminPassword,取出初始密码。
- 安装推荐插件
- 创建管理员用户(root/jenkins)
安装Ansible
- 更新源
1 | sudo yum install -y epel-release |
- 安装
1 | sudo yum install -y ansible |
这里暂时没有使用Docker来安装,而是直接安装在宿主机上。这样可以通过Jenkins启动宿主机脚本,从而执行Ansible脚本,创建容器。
还有一个思路是在Jenkins的Docker中同时安装Ansible,这样Jenkins编写部署脚本会更容易些。后面把流程跑通后进一步尝试。
未完待续
下一篇会继续介绍,整体持续交付系统的验证过程。
参考链接
这次其实网上查看了不少文档,但自己时间拖得比较长,不少文章链接可能没记上。
Install Docker Engine on CentOS
https://blog.csdn.net/hanzheng260561728/article/details/105138225
https://blog.csdn.net/A632189007/article/details/78779920
https://www.cnblogs.com/leozhanggg/p/12040338.html
https://www.jianshu.com/p/14e356cf8bb4
https://cloud.tencent.com/developer/news/370703
https://www.jianshu.com/p/4923348ef3da
https://www.cnblogs.com/bigben0123/p/7886092.html
https://www.jianshu.com/p/eb3cbb34be97
https://www.jianshu.com/p/080a962c35b6
https://blog.csdn.net/anqixiang/article/details/104968469
https://www.jianshu.com/p/eeb15a408d88
https://www.w3cschool.cn/automate_with_ansible/automate_with_ansible-1khc27p1.html