惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
罗磊的独立博客
爱范儿
爱范儿
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
G
GRAHAM CLULEY
A
About on SuperTechFans
C
Cisco Blogs
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
Project Zero
Project Zero
V
V2EX
K
Kaspersky official blog
P
Privacy International News Feed
博客园 - 叶小钗
I
Intezer
T
Threatpost
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
S
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
The Cloudflare Blog
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tenable Blog

希仁之拥

领克900半年使用体验 | 希仁之拥的博客 Ubuntu 26.04 Desktop使用体验 | 希仁之拥的博客 【转载】谈谈不受欢迎的博客技术特征 | 希仁之拥的博客 【转载】ClaudeCode 你想知道的所有秘密,源码深度研究报告 | 希仁之拥的博客 2025年年终总结 | 希仁之拥的博客 集成和使用Openclaw后的思考 | 希仁之拥的博客 我买了领克900 | 希仁之拥的博客 服务器性能优化之io拷贝 | 希仁之拥的博客 Go-Sail导航站上线啦 | 希仁之拥的博客 今年国庆的一些感受 [2025] | 希仁之拥的博客 在Deepin 25上配置forticlient | 希仁之拥的博客 分享一些酷酷的站点 [20250908] | 希仁之拥的博客 Go-Sail发布v3.0.6版本了 | 希仁之拥的博客 我对V2EX发布$V2EX讨论的一些感受 | 希仁之拥的博客 如何让Stripe支持支付宝和微信支付 | 希仁之拥的博客 2025上半年里程碑 | 希仁之拥的博客 四姑娘山之旅 | 希仁之拥的博客 近来帮同事做性能优化的过程回顾 | 希仁之拥的博客 聊聊接口的返回数据结构 | 希仁之拥的博客 由GORM的Updates语法糖 我把 Go-Sail 的文档站更新了 | 希仁之拥的博客 这就是我为什么讨厌拼多多 | 希仁之拥的博客 元旦快乐~ | 希仁之拥的博客 致敬还在写博客的我们 | 希仁之拥的博客 逐步的把图片资源迁移到星光图床上 | 希仁之拥的博客 帮弟弟配了一台mini主机 | 希仁之拥的博客 国庆的一些碎碎念 | 希仁之拥的博客 就这一刻而言,我觉得科技冷冰冰的。 | 希仁之拥的博客 如何使用acme.sh自动续签证书 | 希仁之拥的博客 Go-Sail的文档站点搭建好了 | 希仁之拥的博客 我的第一个谷歌浏览器插件发布成功啦! | 希仁之拥的博客 我开源了一个golang的web框架 | 希仁之拥的博客 流芳 | 希仁之拥的博客 第一次开发微信小程序 | 希仁之拥的博客 春节快乐 | 希仁之拥的博客 我把博客站点重写了 | 希仁之拥的博客 阆中古城 | 希仁之拥的博客 入了把Keydous NJ80 | 希仁之拥的博客 Mac上有用的知识 | 希仁之拥的博客 记一次服务器被攻击 | 希仁之拥的博客 Ubuntu server不停机扩容系统盘 | 希仁之拥的博客 端午安康 | 希仁之拥的博客 搭建hadoop伪分布式集群总结 | 希仁之拥的博客 在goa框架中,如何访问原始请求数据 | 希仁之拥的博客 postgresql相关操作笔记 | 希仁之拥的博客 golang解析带命名空间的xml数据(带冒号的节点或属性名) | 希仁之拥的博客 【转载】解决deepin环境下wine QQ无法接收图片问题 | 希仁之拥的博客 杂项笔记 | 希仁之拥的博客 Mac如何修改通知横幅消失时间 | 希仁之拥的博客 Golang校验结构体是否实现了接口 | 希仁之拥的博客 关于deepin os的大半年使用体验 | 希仁之拥的博客 有态度的翻唱 | 希仁之拥的博客 【转载】Golang 在 Mac、Linux、Windows 下如何交叉编译 | 希仁之拥的博客 和幺幺一起成长的半年时光 | 希仁之拥的博客 Element UI中message消息提示实现原理 | 希仁之拥的博客 从predis组件开始了解如何与redis服务交互 | 希仁之拥的博客 【转载】 尤雨溪谈Vue.js :缔造自由与真我 | 希仁之拥的博客 【转载】百万 Go TCP 连接的思考: epoll方式减少资源占用 | 希仁之拥的博客 【分享】移除git中的commit历史(保留文件,仅移除提交历史信息) | 希仁之拥的博客 shell学习笔记 | 希仁之拥的博客 【分享】Ruby 之父松本行弘:程序员的乐趣、存在感与平衡 | 希仁之拥的博客 安利一下我用过的一些sublime text 3工具、插件及配置 | 希仁之拥的博客 PHP处理苹果内购数据验证 | 希仁之拥的博客 PHP获取XML所有节点名称 | 希仁之拥的博客 Sentinel::check() 在Laravel5.3版本之后总是返回false的解决方案 | 希仁之拥的博客 吃货的美食集,持续更新~ | 希仁之拥的博客 第二十一届成都汽车博览会 | 希仁之拥的博客 马云宣布1年后卸任集团董事局主席 由CEO张勇接任 | 希仁之拥的博客 nginx配置非443端口的https连接 | 希仁之拥的博客 PHP7 异常类型列表 | 希仁之拥的博客 【分享】《燃点》:不被嘲笑的愿望是不值得去实现的|一部属于创业者的电影 | 希仁之拥的博客 【分享】前端资源加载优先级[译] | 希仁之拥的博客 【小技巧】Laravel动态配置多个数据库连接 | 希仁之拥的博客 php使用ftp上传、下载文件 | 希仁之拥的博客 php使用mysqlnd扩展进行mysql异步并行查询 | 希仁之拥的博客 基于以太坊区块链,使用web3.js在geth服务器上执行合约方法以及事件监听 | 希仁之拥的博客 Smartisan OS | 希仁之拥的博客 母校 | 希仁之拥的博客 php后期静态绑定 | 希仁之拥的博客 [mysql优化]子查询与连接查询 | 希仁之拥的博客 PHP常见运行模式及原理 | 希仁之拥的博客 mysql用户与授权 | 希仁之拥的博客 如何在ubuntu14.04上安装composer | 希仁之拥的博客 关于mews/captcha for laravel存在method [validateCaptcha] doesn't exists解决方法 | 希仁之拥的博客
GitLab+Drone使用体验 | 希仁之拥的博客
希仁之拥 · 2025-05-29 · via 希仁之拥

