公司代码架构 - Docker + Jenkins + Gogs + Portainer(一)

介绍

公司研发项目时,遇到git作为版本控制时,很常见的问题是部署比较麻烦(相比较麻烦),需要先克隆在拉到服务器部署,代码提交频率过高时,就会出现一天很多次提交代码,部署代码,浪费了大量的人力物力,于是乎大量的架构师技术总监们开始研究各类解决方案,各种上线前review代码,这是一件非常痛苦的事情,这里简单记录一下公司代码架构的部署,来解决公司代码架构上的诸多问题,也是自己做一个笔记,文章内如有错误,还请各位指出。

Tips:该环境并不适用于个人用户以及小微企业,适用于项目众多且开发人员大于30人的公司

搭建环境

  • 服务器1 :Virmach 水牛城 RAM1.8G 2C 10GSSD(黑五机器)
  • 操作系统 :Ubuntu16.04
  • 部署环境 :LNMP1.6 (我是军哥铁粉)

这里说明一下,多台服务器是为了解耦,说是解耦,实则认为承受不住,且大部分公司已经有一套完整的git服务器了,本节要做的就是加个自动构建而已,git服务器可自选环境,后面会讲如何搭建Gogs,如果有高配置服务器的公司或个人,可以尝试使用单服务器多部署,本文所需共三台服务器。

服务器1:搭建Jenkins中转服务器,做代码自动构建使用
服务器2:生产环境服务器,实则测试服务器,部署代码使用
服务器3:Gogs服务器,Git版本库服务器,做代码版本控制使用

服务器1的配置属于中下配置,该机型一年 13刀,属于大部分人都承受的起的价格,请注意,本文标注的配置仅用于配置自动构建服务器,并不用于部署代码以及Git服务,个人用户小鸡多的可以尝试

Ubuntu16.04/Ubuntu18.04 安装 Docker

Docker可以说是非常的牛X了,关于他的概念不多说,牛就牛在管理太方便了,就好像是 WHMCS 用母鸡开小鸡一样,母鸡永远不考虑小鸡的运作,只需要配合就好,Docker也一样,我们只需要创建容器,管理容器就够了,剩下的交给Docker来处理,且Docker可以做负载均衡,后续做架构的时候可以开多个Docker做集群,按需来做

安装

删除旧版本,更新apt-get,安装docker

1
2
3
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt install docker.io

启动Docker并查看版本

启动docker

1
2
3
systemctl start docker
systemctl enable docker
docker --version

我这里安装的是 18.09版本

Docker1.png
Docker1.png

安装Jenkins

安装

安装Jenkins可以选择多种方式安装,我这里采用的是Docker的方式安装的,由于我们上面已经安装过Docker,按照Jenkins官方给的安装方案就可以了,首先pull一个稳定版本的 Jenkins 镜像
镜像地址 : jenkinsci/blueocean

1
2
docker pull jenkinsci/blueocean
docker images

Docker2.png
Docker2.png

查看当前Jenkins版本

1
docker inspect [IMAGE ID]

这里的 IMAGE ID 则是上面 查看镜像的 IMAGE ID

Jenkins1.png
Jenkins1.png

红框内则是 对应版本号

1
2
3
4
5
6
# 创建一个存放Jenkins Docker的目录
mkdir /home/root/Jenkins
# 启动一个Docker
docker run -d --name jenkins -p 8081:8080 -v /home/jenkins:/home/jenkins jenkins/jenkins:lts
# 查看jenkins服务
docker ps | grep jenkins
Jenkins2.png
Jenkins2.png

打开 http://IP:8081

Jenkins3.png
Jenkins3.png

输入命令进入 Docker内部

1
2
3
docker exec -it jenkins bash
# 获取密码
cat /var/jenkins_home/secrets/initialAdminPassword

重启Docker

1
docker restart [CONTAINER ID]

[CONTAINER ID] 为当前Jenkins的版本号 例如 2.164.3 则输入 docker restart 2.164.3

Nginx反代Jenkins,绑定域名

由于众所周知的水牛城服务器卡,国内环境必须搭配CloudFlare才可以使用,否则太卡了,因此安装LNMP环境,后续自动构建时也可以构建到这里

  • 安装方法一:

LNMP环境安装教程 : LNMP一键安装包 - 安装教程

懒得打开的话,可以直接输入

1
wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp

我这里安装的是 1.6稳定版,需要其他版本的可以自行修改版本号安装

  • 安装方法二:

apt-get安装,建议先更新apt-get

1
apt-get install nginx

打开NGINX配置文件目录,创建一个新的配置文件(这里是lnmp环境的配置文件地址,apt-get安装的nginx配置文件存放于 /etc/nginx/conf.d 中)

1
vi /usr/local/nginx/conf/vhost/jenkins.conf

输入以下内容,请注意替换掉下面的 jenkins.0161.org

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name jenkins.0161.org;
client_max_body_size 60M;
client_body_buffer_size 512k;
location / {
proxy_pass
http://localhost:8081;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

重启lnmp使配置生效

1
lnmp reload

打开CloudFlare绑定域名,增加CDN支持,此处比较简单,不多赘述

结语

一个完整的架构,需要很多的付出,并非一朝一夕,本文所属架构并不适用于所有公司或者个人,大型公司还需要K8s集群,承受多少并发取决于很多因素,任何架构都不能通杀所有类型的公司