前言
写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试、编译、发布这些重复性很高的工作,全部变成自动化,减轻工作量,提高效率,解放生产力,为华夏伟大复兴贡献力量
说回正题,持续集成工具主流的就 Jenkins 、Gitlab CI/CD 这些,因为我们刚好在用 Gitlab,所以就不去折腾 Jenkins 了,直接用这个好了~
关于 Gitlab 的安装,可以参考我之前写的文章:GitLab的安装、配置、使用
概念科普
缩略词 CI / CD 具有几个不同的含义。CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
CI/CD 中的"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。
…… (省略又臭又长的名词解释)
只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。因案例而异,该术语的具体含义取决于 CI/CD 管道的自动化程度。许多企业最开始先添加 CI,然后逐步实现交付和部署的自动化(例如作为云原生应用的一部分)。
安装Gitlab-Runner
根据Gitlab官网的指引
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Give it permissions to execute
sudo chmod +x /usr/local/bin/gitlab-runner
# Create a GitLab CI user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# Install and run as service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
服务器使用的是CentOS7系统,实际配置时遇到无法识别
gitlab-runner
命令的问题,用echo $PATH
打印了一下环境变量发现是没有/usr/local/bin
,添加到PATH就可以了
安装的时候会自动创建gitlab-runner
用户,Runner会在这个用户下执行各种任务,当然用户名和Home目录都可以自定义,就是上面倒数第二个命令。
注册Runner
在Gitlab中,依次进入:菜单 - 管理员 - 概览 - Runner - 注册一个实例Runner
就会出来一个token,使用以下命令注册即可
sudo gitlab-runner register --url http://gitlab地址:端口/ --registration-token HjymWn4gEzHaVizpvG
注册过程中会让你输入一些信息,最后需要选择executer,可选项有virtualbox、docker、shell之类的,这里我选的shell,直接执行命令控制项目部署。其他的executer等后面再来研究用法。
注册完辽就可以在Gitlab的管理界面看到这个Runner了
为了让所有项目都能用这个Runner进行部署,需要修改一下配置,把这个钩打上
配置
为了让gitlab-runner用户能够使用docker,需要将其加入到docker用户组
usermod -aG docker gitlab-runner
配置docker代理
因为我们的生产服务器不能直接访问外网,所以还得配置一下docker的代理
编辑文件:/home/gitlab-runner/.docker/config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy_ip:8080",
"httpsProxy": "http://proxy_ip:8080",
"noProxy": "localhost,127.0.0.1"
}
}
}
gitlab-ci.yml
只要在项目的根目录中加入这个文件,然后推送代码到 Gitlab (一般来说是 master 分支),Gitlab Runner 就会根据 script
来执行构建任务。
平时开发时,如果不想要自动构建,可以 checkout 到其他分支(例如 dev)进行开发,等到功能完成需要发布的时候,再合并到 master 分支即可。
这里我写的是用 docker 部署一个 AspNetCore 应用的例子,实际还有 Python、Go、前端项目等常用例子,我后面再更新相关的文章~
variables:
GIT_STRATEGY: none
stages:
- deploy
deploy_job:
stage: deploy
only:
- master
script:
- cd /home/gitlab-runner/projects/dotnet/dashboard
- rm -rf dashboard-backend
- git clone http://127.0.0.1:8080/deali/dashboard-backend.git
- cd dashboard-backend
- docker-compose up --build -d
小结
这样就搞定了 Gitlab CI/CD 的基础用法,也就是所谓的“持续集成”,可以说灰常好用了~
当然它的功能很强、很多,本文的例子只是用到了其中一种,更多的用法我还在探索中,有收获的话后续会更新这个系列的文章。
参考资料
- Post-installation steps for Linux:https://docs.docker.com/engine/install/linux-postinstall/
- Docker 代理脱坑指南:https://www.cnblogs.com/michael9/p/12300824.html
- asp.net core结合Gitlab-CI实现自动化部署:https://www.cnblogs.com/guolianyu/p/9709166.html
- 用 GitLab 做 CI/CD 是什么感觉,太强了:https://cloud.tencent.com/developer/article/1684099
- CI/CD 工具选型:Jenkins 还是 GitLab CI/CD:https://www.infoq.cn/article/9hscujuukmbbwjpr0p0g
- 还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!https://juejin.cn/post/6989411087611330573