手把手教你用 GitLab CI/CD 部署项目
如果你用 GitLab 来做项目管理,我非常建议你了解一下 GitLab 的 CI/CD 的功能,它可以自动帮你完成项目的打包、部署、上线。 免去了上线过程中的复杂操作,对于标准化流程机器向来比人做的好。也能减少很多不必要的 Human Error 。 本文以 Python 项目部署为例,讲一下 CI/CD 中的一些部署思路,给你一个引子,引出你对 CI/CD 更多的探索。 概括来讲,CI/CD 包含两个关键步骤:配置和执行,只要你的项目根目录里有 .gitlab-ci.yml 配置文件,GitLab 就会读取,然后按照配置去执行计划。 配置: 是通过 GitLab CI 配置文件 (.gitlab-ci.yml )来告诉,执行者(Runner)要做哪些事情 执行: 执行的动作是由 Runner 来做的, Runner 是一个可执行程序,可以在任意一台服务器上。项目可以配置一个或多个 Runner。 关于配置 以下是 .gitlab-ci.yml 的一个模板,可以复制到你项目中改改就可以完成你项目的自动部署功能。 stages: # 定义步骤 - deploy deploy_test: # job 名称 image: instrumentisto/rsync-ssh:latest # 指定 docker 镜像 stage: deploy # 所属的步骤 script: # 执行的脚本 - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - echo "$TEST_SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa # 将 GitLab 里设置的的私钥环境变量输出到 ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh -p 22 -i ~/.ssh/id_rsa root@"$TEST_SERVER" "cd $TEST_PROJECT_PATH && git pull && source .venv/bin/activate && pip install -r requirements.txt && python test.py " retry: 2 # 如果任务执行失败,会进行 2 次的重试 only: refs: - test # 仅当代码被推送到 test 分支时才会触发该步骤 deploy_prod: image: instrumentisto/rsync-ssh:latest # 指定镜像 stage: deploy script: - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - echo "$PROD_SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa # 将 GitLab 里设置的的私钥环境变量输出到 ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh -p 22 -i ~/.ssh/id_rsa root@"$PROD_SERVER" "cd $PROD_PROJECT_PATH && git pull && source .venv/bin/activate && pip install -r requirements.txt && supervisorctl restart server" retry: 2 only: refs: - master 配置文件包含 stages 和 Job 两个概念。stages 根据项目上线一共有多少个环节来定义,如你可以能有「构建」(build)->「测试」(test)->「部署」(deploy)。我这里为了演示方便只配置了一个 deploy, stage 名称可以随意取,但是尽可能的语义化一些,这样在仓库看日志会比较清晰。 ...