Press "Enter" to skip to content

gitea+drone配置自动化部署

git + drone搭建项目自动部署

step1:下载安装gitea

docker-compose.yml

version: "3.7"
networks:
  www:
    external: true
services:
  gitea:
    image: gitea/gitea:1.16.9
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST= mysql:3306
      - DB_NAME=gitea
      - DB_USER=root
      - DB_PASSWD=lican520
    restart: always
    networks:
      - www
    volumes:
      - ./gitea:/data
      - ./etc/timezone:/etc/timezone:ro
      - ./etc/localtime:/etc/localtime:ro
    expose:
      - 22
      - 3000
    logging:
      driver: json-file
      options:
         max-size: "100M" # 单个文件大小为200k
         max-file: "10" # 最多10个文件

注意:当docker-compose无法拉取gitea安装包时,可以从gitea.tar拉取,我们通过

docker save -o gitea.tar gitea/gitea:1.16.9

保存的安装包,下载后, 仅需docker load -i gitea.tar即可

安装之前,需要先安装一个mysql容器,gitea依赖mysql存储

服务启动后,可以配置nginx转发,配置域名,通过域名访问

server {
  listen 80;
  listen 443 ssl;
  ssl_certificate      ./ssl/*.nongbotech.com/fullchain.pem;
  ssl_certificate_key  ./ssl/*.nongbotech.com/key.pem;
  server_name git.nongbotech.com;
  if ($args ~* "^go-get=1") {
    set $condition goget;
  }
  if ($uri ~ ^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/.*$) {
    set $condition "${condition}path";
  }
  if ($condition = gogetpath) {
    return 200 "<!DOCTYPE html><html><head><meta content='git.nongbotech.com/$1/$2 git https://git.nongbotech.com/$1/$2.git' name='go-import'></head></html>";
  }
  location / {
       add_header Access-Control-Allow-Origin *;
       proxy_pass http://gitea:3000;
  }
}

通过域名访问后,配置数据库登录参数,即可来到登录页面,登录后,可创建代码仓库

1720062673243

创建gitea和drone授权应用

右上角->设置->应用->创建应用

应用名称:自定义,我暂且填drone

重定向URL: 跳转到drone的地址,为drone访问地址加上/login,例如我配置的drone访问地址是https://drone.nongbotech.com. 所以此处填写https://drone.nongbotech.com/login

创建完gitea应用后,会有客户端ID,和客户端密钥

step 2: 下载安装drone-server和drone-runner

docker-compose.yml

version: '3.7'
services:
  drone-server:
    image: drone/drone:2.8.0
    container_name: drone-server
    ports:
      - "3003:3000"
    volumes:
      - ./drone:/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      - DRONE_USER_CREATE=username:lican,admin:true
      - DRONE_GITEA_CLIENT_ID=bcb76646-56b0-42ab-8f11-ecd2e5a1bea2 // gitea应用的客户端ID
      - DRONE_GITEA_CLIENT_SECRET=0VHtKBja73k6Oe7yMGGzbfOvogjKYITpiOzsmoHej6X1 // gitea应用的客户端密钥
      - DRONE_GITEA_SERVER=http://git.nongbotech.com  #gitea访问地址
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RPC_SECRET=50f491d1154873d72f3cedc710d01d59 // drone-server和drone-runner间的通信密钥,可通过指令生成[openssl rand -hex 16]
      - DRONE_SERVER_HOST=drone.nongbotech.com  // drone访问地址
      - DRONE_SERVER_PROTO=https
    restart: always
    networks:
      - www
  drone-runner:
    image: drone/drone-runner-docker:1.8.0
    container_name: drone-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_SECRET=50f491d1154873d72f3cedc710d01d59 // drone-server和drone-runner间的通信密钥,可通过指令生成[openssl rand -hex 16]
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME=drone_runner
      - DRONE_CPU_SHARES=300
      - DRONE_MEMORY_LIMIT=2000000000
      - DRONE_RUNNER_VOLUMES=./nbi_dev:/www_dev
    restart: always
    networks:
      - www
networks:
  www:
    external: true

drone-server.tar

drone-runner.tar

配置参数指引

配置nginx转发drone服务

server {
  listen 80;
  listen 443 ssl;
  ssl_certificate      ./ssl/*.nongbotech.com/fullchain.pem;
  ssl_certificate_key  ./ssl/*.nongbotech.com/key.pem;
  server_name drone.nongbotech.com;
  location / {
    proxy_pass http://drone-server:80;
  }
}

1.drone-server和drone-runner服务启动后, 点击右上角的SYNC按钮即可同步gitea刚刚创建的代码仓库

2.点击同步到的代码仓库,进入页面后点击Settings按钮

  • General: 最下面一行配置超时时间和钩子执行的.drone.yml文件

  • Secrets: 配置drone访问服务器的基本参数,该参数在.drone.yml文件中通过该变量访问服务器

    Name Value Remark
    DRONE_SSH_HOST 120.77.213.80 服务器ip地址
    DRONE_SSH_USER root 用户名
    DRONE_SSH_PORT 22 端口号
    DRONE_SSH_KEY —–BEGIN OPENSSH PRIVATE KEY—–
    —–END OPENSSH PRIVATE KEY—– 服务器访问私钥——–登录服务器后,通过运行指令ssh-keygen -t rsa -b 4096生成后,进入~/.ssh后,打开id_rsa文件,复制可得。
    当远程失败时,复制id_rsa.pub到同级目录的authorized_keys中,每个公钥都单独一行。并使用命令如 ssh -i /path/to/private_key user@host 进行测试

    配置完成之后,推送代码到gitea的仓库中,即可看到触发了drone的运行,需要在项目的指定位置放置.drone.yml文件

    .drone.yml文件示例

    kind: pipeline #对象类型
    type: docker #管道类型drone支持不同的类型
    name: "brewing-sass" #管道名称一个项目可以有多个管道
    #克隆设置
    clone:
      disable: true
    #触发条件
    #trigger:
    #  event:
    #    - tag
    #管道步骤
    steps:
      # base-setup
      # 基础后台设置服务
      - name: brewing-sass clone
        image: alpine/git
        environment:
          GOOS: linux
          GOARCH: amd64
        commands:
          - git clone http://git.dev.nongbotech.cn/back-end-3.0/brewing-sass.git brewing-sass
        #编译
      - name: brewing-sass build #管道步骤名称
        image: golang:1.16.9 #执行shell命令的docker镜像
        environment:
          GOOS: linux
          GOARCH: amd64
        commands: #定义在docker容器内作为容器入口点执行的shell命令列表
          - go env -w GOPRIVATE=git.dev.nongbotech.cn
          - go env -w GOPROXY=https://goproxy.cn
          # - go get -u -v git.dev.nongbotech.cn/back-end-3.0/pkg
          # - go get -u -v brewing-sass/gopkg/logger
          - cd brewing-sass
          - go mod tidy
          - go build -o brewing_sass_app
      # 发布
      - name: brewing-sass publish
        image: appleboy/drone-scp
        settings:
          host:
            from_secret: DRONE_SSH_HOST
          port:
            from_secret: DRONE_SSH_PORT
          user:
            from_secret: DRONE_SSH_USER
          key:
            from_secret: DRONE_SSH_KEY
          target: /data/nbi_dev/soa/dev-soa_backend/brewing-sass
          source:
            - brewing-sass/etc/app.yaml
            - brewing-sass/etc/rsa/private.pem
            - brewing-sass/etc/rsa/public.pem
            - brewing-sass/brewing_sass_app
          strip_components: 1 # 去除前缀
    
      # 服务重启
      - name: brewing-sass reboot
        image: appleboy/drone-ssh
        settings:
          host:
            from_secret: DRONE_SSH_HOST
          port:
            from_secret: DRONE_SSH_PORT
          username:
            from_secret: DRONE_SSH_USER
          key:
            from_secret: DRONE_SSH_KEY
          script:
            - cd /data/nbi_dev/soa/dev-soa_backend
            - docker-compose down
            - docker-compose up -d