摘要:本文主要记录了Python项目在GitLab中实现自动部署的具体操作;
1、持续集成基本概念
在传统开发过程中,代码的集成工作通常是在所有工程师们工作完成后进行的,需要单独构建,这往往会花费大量的时间和精力。持续集成是一种将集成工作放在软件开发阶段的做法,以便更加有规律地构建、测试和集成代码;
持续集成可以在开发人员提交了新代码后,立即进行构建、单元测试,可以根据测试结果确定新代码或配置环境是否正确;
2、项目相关操作:
2.1 gitlab上新建项目
写了个python相关的demo, 放到了gitee上;
访问地址为 https://gitee.com/fanmixue/docker-fast-tortoise-demo
打开自己的gitlab,点击 New project , 导入下项目
2.2 Dockerfile文件
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./ /code/
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8888"]
2.3 设置CI/CD
进入gitlab当前项目中,左下角找到 Settings,选择第一个选项General,找到Pipelines,打开后Settings里会显示CI/CD选项;
ps:如果你找不到Settings按钮,啊哦,那说明你没有项目管理员权限哦~
2.4 记录Url和Token
进入CI/CD界面,展开 Runners 选项,找到url和token;
3、 服务器相关操作
服务器环境为: Ubuntu 64位
3.1 安装docker
具体可参考官网:https://docs.docker.com/engine/install/ubuntu/
3.2 安装gitlab-runer
3.2.1 docker方式安装
# 拉取镜像
docker pull gitlab/gitlab-runner:latest
# 运行镜像
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner
3.2.2 非docker方式安装
# ubuntu中安装
sudo apt-get install gitlab-runner
3.3 添加用户组及权限
# 添加 用户组及用户
useradd -m -g gitlab-runner gitlab-runner
# 查看系统用户
sudo vim /etc/passwd
# 将下图蓝框内的数字改为0:0,和root保持一致
3.4 注册gitlab-runner
# 使用一次性容器来注册 gitlab-runer, --rm 容器推出时清理用户数据
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
上面命令执行完,接下来会提示你输入以下信息,做个示例,仅供参考哈,可别都粘贴过去了~
# 输入域名或者服务器ip地址,就是步骤三的url,如果gitlab和要部署的服务器地址不一致,需要做个地址映射哦,自行百度下
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
# 输入token,就是步骤2.3的token
Please enter the gitlab-ci token for this runner:
# 输入runner描述,可写可不写
Please enter the gitlab-ci description for this runner:
# 给这个Runner指定tags,可以写多个,英文逗号隔开即可
Please enter the gitlab-ci tags for this runner (comma separated):
# 选择Runner是否接受未指定tags的任务,稍后可修改,默认值为false,可写可不写
Whether to run untagged builds [true/false]:
# 选择是否为当前项目锁定Runner,通常用于被指定为某个项目的Runner,默认值为true,可写可不写
Whether to lock the Runner to current project [true/false]:
# 选择Runner executor(Runner执行器),这里我们选docker哈
Please enter the executor: docker, shell, virtualbox, kubernetes, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine:
docker
# docker版本选最新版
Please enter the default Docker image (e.g. ruby:2.6):
docker:latest
# 好了到这一步,看到输出以下语句,就算注册完了,接下来去CI/CD界面下的Runners选项里,看看有没有成功;
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
如下图所示,前面的圆圈为绿色的,代表注册成功了,标签名为 fastApi;
注意:如果这个时候前面的圈圈为灰色的,请执行以下命令重启下gitlab-runner, 稍作等待,多刷新几次浏览器即可;
docker restart gitlab-runner
3.5 配置秘钥及静态目录相关
cd ~/.ssh # 查看是否存在密钥
ssh-keygen -t rsa # 生成密钥
cat id_rsa #查看私钥
cat id_rsa.pub # 查看公钥
将私钥、公钥及ip等信息粘贴到 CI/CD的变量中,具体操作看下图:
4、 gitlab-ci.yml文件
在项目根目录下新增文件gitlab-ci.yml,将以下代码粘贴过去,然后提交代码到test分支;
test:build:
stage: test
script:
- docker build -t fast_api .
- if [ $(docker ps -aq --filter name=trunkverse_service) ]; then docker rm -f trunkverse_service; fi
- docker run -d -p 8098:8098 --restart=always --name fast_api fast_api
- echo 'docker run 完成'
only:
- test # 指定test分支一更新则立即构建
tags:
- fastApi # 对应每个runner注册时定义的tag
test:deploy:
image: alpine:3.7
stage: deploy
script:
- echo "http://mirrors.aliyun.com/alpine/v3.7/main/" > /etc/apk/repositories # 下载镜像
- apk add --no-cache rsync openssh # 安装rsync openssh
- mkdir -p ~/.ssh
- echo "$SSH_KEY_PRIVATE" >> /root/.ssh/id_rsa
- echo "$SSH_KEY_PUB" >> /root/.ssh/id_rsa.pub
- chmod 700 /root/.ssh/
- chmod 600 /root/.ssh/id_rsa.pub
- chmod 600 /root/.ssh/id_rsa
- echo -e "Host *\n\t StrictHostKeyChecking no \n\n" > ~/.ssh/config
- rsync -av --delete ./ $SERVER_HOST:$SERVER_PATH
only:
- test
tags:
- fastApi
5、查看结果
点进去绿色圈圈,可以看到任务执行流程:
任务执行成功后,在服务器上指定文件夹下,可以看到所有项目文件已经自动更新了,浏览器输入服务器ip+8098端口可以访问成功~
ps:因为这个demo项目里,启动时需要连下mysql,真正使用时,要将mysql配置成允许任意ip访问才行,具体操作请看下篇文章~
6、你可能遇到的问题
如果你的服务器是在内网中的,项目中给出的URL是内网域名而不是IP,那么我们在注册runner的时候,第一步输入url的时候请输入http:// + ip, 然后sudo打开 /srv/gitlab-runner/config/config.toml ,对runner增加域名:ip映射,否则代码拉不下来,会报错的
sudo vim /srv/gitlab-runner/config/config.toml