个人丐版服务器,如何搭建CI/CD,我选Drone

买了丐版服务器,如何搭建CI/CD,我选Drone

有了服务器(腾讯云:CPU-2核 内存-2GB 硬盘50G)(海外:CPU-2核 内存-1GB 硬盘50G),如何快速让项目上线,这里就需要CI/CD。说到CI/CD, 大家常用的有jenkins,gitlab自带的CI/CD等等等, 但是这两者都太笨重了。

jenkins 硬件要求

硬件最低要求:

  • 256 MB 内存
  • 1 GB 硬盘空间

小团队推荐的硬件配置:

  • 1 GB+ 内存
  • 50 GB+ 磁盘空间

gitlab ci/cd 硬件要求

硬件最低要求:

  • 2核 2G以上内存(不包含2GB,2GB内存运行的时候内存直接爆掉)

官网给出的推荐配置:

  • 4核 4GB内存 支持500个用户,8核 8GB内存 支持1000个用户

这配置jenkins也能安装成功(gitlab想到不要想了),但都太勉强,海外的尤其紧张,综合下来我那小小服务器扛不住啊。 想想以后还要部署其他docker项目, 汗流浃背。

贴上一张腾讯云上面, 通过docker部署drone内存占用情况。
12 + 17 + 33 闲时仅仅只占用72M的内存
image.png

安装docker

snap install docker

安装drone

DRONE CI 中文文档

建议大家可以先看文档,国内咱就选gitee,海外就github,下面贴上我在github和gitee的部署代码配置。敏感信息都用***,如何获取,参考中文文档

image.png

国内 + gitee

// docker-compose.yml
version: '3.7'
# 创建自定义网络
networks:
  drone:
    # external: false
    driver: bridge
services:
  # 数据库服务
  drone-db:
    image: postgres:latest
    container_name: drone-db1
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - '8001:5432' # 8081为容器暴露到服务器的端口,5432为容器内改应用的端口
    environment:
      - POSTGRES_USER=name** # PGSQL默认用户名
      - POSTGRES_PASSWORD=password*** # PGSQL默认密码
      - POSTGRES_DB=db** # PGSQL默认数据库的名字
    volumes:
      - /root/docker/drone0/db:/var/lib/postgresql/data # 数据卷,前者为服务器真实位置,后者为改应用在容器内的位置
  # Drone Server 服务
  drone-server:
    image: drone/drone:latest
    container_name: drone-server1
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - '8002:80'
      - '8003:443'
    environment:
      - DRONE_SERVER_PROTO=https # 访问协议,创建webHooks和重定向
      - DRONE_SERVER_HOST=**.****.com # 主机名称,创建webHooks和重定向
      - DRONE_RPC_SECRET=**** # 与 drone runner 通讯的密钥 你可以使用 openssl 生成共享密钥:openssl rand -hex 16
      - DRONE_USER_CREATE=username:***,admin:true # 管理员账户 这个账号名一定要与代码托管网站的用户名一致
      - DRONE_DATABASE_DRIVER=postgres # 数据库类型
      - DRONE_DATABASE_DATASOURCE=postgres://name**:password***@drone-db/db_name?sslmode=disable # 数据库连接
      - DRONE_GIT_ALWAYS_AUTH=true # 使用 oauth 身份验证信息拉取代码
      - DRONE_GITEE_SERVER=https://gitee.com
      - DRONE_GITEE_CLIENT_ID=**** # GITEE 客户端 id
      - DRONE_GITEE_CLIENT_SECRET=***** # GITEE 客户端 密钥
      - DRONE_GITEE_SKIP_VERIFY=false # 禁用 GITEE 链接时 tls 验证

    volumes:
      - /volumes/drone/server:/data
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - drone-db
  # Drone Docker Runner
  drone-runner:
    image: drone/drone-runner-docker:latest # 目前drone-runner-docker最新版本为 1.8.0
    container_name: drone-runner1
    restart: always
    networks:
      - drone # 加入到drone网络
    links:
      - drone-server
    ports:
      - '8004:3000'
    environment:
      # - DRONE_RUNNER_NAME=docker-runner
      - DRONE_RUNNER_CAPACITY=2 # 限制runner可执行的并发管道数量
      - DRONE_RPC_PROTO=https # 访问drone server 协议
      - DRONE_RPC_HOST=**.***.com # 访问drone server 服务器地址
      - DRONE_RPC_SECRET=*** # 与 drone server 通讯的密钥
      # - DRONE_UI_USERNAME=*** # Drone Runner 的 UI 用户账号
      # - DRONE_UI_PASSWORD=*** # Drone Runner 的 UI 用户密码
      # - DRONE_RUNNER_NETWORKS=drone_net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - drone-server

海外 + github

// docker-compose.yml
version: '3.7'
# 创建自定义网络
networks:
  drone:
    # external: false
    driver: bridge
