由于平时开发遇到很多问题都是关于持续集成方便的,所以乘着项目结束的空闲时间学习一下
平时开发主要遇到的有关问题
- 不知道CI是啥
- 不知道CI跑挂了会发生啥
- 不知道数据库更改为啥不生效
- 不知道项目是怎么自动部署的
- 不知道怎么把部署目标服务器和Gitlab关联
为了解决这些问题开始学习持续集成相关的东西
- Gitlab部署和CI相关设置
- Gitlab-Runner安装和使用
- Sentry的部署和使用
- 钉钉机器人应用
- 以上相关问题的理解和解决
什么是CI
- Continuous Integration (持续集成)
- 多人合作开发,多部门合作开发
- 开发迭代历史记录,方便代码集成管理
- 自动部署测试,降低测试环境部署的时间成本
代码管理
- Gitlab代码版本管理工具
# docker 安装
export GITLAB_HOME=/srv/gitlab
sudo docker run --detach \
--hostname aa.bb.cc \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://aa.bb.cc:8090'; gitlab_rails['lfs_enabled'] = true; gitlab_rails['gitlab_shell_ssh_port'] = 22; nginx['listen_port'] = 8090;" \
--publish 8090:8090 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ee:latest
Gitlab-Runner 是什么
Gitlab-Runner是Gitlab配套的CI工具,安装在测试服务器上,定时轮询Gitlab指定项目情况,有部署任务会自动拉回本地进行部署
- 测试服务器需要安装
gitlab-runner
才能与Gitlab
协同工作
# ubuntu18.04 安装
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
export GITLAB_RUNNER_DISABLE_SKEL=true; sudo -E apt-get install gitlab-runner
- 注册
gitlab-runner
到Gitlab
官方文档 GitLab Runner Docs
# 注册gitlab-runner,启用 docker executor (测试服务器需要安装docker)
sudo gitlab-runner register \
--non-interactive \
--url "http://aa.bb.cc:8090/" \
--registration-token "pexrtA2ggQoEvuxI" \
--executor "docker" \
--docker-image alpine:latest \
--description "docker-runner" \
--tag-list "study-ci" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
# 部分参数解释,详细请参考官方文档
--url 指定要协同工作的Gitlab生成的CI地址,该地址直接指向某个特定的项目
--registration-token Gitlab生成的CI Token,和 url 一起使用
--executor 指定Gitlab-Runner以何种方式工作,[官方文档](https://docs.gitlab.com/runner/executors/README.html)
--tag-list 指定该测试服务器的标签属性,相当于起个名字或多个名字
- .gitlab-ci.yml 文件
该文件内容告诉Gitlab-Runner
具体执行的动作、流程
一个简单的管道通常分为三个阶段:build
构建代码运行环境,安装相关依赖test
执行代码测试deploy
执行项目部署
ps: 不是所有的阶段都必须有,没有的会自动忽略掉,比如代码测试
钉钉机器人
略 …
Sentry 部署和使用
- Sentry 是什么
Sentry是一个异常日志集中收集系统
# github上拉取最新版本安装脚本
git clone https://github.com/getsentry/onpremise.git
# 安装 Sentry, 安装过程中会报一些错,只有没有直接退出安装,不用管
./install.sh
- Sentry 使用
Sentry 的 WebHook 和钉钉机器人配合使用,可以达到和Gitlab类似的效果 (妈妈再也不担心我不知道服务器上的代码为什么崩了)
# flask sentry-sdk
pip install sentry-sdk[flask]
# flask 初始化
sentry_sdk.init(
"http://6znp1fVFaZPwML3YgLYidV5rcXtNNbUW@home.671201.xyz:8004/x",
integrations=[FlaskIntegration()],
traces_sample_rate=1.0
)
# django sentry-sdk
pip install sentry-sdk
# django 初始化
sentry_sdk.init(
"http://6znp1fVFaZPwML3YgLYidV5rcXtNNbUW@home.671201.xyz:8004/x",
integrations=[DjangoIntegration()],
traces_sample_rate=1.0,
send_default_pii=True
)