配置 git 仓库流水线自动部署 PHP

需求

当代码推送到 Gitee 仓库时,自动更新服务器上的代码,免去人工更新的操作。

分析

分支推送并部署本质上就是自动化行为。平常接触得比较多的方案有两种:

  • Webhook
  • 流水线

方案比较

码云仓库的 Webhook 做不了监听多分支、监听指定子目录推送。所以最后还是项目组还是选了流水线。

费用

流水线是一项付费服务,它会按上传、构建、发布等环节按量收费,每月有1000分钟免费赠送的额度。
好在PHP项目是不用 build 的,额度完全够用,可以视同免费。

部署构思

以测试环境为例,以 release 分支对应测试环境。那么先到测试环境目录,把 release 分支 clone 下来。接下来每次 push 到 release 的时候,都让服务器自动化 pull 一次,就能实现自动部署了。

配置步骤

一、开通流水线

按照《码云帮助文档-流水线》的流程开通,在分支里会自动创建 3 条流水线。
虽然上面有说明这 3 条流水线分别用来干嘛,但不是很符合我的需求,我选择了直接删掉。

二、配置主机

要想让码云和云服务器相连,必须提前做一些配置。按照《码云帮助文档-主机组》的流程,把服务器(组)挂到码云上去。

三、配置公钥(可选)

让服务器拉代码是要 gitee 凭证的,当然,用个人账密也可以拉取,所以本流程是(可选)的。
但对于公司服务器来讲,个人账密配在上面,那跟穿条底裤来上班有什么区别?
为了保留最后一丝体面,最好还是按照《码云帮助文档-公钥管理》配个公钥,配好之后,公钥只能 pull 指定仓库的代码。

四、配置机器人(可选)

如果需要流水线执行通知,那么可配置企微/钉钉/飞书机器人。具体看需求去查不同公司的文档。

五、创建流水线

流水线配置如下方代码所示,主要包含了以下几个意思:

  • 当 release 分支发生任何 push 时触发
  • 触发时,将在连接好的主机组上执行脚本
  • 脚本的内容是“进入项目目录拉取代码”
  • 完事之后让钉钉机器人发通知
  • 超时设置一分钟,失败不重试
version: '1.0'
name: release
displayName: 测试环境流水线
triggers:
  trigger: auto
  push:
    branches:
      prefix:
        - release
stages:
  - name: stage-89ebf680
    displayName: 自动化部署
    strategy: naturally
    trigger: auto
    executor: []
    steps:
      - step: shell@agent
        name: steps-release
        displayName: 代码拉取
        hostGroupID:
          ID: develop
          hostID:
            - 主机
        script:
          - cd /www/wwwroot/网站目录/项目名字
          - git reset --hard HEAD
          - git pull --no-edit origin release
        notify:
          - certificate: 钉钉机器人配置(如不用, notify 板块直接删掉)
            events:
              - success
              - fail
              - cancel
              - skip
            content:
              - repository
              - pipeline
              - operator
              - branch
              - detail
              - stage
              - task
            type: dingtalk
        strategy:
          retry: '0'
          timeout: 1

六、保存流水线
流水线到 release 分支,会创建一个 yml 并提交到 release。
这步操作也符合流水线条件,所以会直接触发流水线,执行第一次代码拉取。
正常情况下,就可以看到“流水线执行成功”的提示了。

小记

  • 主机重启后,流水线会连不上主机,需要重新执行脚本以连接码云。
  • 一般来说,流水线拉一次 PHP 代码耗时在 2 - 5s 之间。
  • 流水线每次最低计费时间是 1 分钟。也就是说每个月赠送 1000 分钟额度,最多供我们用 1000 次。
  • 前端其实也能用流水线。前端的流水线步骤是先 clone 代码,把 dist 复制到项目目录重命名,再把拉取的代码包删掉。
posted @ 2022-12-23 10:57  西湖摸鱼  阅读(527)  评论(0编辑  收藏  举报