适用于站点的自动化部署

适用于站点的自动化部署

站点引导页在最近有很多改动,每次改动都需要部署,这很麻烦,是时候上自动化部署了。

能实现站点自动化的方案,我找到两种,下面我分析一下这两种方案。

方案一 CI/CD

CI/CD就是持续集成/持续交付,它包括有拉取代码、构建、部署、测试。

代表这一方案的产品选择的话,我当然是选择Jenkins了。

方案二 自动化部署平台

常用的自动化部署平台包括DeployHQ、Capistrano、Fabric等。

需要在它的平台上配置相关内容,然后它通过SSH、FTP的方式把构建文件推送到机器上。

抉择

基于成本的考虑,我是最后选择了Jenkins,但我会谈一谈选择的问题。

流量

机器的流量计费如果是限制总流量大小的,远程平台的自动部署它会消耗可用流量。

从这一点上考虑,自动化部署平台之类的已经被pass掉了,除非是限制速率的无限流量计费或者是不用考虑流量计费问题的。

内存

自动化部署平台是在它自己的平台上操作的,内存上不用考虑。

CI/CD之类的大而全的东西,运行起来还是比较占内存的。

不过Jenkins可以根据你的需要进行一定的定制化安装功能,而且它是基于Java,可以对参数进行调整。

执行方案

我想将我部署上去的程序全部使用Docker来运行管理,Jenkins也不例外。

触发自动化构建的方式

  1. Github的Webhook
  2. 对应平台或软件提供的方法

我选择了Github的Webhook来触发自动化构建,Github会在特定事件发生后发出POST请求配置URL。

基于Docker环境的Jenkins配合Nginx进行自动化部署站点

要实现这样的方案的话,得考虑容器间文件数据共享的问题。

如果不想暴露Jenkins的端口,可以使用Nginx去进行代理,但需要留意一个网络互通问题。

容器间的文件数据共享

Docker给出的方案有数据容器、数据卷的方式。但很遗憾,Docker不能给正在运行的容器挂载数据容器或数据卷

就目前的场景来说,哪种方式都可以,简单提一下它们的用法。

  1. Docker数据容器

    1
    2
    3
    4
    // 创建一个数据容器
    docker create --name 起个名字 -v 宿主机目录:容器目录 hello-world
    // 启动一个容器并挂载数据容器
    docker run -it --rm --volumes-from 数据容器的名字 nginx bash

    执行完上面的命令就可以在到对应的目录已经挂载,后续的容器要对接启动的时候加个--volumes-from就行。

  2. Docker数据卷

    1
    2
    3
    4
    // 创建一个数据卷
    docker volume create 起个名字
    // 启动一个容器并挂载数据卷
    docker run -it --rm -v 数据卷的名字:容器目录 nginx bash

    后续的容器对接的话,启动时给容器加-v参数就行。

嗯,对了,还需要观察一下不同容器产生的问题的权限问题。

容器间的网络互通

一般如果创建时不明确指定使用的网络,都会使用默认网卡,一般是没有通信问题的。

不过要使用nginx转发到Jenkins的容器上需要知道容器对应的IP。

IP可以通过docker inspect 容器标识符来查看,不过Docker也给出了便利的方案,它内置了DNS可以通过解析容器名称来获取IP。

所以如果需要的话,就配置一下Nginx就行,给个简单示例

1
2
3
upstream jenkins{
server 容器名称;
}

Jenkins配置

启动流程可以参考官方的文档

  1. 创建任务

  2. 配置任务

    这里勾选的就是Github的Webhook方式触发自动化构建,可见Jenkins还提供了很多方法来拉取构建项目。

  3. 编写构建脚本

    图中的jenkins_data为容器中共享的数据卷,Nginx再根据根路径路由到这个文件夹就行。

  4. 配置Github的Webhook

    ![][img-4]	
    
    **注意Payload URL别忘记加上`github-webhook/`**
    

PS:其实我一开始也比较嫌弃Jenkins大而全有种大炮打蚊子的感觉,想尝试自己做一个对接Github的Webhook触发自动更新的项目,自己的demo是做成了,然后再缕一缕流程什么的,发现Jenkins能全面覆盖我,那还不如用Jenkins再调调它参数算了。


适用于站点的自动化部署
https://blog.gugu.dev/2024-02-21/适用于站点的自动化部署/
作者
MinMin
发布于
2024年2月21日
许可协议