前言

当公司的项目越来越多、开发人员也在不断补充的情况下,已然不是单枪匹马,一人作战的时代了。为了便利开发人员开发迭代和项目代码管理,包括版本迭代,代码审计等需求。接入CI(Continuous Integration,持续集成)就变得十分的迫切和必要了。

组合

Gitlab + Drone + Sonarqube

环境

1.内网测试服务器(宿主主机) windows 10
2.CI虚拟机 CentOS 8,使用vmware workstation安装
3.Gitlab虚拟机 CentOS 8,使用vmware workstation安装
4.CI软件:
4.1.Drone Server,Drone runner,Sonarqube,Postgresql 使用docker容器运行

结论

先总结一下使用体验:
优点:
1.整个搭建方式十分轻量便捷
2.扩展性强
3.稳定性高
4.构建指令由.drone.yml配置文件指定,简单易用
不足:
1.Drone不支持Gitlab子分组,若在子分组下创建项目,Drone后台无法同步项目。官方论坛相关讨论
2.Drone在登录过期(失效)后,会显示404页面而非跳转到登录页面。官方论坛相关讨论

截图

配置

  • Gitlab
    由于搭建CI的时候,Gitlab私有化部署已经完成,这里不再赘述。
  • Drone
    使用yaml文件书写配置,Drone支持多种数据库,这里使用的是Mysql
version: "3.1"

services:
    drone-server:
        container_name: drone-server
        image: "drone/drone:latest"
        environment:
            - DRONE_GITLAB_SERVER=http://192.168.224.25:8888
            - DRONE_GITLAB_CLIENT_ID= # 你的gitlab应用id,需要在gitlab平台新建application
            - DRONE_GITLAB_CLIENT_SECRET= # gitlab应用密钥
            - DRONE_RPC_SECRET= # 远程调用密钥,是drone server与drone runner通信的密钥凭证,可以随机生成,只要保持一致就行
            - DRONE_SERVER_HOST=192.168.224.36:9080 # 注意:一定不要协议
            - DRONE_SERVER_PROTO=http
            - DRONE_LOGS_DEBUG=true
            - DRONE_LOGS_TEXT=true
            - DRONE_LOGS_PRETTY=true
            - DRONE_LOGS_COLOR=false
            - DRONE_DATABASE_DRIVER=mysql
            - DRONE_DATABASE_DATASOURCE= # 数据连接dsn,如:username:password@tcp(127.0.0.1:3306)/drone?parseTime=true
            - DRONE_USER_CREATE= # 这里非常关键,需要配置管理员账号,最好是与面创建application的是同一个账号。如:username:keepchen,admin:true,token:xxx token值同rpc token
        ports:
            - 9080:80
            - 9443:443
        restart: always
        volumes:
            - ./data:/data

    drone-runner:
        container_name: drone-runner
        image: "drone/drone-runner-docker:latest"
        environment:
            - DRONE_RPC_PROTO=http
            - DRONE_RPC_HOST=192.168.224.36:9080
            - DRONE_RPC_SECRET= # 远程调用密钥
            - DRONE_RUNNER_CAPACITY=5
            - DRONE_RUNNER_NAME=192.168.224.36
        ports:
            - 9030:3000
        restart: always
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock # 这里请务必这样配置,因为具体的build会用到。
  • Sonarqube (使用Postgresql)
version: "3.1"

