环境

创建 OAuth2 应用

  • 登陆 gitea

  • 点击 “个人头像” - “设置” - “应用”

  • 在 “管理 OAuth2 应用程序” 中,输入

    • 输入应用名称: “drone”
    • 重定向URI: “http://<drone 服务器地址>:<drone 服务器端口>/login”
  • 点击 “创建应用”,在弹出的新页面中

    • 记录 “客户端 ID”
    • 记录 “客户端密钥”
    • 点击 “保存”

安装 drone

  • 下载 docker 镜像

    1
    
    docker pull drone/drone
    
  • 启动容器

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    docker run -d \
        --name drone \
        -e DRONE_GITEA_SERVER=http://<gitea 服务器地址>:<gitea 服务器端口> \
        -e DRONE_GITEA_CLIENT_ID=<客户端 ID> \
        -e DRONE_GITEA_CLIENT_SECRET=<客户端密钥> \
        -e DRONE_RPC_SECRET=1111aaaa2222bbbb3333cccc4444dddd \
        -e DRONE_SERVER_HOST=<drone 服务器地址>:<drone 服务器端口> \
        -e DRONE_SERVER_PROTO=http \
        -e DRONE_GIT_ALWAYS_AUTH=true \
        -p <drone 服务器端口>:80 \
        -v <外挂的 drone 数据目录>:/data \
        drone/drone
    
  • 参考链接https://docs.drone.io/server/provider/gitea/

安装 drone runner

安装 docker runner

  • 下载 drone-runner-docker 镜像

    1
    
    docker pull drone/drone-runner-docker
    
  • 启动容器

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    docker run -d \
        --name drone_runner_docker \
        -e DRONE_RPC_PROTO=http \
        -e DRONE_RPC_HOST=<drone 服务器地址>:<drone 服务器端口> \
        -e DRONE_RPC_SECRET=1111aaaa2222bbbb3333cccc4444dddd \
        -e DRONE_RUNNER_CAPACITY=10 \
        -e DRONE_RUNNER_NAME=<该 runner 的名字> \
        -e DRONE_RUNNER_LABELS=<key1>:<value1> \
        -p <runner 端口>:3000 \
        -v /var/run/docker.sock:/var/run/docker.sock \
        drone/drone-runner-docker
    
  • 参考链接https://docs.drone.io/runner/docker/installation/linux/

安装 exec runner

  • 下载

    1
    2
    3
    
    curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_linux_amd64.tar.gz \
        | tar zxf -C /usr/local/bin
    chmod 0755 /usr/local/bin/drone-runner-exec
    
  • 创建配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    
    cat > /etc/drone-runner-exec/config <<-EOF
    DRONE_RPC_PROTO=http
    DRONE_RPC_HOST=<drone 服务器地址>:<drone 服务器端口>
    DRONE_RPC_SECRET=1111aaaa2222bbbb3333cccc4444dddd
    DRONE_HTTP_BIND=:<runner 端口>
    DRONE_LOG_FILE=/var/log/drone-runner-exec/log.txt
    DRONE_RUNNER_LABELS=<key1>:<value1>
    EOF
    
  • 创建 systemd service 文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    cat > /etc/systemd/system/drone-runner-exec.service <<-EOF
    [Unit]
    Description=Drone Exec Runner
    ConditionFileIsExecutable=/usr/local/bin/drone-runner-exec
    
    [Service]
    ExecStart=/usr/local/bin/drone-runner-exec "service" "run" "--config" "/etc/drone-runner-exec/config"
    StartLimitInterval=5
    StartLimitBurst=10
    Restart=on-failure
    RestartSec=120
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  • 参考链接https://docs.drone.io/runner/exec/installation/linux/

使用 drone

  • 登陆 drone: http://<drone 服务器地址>:<drone 服务器端口>,此时会跳转到 gitea 登陆界面
  • 登陆成功后,浏览器返回 drone 首页,这里会显示我们创建/参与的 git 项目
  • 选择一个项目,点击对应的 “ACTIVATE”,drone 会打开该项目的 “SETTINGS” 页面,这里一般无需设置,默认即可
  • 在该项目的 “ACTIVITY FEED” 页面会显示每次项目提交后触发的 CI/CD 流程
  • 编辑该项目代码,在项目根目录下创建文件 .drone.yml,内容如下

适配 sonarqube

  • 下载镜像

    1
    
    docker pull sonarqube
    
  • 启动 sonarqube 容器

    1
    2
    3
    4
    5
    6
    7
    
    docker run -d \
        --name sonarqube \
        -p <sonarqube 服务器端口>:9000 \
        -v sonarqube_data:/opt/sonarqube/data \
        -v sonarqube_extension:/opt/sonarqube/extensions \
        -v sonarqube_log:/opt/sonarqube/logs \
        sonarqube
    
  • 登陆 sonarquebe: http://<sonarqube 服务器地址>:<sonarqube 服务器端口>,创建用户,获取 token

  • 在 gitea 对应项目根目录下创建 .drone.yml,内容如下

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    kind: pipeline
    type: docker
    name: 代码分析
    
    steps:
    - name: 代码分析
      image: aosapps/drone-sonar-plugin
      settings:
        sonar_host: http://<sonarqube 服务器地址>:<sonarqube 服务器端口>
        sonar_token: <sonarqube 用户 token>
    
    node:
      role: sonarqube
    
  • 在 gitea 对应项目根目录下创建 sonar-project.properties,内容如下

    1
    2
    
    sonar.projectKey={项目名称}
    sonar.sources=.
    
  • 提交代码,在 drone 中对应项目的 “ACTIVITY FEED” 页面下查看 pipeline 执行过程

  • pipeline 执行完成后,浏览器打开 http://<sonarqube 服务器地址>:<sonarqube 服务器端口>,即可查看刚检测完成的项目

  • sonarqube pipeline 参考https://hub.docker.com/r/aosapps/drone-sonar-plugin

  • sonarqube 配置参考https://docs.sonarqube.org/latest/analysis/analysis-parameters/