基于 Gogs + Drone 构建私有 CI/CD 平台 | Docker 篇 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AlicFeng
V2EX    Docker

基于 Gogs + Drone 构建私有 CI/CD 平台 | Docker 篇

  •  
  •   AlicFeng 2021-12-31 20:24:51 +08:00 2680 次点击
    这是一个创建于 1381 天前的主题,其中的信息可能已经有所发展或是发生改变。

    No matter where I am, I will reply you immediately when I see the email.My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d

    前言

    CI / CD( 持续集成 / 持续部署 )方案是 DevOps 中不可或缺的流程之一,最近也了解了部分的相关的解决方案,最终选择了Drone + Gogs基于docker容器环境来构建CI / CD,本文将分享下如何构建此平台以及如何快速地使用到项目开发中。

    应该会有一个疑问?我为什么不选择主流的GitLab + Jenkins 两个最佳搭档来构建呢?

    • GitLab是使用Ruby编写的,Jenkins更是了不起,使用Java来编写的,项目整体比较膨大,同时它们对硬件、CPU 等开销比较高
    • DroneGogs皆是使用Go语言来编写构建,在整体的语言性能与内存开销算是有一定的优势,同时Drone支持GithubGitLabGogs以及Bitbucket,这点很不错!反手就是一个赞?

    GitLab + Jenkins 该组合还是一个不错的选择,我并没有反对,为何呢? GitLab 是一个非常成熟的 git 工具之一,同时 Jenkins 也是非常成熟的 CICD 组件,功能非常强大。 但是我还是要站在正义的一边,选择Drone + Gogs。O(∩_∩)O 哈哈~

    说明

    drone升级使用1.0.0-rc6版本,此版本并非稳定版本,推荐使用1版本甚至是0.8.6更稳定的版本。1.0后的版本较之前而言,配置更加灵活、优化版本,同时界面也变化了。drone

    环境

    使用的前提,必须符合以下条件

    • 系统安装了Docker,同时要安装了Docker编排工具docker-compose
    • 主流的x64位系统,LinuxMacWindow
    • 安装了git版本控制工具

    安装

    安装非常简单,拉取docker-compose.yml编排文件,基于Docker环境自动构建即可! 同步至github | 戳戳戳

    git clone https://github.com/alicfeng/gogs-drone-docker.git cd gogs-drone-docker && docker-compose up -d 

    执行docker ps来看下容器的运行情况 alicfeng - docker ps

    对应的配置文件可以根据项目的需求自由灵活改变,同时像我这样强迫症的人,我不喜欢使用IP来进行访问请求的以及http协议访问,我会使用nginx代理。不详细说了

    至此,我们已经完成了平台的构建工作了。我们来欣赏下~干杯~ Gogs Drone

    有两个地方需要注意:

    • Drone登录的账号需要在Gogs设置为管理员,他俩兄弟的账密是互通的
    • Gogs的仓库会自动同步到Drone上,此时,需要在Drone开启钩子才能正常运行

    使用

    好了,是时候来体验两把了,这里需要有一个前提了,O(∩_∩)O 哈哈~,你需要了解它是如何运行的,根据什么来自动化构建的 每当分支的代码更新的时候,Gogs 会动过钩子同步通知 Drone ,而 Drone 收到通知之后会发生一系列动作

    • 通过 git 插件clone分支代码到容器里面

    • 测试

    • 编译代码,构建可执行文件

    • 将项目和运行环境打包成镜像,发布到Registry

    • 部署至生产环境

    • 发送邮件等通知信息,这里还有很多插件,比如微信、钉钉、电报等

      构建的剧本是通过.drone.yml文件编排的,基于Docker镜像进行构建,很 nice~下面简单体验下Laravel项目的即可!githublaravelvue等前后端编排的yml文件。

    pipeline: build: image: motecshine/laravelphp71 commands: - mv $(pwd)/.env.dev $(pwd)/.env - composer config repo.packagist composer https://packagist.phpcomposer.com - composer install --no-scripts --no-dev # others 

    drone

    drone

    价值源于技术,技术源于分享

    9 条回复    2022-03-17 21:20:09 +08:00
    WordTian
        1
    WordTian  
       2021-12-31 23:38:10 +08:00 via Android
    之前也折腾过,用了一年多,现在懒得维护自己的 gitea+drone 服务了,现在用 google cloud build 凑合了,一天 120 分钟构建时长,也够了
    statumer
        2
    statumer  
       2021-12-31 23:44:11 +08:00 via iPhone
    很实用的教程呀,资瓷一个
    plko345
       3
    plko345  
       2021-12-31 23:53:52 +08:00 via Android
    gitlab 不是 go 写的?
    willygeek007
        4
    willygeek007  
       2022-01-01 09:29:00 +08:00 via iPhone
    gogs 算是旧版本,gitea 是后来 fork 出来,建议用 gitea ,feature 多一些,问题也少些
    AlicFeng
        5
    AlicFeng  
    OP
       2022-01-01 10:19:13 +08:00
    @WordTian Goggle 还算是比较稳定的(免费的很稳定),很适合小研发团队。比较担心的是像 travis 这种变化,不再为开源项目提供免费的午餐。
    AlicFeng
        6
    AlicFeng  
    OP
       2022-01-01 10:21:52 +08:00
    @willygeek007 原来如此、学习了
    AlicFeng
        7
    AlicFeng  
    OP
       2022-01-01 10:23:49 +08:00
    @plko345 我才发现我说的没错但不对Gitlab 最先是使用 Ruby 编写的,后续采用 Go 重写了一部分。
    AlicFeng
        8
    AlicFeng  
    OP
       2022-01-01 10:24:40 +08:00
    @statumer 希望分享对生态有帮助价值源于技术,技术源于分享
    findex
        9
    findex  
       2022-03-17 21:20:09 +08:00
    @AlicFeng 不用 travis 还有 CircleCI ,自己做个 CI 平台就是维护消耗资源和时间,但是对数据安全有要求的就很重要。从最近的风向看来,平台去美国化比较重要。Github + Actions + Docker + CircleCI ,最近都想换了。但是牵一发而动全身。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2810 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:31 PVG 21:31 LAX 06:31 JFK 09:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86