跳转至

Gitea+Drone DevOps环境

概要: 本文介绍如何使用docker-compose部署和配置基于上述服务的DevOps环境。

创建时间: 2023.08.02 23:02:52

更新时间: 2023.08.03 00:09:13

gitea是一个使用Go编写的简洁强大的Git服务。 drone是一个使用Go编写的现代化DevOps工具,用于CI/CD。

以下的文件均放在/var/gitea目录下操作。

docker-compose.yaml配置

YAML
version: '3.6'

services:
  gitea:
    container_name: gitea
    image: gitea/gitea:${GITEA_VERSION:-1.10.6}
    restart: unless-stopped
    environment:
      # https://docs.gitea.io/en-us/install-with-docker/#environments-variables
      - APP_NAME="Gitea"
      - USER_UID=1000
      - USER_GID=1000
      - RUN_MODE=prod
      - DOMAIN=${IP_ADDRESS}
      - SSH_DOMAIN=${IP_ADDRESS}
      - HTTP_PORT=3000
      - ROOT_URL=http://${IP_ADDRESS}:3000
      - SSH_PORT=222
      - SSH_LISTEN_PORT=22
      - DB_TYPE=sqlite3
    ports:
      - "3000:3000"
      - "222:22"
    networks:
      - cicd_net
    volumes:
      - ./gitea_data:/data

  drone:
    container_name: drone
    image: drone/drone:${DRONE_VERSION:-1.6.4}
    restart: unless-stopped
    depends_on:
      - gitea
    environment:
      # https://docs.drone.io/server/provider/gitea/
      - DRONE_DATABASE_DRIVER=sqlite3
      - DRONE_DATABASE_DATASOURCE=/data/database.sqlite
      - DRONE_GITEA_SERVER=http://${IP_ADDRESS}:3000/
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
      - DRONE_SERVER_PROTO=http
      - DRONE_SERVER_HOST=${IP_ADDRESS}:3001
      - DRONE_TLS_AUTOCERT=false
      - DRONE_USER_CREATE=${DRONE_USER_CREATE}
      - DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID}
      - DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET}
    ports:
      - "3001:80"
      - "9001:9000"
    networks:
      - cicd_net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./drone_data:/data

  drone-runner:
    container_name: drone-runner
    image: drone/drone-runner-docker:${DRONE_RUNNER_VERSION:-1}
    restart: unless-stopped
    depends_on:
      - drone
    environment:
      # https://docs.drone.io/runner/docker/installation/linux/
      # https://docs.drone.io/server/metrics/
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
      - DRONE_RUNNER_NAME="${HOSTNAME}-runner"
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NETWORKS=cicd_net
      - DRONE_DEBUG=false
      - DRONE_TRACE=false
    ports:
      - "3002:3000"
    networks:
      - cicd_net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  cicd_net:
    name: cicd_net

启动脚本boot.sh配置

Bash
#!/usr/bin/env bash

export HOSTNAME=$(hostname)
export DRONE_VERSION=1.10.1
export DRONE_RUNNER_VERSION=1.6.3
export GITEA_VERSION=1.13
export IP_ADDRESS=192.168.0.6
#export MINIO_ACCESS_KEY="EXAMPLEKEY"
#export MINIO_SECRET_KEY="EXAMPLESECRET"
export GITEA_ADMIN_USER="example"
export DRONE_RPC_SECRET="$(echo ${HOSTNAME} | openssl dgst -md5 -hex)"
export DRONE_USER_CREATE="username:${GITEA_ADMIN_USER},machine:false,admin:true,token:${DRONE_RPC_SECRET}"
export DRONE_GITEA_CLIENT_ID=""
export DRONE_GITEA_CLIENT_SECRET=""
docker-compose up -d

echo ""
echo "Gitea: http://${IP_ADDRESS}:3000/"
echo "Drone: http://${IP_ADDRESS}:3001/"
变量说明:

  1. GITEA_ADMIN_USER: gitea服务的管理员用户,如root
  2. DRONE_RPC_SECRET: 共享密钥,通过命令openssl rand -hex 16生成后即可
  3. DRONE_GITEA_CLIENT_ID: Gitea OAuth2客户端ID
  4. DRONE_GITEA_CLIENT_SECRET: Gitea OAuth2客户端密钥
如何使用Gitea生成OAuth2客户端ID和密钥?

如何使用Gitea生成OAuth2客户端ID和密钥?

  1. 首次启动boot.sh(此时droneCI不可用)
  2. 进入http://${IP}:3000/user/settings/applications页面
  3. 填写应用名称: DroneCI
  4. 填写重定向 URI: http://${IP}:3001/login
  5. 点击创建应用,记下客户端ID和客户端密钥,然后填入boot.sh文件中
  6. 再次启动boot.sh,浏览器进入http://${IP}:3001即可获取gitea授权

部署Drone CLI

此处使用Linux服务器环境,不同的平台部署命令略有不同

*官方说明文档: *https://docs.drone.io/cli/install/

安装Drone CLI

Bash
curl -L https://github.com/drone/drone-cli/releases/latest/download/drone_linux_amd64.tar.gz | tar zx
sudo install -t /usr/local/bin drone

获取Drone Token

进入http://${IP}:3001/account页面,复制关于Example CLI Usage代码并执行:

Bash
1
2
3
export DRONE_SERVER=http://{IP}:3001
export DRONE_TOKEN={Your_Token}
drone info

启动流水线

在gitea上创建一个测试库

此处使用Python测试库,更简洁的测试方法参考CICD With DroneCI and Gitea Using Docker Compose:

在Drone中激活此测试库

进入Drone,点击SYNC同步刚刚建立的git仓库,然后在下面的列表中点击此仓库:

然后参考如下设置,点击SAVE CHANGES保存更改即可。

推送到gitea并触发Drone构建

完整的用于DroneCI的Python测试仓库参考我的GitHub仓库demo: https://github.com/lz-wang/python_tests
提交变更后,即可触发DroneCI流水线,下图是触发后的页面:

参考