services:
    postgres:
        container_name: postgres
        image: postgres:12
        environment:
            - POSTGRES_USER=sonar
            - POSTGRES_PASSWORD=sonar
            - POSTGRES_DB=sonar
        volumes:
            - ./data/postgres:/var/lib/postgresql/data
        ports:
            - "54320:5432"

    sonarqube:
        container_name: sonarqube
        image: sonarqube:community
        depends_on:
            - postgres
        environment:
            - SONAR_JDBC_URL=jdbc:postgresql://postgres:5432/sonar
            - SONAR_JDBC_USERNAME=sonar
            - SONAR_JDBC_PASSWORD=sonar
        volumes:
            - ./data/sonarqube_data:/opt/sonarqube/data
            - ./data/sonarqube_extensions:/opt/sonarqube/extensions
            - ./data/sonarqube_logs:/opt/sonarqube/logs
        ports:
            - "9090:9000"
        restart: always

可能遇到的问题

1.redirect_url not valid
出现这个问题,可能是因为:
1.1.Drone server的配置项DRONE_SERVER_HOST不正确,一定要注意,不能携带协议。
1.2.需要登录Gitlab的超级管理员账号,然后设置允许内网地址访问(默认是不允许的)。 iShot_2023-02-10_18.09.19.png
1.3.配置的Drone回调地址不正确,正确地址:http://192.168.224.36:9080/login,将协议、ip地址、端口替换成自己的。
2.snoarqube无法授权
出现这个问题,可能是因为:
2.1.回调地址配置不正确,正确地址:http://192.168.224.36:9090/oauth2/callback/gitlab,将协议、ip地址、端口替换成自己的。
3.Drone后台找不到用户设置入口
出现这个问题,首先,确认当前登录账号是否是管理员,其次,DRONE_USER_CREATE这一项配置的用户名需要和Gitlab的登录名保持一致。
4.Drone runner无法设置host映射
需要在对应项目的设置中勾选Project SettingsTrusted选项。
4.1.Project Settings根本就没有这个选项
解决办法同3。

来一发?

在项目中,配置.drone.yml文件。

kind: pipeline
type: docker
name: projectName

trigger:
  event:
    - push
    - merge

steps:
  - name: 编译和打包
    image: maven:3-jdk-8
    volumes:
      - name: cache
        path: /tmp/cache
      - name: maven-cache # <- 将本地缓存路径映射到容器
        path: /root/.m2
    commands:
      - mvn clean
      - mvn package -s /tmp/cache/settings.xml
      - cp target/projectName.jar /tmp/cache/projectName

  - name: 代码分析
    image: maven:3-jdk-8
    volumes:
      - name: cache
        path: /tmp/cache
      - name: maven-cache
        path: /root/.m2
    environment:
      sonar_host:
        from_secret: sonar_host
      sonar_token:
        from_secret: sonar_token
    commands:
      - |
        mvn --batch-mode verify sonar:sonar \
          -Dsonar.projectKey= #你的projectKey \
          -Dsonar.host.url=$$sonar_host \
          -Dsonar.login=$$sonar_token

  - name: 钉钉通知
    image: guoxudongdocker/drone-dingtalk
    settings:
      token:
        from_secret: dingtalk_token
      type: markdown
      message_color: true
      message_pic: true
      sha_link: true
    when:
      status: [ failure, success ]

volumes:
  - name: cache
    host:
      path: /artifcats/artifcats
  - name: maven-cache # <- 定义本地maven缓存仓库路径
    host:
      path: /artifcats/maven-repo

上面的配置告诉Drone runner需要干三件事情:编译打包、代码分析和钉钉消息通知。
Drone支持使用配置密钥,这样在整个配置文件中,看不到任何敏感信息。上面的关键字from_secret就是从配置密钥中读取,这个在Drone后台项目下的settings中配置。
钉钉通知效果:
钉钉通知-构建成功
钉钉通知-构建失败

进阶

1.maven使用本地仓库及本地缓存
刚开始的时候,去docker hub上找了许多相关的镜像,后面才发现,官方maven镜像就非常好用了,只需要将本地的缓存路径映射到容器中即可。
2.打包制成品导出
和上面一样的原理,只需要将本地路径映射到容器中,当打包完成,使用cp命令直接拷贝即可。

总结

目前公司已经使用一个月,整体体验比较好,轻量快捷是第一印象。build的step可以根据自己的需要,随意DIY,如果没有合适的镜像,也可以自己制作满足定制化需求的镜像。

----------------------2021.07.25更新----------------------
据官网所描述,使用镜像构建的Drone服务是企业版本,有5000次构建限制。官方说明
免费的开源版本需要自行构建,开源版企业版具体差异见。官方说明
参考苏洋博客,我构建了一个开源版本镜像,本地启动暂无问题,欢迎大家共同交流。


980_120.png(via stardots.io)

觉得博主写的不错?给他一个赞赏:

keepchen的赞赏码-支付宝 keepchen的赞赏码-微信