services:
  # 数据库服务
  drone-db:
    image: postgres:latest
    container_name: drone-db1
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - '8001:5432' # 8081为容器暴露到服务器的端口,5432为容器内改应用的端口
    environment:
      - POSTGRES_USER=name** # PGSQL默认用户名
      - POSTGRES_PASSWORD=password** # PGSQL默认密码
      - POSTGRES_DB=db_name # PGSQL默认数据库的名字
    volumes:
      - /root/docker/drone0/db:/var/lib/postgresql/data # 数据卷,前者为服务器真实位置,后者为改应用在容器内的位置
  # Drone Server 服务
  drone-server:
    image: drone/drone:latest
    container_name: drone-server1
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - '8002:80'
      - '8003:443'
    environment:
      - DRONE_SERVER_PROTO=http # 访问协议,创建webHooks和重定向
      - DRONE_SERVER_HOST=**.****.com # 主机名称,创建webHooks和重定向
      - DRONE_RPC_SECRET=****** # 与 drone runner 通讯的密钥 你可以使用 openssl 生成共享密钥:openssl rand -hex 16
      - DRONE_USER_CREATE=username:***,admin:true # 管理员账户 这个账号名一定要与代码托管网站的用户名一致
      - DRONE_DATABASE_DRIVER=postgres # 数据库类型
      - DRONE_DATABASE_DATASOURCE=postgres://name**:password**@drone-db/db_name?sslmode=disable # 数据库连接
      - DRONE_GIT_ALWAYS_AUTH=true # 使用 oauth 身份验证信息拉取代码
      - DRONE_GITHUB_CLIENT_ID=******* # GITHUB 客户端 id
      - DRONE_GITHUB_CLIENT_SECRET=******* # GITHUB 客户端 密钥
      - DRONE_GITHUB_SKIP_VERIFY=false # 禁用 GITHUB 链接时 tls 验证

    volumes:
      - /volumes/drone/server:/data
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - drone-db
  # Drone Docker Runner
  drone-runner:
    image: drone/drone-runner-docker:latest # 目前drone-runner-docker最新版本为 1.8.0
    container_name: drone-runner1
    restart: always
    networks:
      - drone # 加入到drone网络
    links:
      - drone-server
    ports:
      - '8004:3000'
    environment:
      # - DRONE_RUNNER_NAME=docker-runner
      - DRONE_RUNNER_CAPACITY=2 # 限制runner可执行的并发管道数量
      - DRONE_RPC_PROTO=http # 访问drone server 协议
      - DRONE_RPC_HOST=drone-server # 访问drone server 服务器地址
      - DRONE_RPC_SECRET=*** # 与 drone server 通讯的密钥
      # - DRONE_UI_USERNAME=user*** # Drone Runner 的 UI 用户账号
      # - DRONE_UI_PASSWORD=password** # Drone Runner 的 UI 用户密码
      # - DRONE_RUNNER_NETWORKS=drone_net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - drone-server

通过 docker-compose.yml 安装

docker-compose up -d

nginx 泛域名配置端口

通过map,方便管理端口, 就像js里面的key value一样。

map $http_host $subdomain {
    "~^(?P<sub>[^.]+)\.[^.]+\.[^.]+$" $sub;
}

map $subdomain $proxy_port {
    drone       8002;
    drone1      8001;
    drone3      8003;
    drone4      8004;
}

location / {
    if ($proxy_port != "") {
        proxy_pass http://$server_addr:$proxy_port;
    }
    proxy_pass http://$server_addr:3000;
}

Drone 安装成功后

如果一切顺利, 没有报错, 访问后,应该是这个页面,没有配置nginx的的就先通过端口访问。

登录页面
image.png
gitee授权

image.png

为项目编写.drone.yml文件

.drone有自己的打包方式, 但我们平时基本上是使用docker, 这里我就结合docker部署

  • /var/run/docker.sock:/var/run/docker.sock 使用docker
  • event: tag 通过tag执行不同的环境部署
// .drone.yml

kind: pipeline
name: default

pipeline:
  build-dev:
    image: docker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - docker-compose -f docker-compose.test.yml down
      - docker-compose -f docker-compose.test.yml build
      - docker-compose -f docker-compose.test.yml up -d
    when:
      event: tag
      branch: '*'
      ref: refs/tags/test.*
  build-prod:
    image: docker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - docker-compose -f docker-compose.prod.yml down
      - docker-compose -f docker-compose.prod.yml build
      - docker-compose -f docker-compose.prod.yml up -d
    when:
      event: tag
      branch: '*'
      ref: refs/tags/prod.*

登录成功,项目部署成功后

image.png

嘿嘿, 以后打打tag,就让项目轻松上线,舒服。

如有帮助到你, 点点收藏和关注,谢谢啦 ಥ_ಥ

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