之前入坑dotnet core,由于一开始就遇到在windows上编译发布的web无法直接放到centos上执行。之后便直接研究docker,实现在容器中编译发布。然后就越玩越大,后来利用git的hooks实现自动实现git源码一收到push就自动化获取新代码并编译发布。最后为了方便复用,直接做成统一配置,因此不需要再次编写复杂的脚本配置。只需要打开配置文件,配置几项值,运行一个脚本就ok。
目前有两个版本,原始版本包括git项目的自动克隆。v1版本则把git的克隆抽了出来需要人工克隆一次。具体看readme文档有说明。
技术栈
- asp.net core
- shell脚本
- python
- docker
- docker-compose
- nginx
github地址:https://github.com/CrystalWindSnake/NetCore.Test.AutoDeployment.git
坑s的记录(这里会慢慢补充更新)
源码更新后,重启web容器后,再次访问网页会出现502错误。
这个原因是因为docker的网络机制。每次容器启动时,docker都会重新分配一个ip地址给容器,如果有配置容器之间网络通信(通过links),会在容器中的hooks文件中记录上连接容器的ip信息。但由于web容器重启而不需要重启nginx,导致nginx容器还记录着之前web容器的ip信息,导致更新后再次访问nginx就跳转不到web容器上。
解决方法就是配置独立的网络(通过docker-compose)。具体看下面截取的配置(docker-compose.yml)
version: '3'
services:
web:
networks:
- auto-ci-nw nginx:
networks:
- auto-ci-nw networks:
auto-ci-nw: