DevOps持续交付和持续集成已被科技公司普遍使用,它可以从代码管理到产品的交付实现全流程自动化,现在业界常规的作法是gitlab->gitlab-ci->k8s 或者 gitlab->jenkins->k8s多种方案;因为这种自动化部署可以通过K8S实现负载均衡、高可用、灵活高度等,可适用于大规模生产环境。今天介绍一个只需要gitlab和一台装有docker的服务器就可以实现的轻量级自动部署方案gitlab+docker
- 最小化环境只需要一台装好gitlab的服务器
- gitlab-runner非生产环境下可以和gitlab装在一起。(如果把这种轻量级的用于生产建议业务负载服务器和gitlab、gitlab-runner分开,如果你的业务较多已经是平台化的建议使用上面提到的k8s方案)。
docker安装
gitlab安装
- 请参照以下链接选择相应的平台安装:https://about.gitlab.com/install/
gitlab-runner安装
- 请参照以下链接 选择椒的平台安装: https://docs.gitlab.com/runner/install/
在gitlab中注册gitlab-runner
- 打开gitlab选择管理中心-runner如下图复制令牌
- 在gitlab-runner中执行以下命令注册
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16- 1. 运行注册命令
gitlab-runner register
- 2. 输入gitlab实例的url
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.example.com
- 3. 输入刚复杂的令牌信息
Please enter the gitlab-ci token for this runner
- 4. 输入一个gitlab-runner的描述信息
Please enter the gitlab-ci description for this runner
[hostname] ssh
- 5. 给gitlab-runner打一个标签,这个后面在gitlab中可以更改
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
- 6. 输入gitlab-runner的执行器(这里我们选择ssh)
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
ssh
这时在gitlab里就可以看到Runner已经注册上来了
- 修改gitlab-runner配置 /etc/gitlab-runner/config.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "ssh"
url = "https://gitlab.example.com"
token = "f7a4c4f95470ee192e810dddddfdf"
executor = "ssh"
[runners.ssh]
host = "your ip"
port = "22"
user = "server username"
password = "server password"
identity_file = "/root/.ssh/id_rsa"
部署hexo博客项目测试
- 项目结构:
- Dockerfile文件 根据自己的项目调整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18FROM hexo:latest
MAINTAINER eddiewen email 'eddiewen@icanwen.com'
COPY _config.yml /app/blog/_config.yml
COPY miho /app/blog/themes/miho
ADD source /app/blog/source
WORKDIR /app/blog
RUN npm install hexo-generator-json-content --save
WORKDIR /app/blog
RUN rm -rf source/_posts/hello-world.md
CMD ["hexo","server"]
.gitlab-ci.yml 是定义自动部署的主要文件,每一天stage定义一个任务,例子如下:
1 | variables: |
保存项目提交代码
自此我们的项目就可以作到在推代码时全自动部署的功能;当然这是一个简单的项目,有很多项目不像这种展示性网站这么简单比如有下需求:
- 一个项目有多个分支,只需要主分支才需要自动部署
- 需要有测试环境和生产环境之分,生产环境需要审批后才能点击手动部署
- 项目有测试DB和生产DB
- 项目需要自动部署后就有高可用和负载均衡功能
- 等等,我会抽空在以后的文章中涉及
最后更新: 2023年08月27日 03:06