首页 > 其他分享 >Drone自动化构建学习

Drone自动化构建学习

时间:2023-08-02 19:11:53浏览次数:41  
标签:name -- DRONE drone Drone 构建 env 自动化 docker

使用Drone进行自动化构建

提到CI/CD,最有名的当然是jenkins,但是它好像太复杂了,不管是装在主机,还是装在docker里,都很难使用,更何况很多插件还很难下载。上手难度这么大,当然就不利于新手学习了,于是转而使用Drone,它可是相当轻量的产品了,本身就支持以容器提供服务。

虽然只是简单的过程,但是却是不那么容易就能实践。

匆匆看看网上的教程,都会提到需要配置git服务器的Oauth授权,首先面临的困难就是,电脑没有公网IP,那么就不能访问到自己的仓库,于是决定自己搭建一个gitlab,在内网环境下,自己分配IP地址就好了。没想到部署起来也是相当困难,不知道是不是因为我的虚拟机配置太低了或者已有的环境太复杂了。虚拟机安装gitlab和docker安装gitlab,一访问就是502。忘了截图了。没办法,只能重新考虑使用公共的Git服务器,于是决定使用Gitee。

虽然电脑没有公网IP,但是好在有云服务器,它有公网IP,可以进行内网穿透。

frp_linux_amd64

我的虚拟机和云服务器都是centos,所有下载这个就好了。下载解压,稍微修改一下配置文件即可使用。

云服务器:

软件结果很简单,解压即用,没有多余的东西
[root@VM-4-10-centos frp_0.51.2_linux_amd64]# ls
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE
[root@VM-4-10-centos frp_0.51.2_linux_amd64]# cat frps.ini 
[common]
bind_port = 200
这个配置很简单,让frps监听200号端口

运行下述命令,即可启动
[root@VM-4-10-centos frp_0.51.2_linux_amd64]# ./frps -c ./frps.ini

虚拟机

[root@localhost frp_0.51.2_linux_amd64]# cat frpc.ini
[common]
server_addr = 公网IP地址
server_port = 200

[http]
type = tcp
local_ip = 0.0.0.0
local_port = 80
remote_port = 100

[root@localhost frp_0.51.2_linux_amd64]# ./frpc -c frpc.ini

这样配置,就可以把http://公网IP:100 转发到虚拟机的80端口了。
需要注意,这里的100和上面的200端口号,都需要允许通过防火墙。

打开虚拟机的nginx(默认监听80),浏览器访问 http://公网IP:100,就可以访问到虚拟机的nginx了。

这里没有截图,访问成功,说明转发成功了。
到这里,就可以去修改gitee的配置了。配置Oauth应用授权。

image-20230802173942728

点击以后,往下拉。

image-20230802174009331

再点击第三方应用。

image-20230802174030536

点击创建。

image-20230802174525853

官网教程链接

创建成功:

image-20230802174710731

image-20230802174759385

这些属性,都是可以修改的。这里,我们只需要ClientID 和ClientSecret

本来是准备把drone-server和drone-runner写在一个docker-compose.yml的,但是不知怎的,drone-server 一直提示log fatal ,main code manage error(大概是这样),然后就无限重启了。

没办法,只能把它俩分开,单独运行了。
docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GITEE_CLIENT_ID=这里填入上面那个client_id \
  --env=DRONE_GITEE_CLIENT_SECRET=这里填入上面那个client-secret \
  --env=DRONE_RPC_SECRET=123456(测试使用,实际需要专门生成) \
  --env=DRONE_SERVER_HOST=这里就是上面的公网IP:port \
  --env=DRONE_SERVER_PROTO=这里和网页配置的一样,填入http \
  --env=DRONE_USER_CREATE=username:yyjeqhc,admin:true(Drone账号,管理员高于普通注册的账号) \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2
  
  大概就是Drone有一个账号,然后在浏览器打开,访问的就是你浏览器登录的git账号。Drone账号权限高,就可以做特殊的操作,这里公开了80号端口,前面需要提前关闭占用80和443端口的应用。
  
 整体的参数可以看drone官网的教程。
  
  docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GITEE_CLIENT_ID=0ccb18bdb92317c2469def84b470387445dcccf3b2aeca4a2bfe74bf099e5a92 \
  --env=DRONE_GITEE_CLIENT_SECRET=b18567521b869546213d7178d547b6f82b6c464f00c75eb91a7568475475723b \
  --env=DRONE_RPC_SECRET=123456 \
  --env=DRONE_SERVER_HOST=yyjeqhc.cn:100 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_USER_CREATE=username:yyjeqhc,admin:true \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2

直接在网页注册Drone账号的过程就略过了,实验的时候把两个账号都登陆了,删除也很麻烦。

以下直接从登录Drone以后记录。

登录以后,会直接访问你浏览器那个gitee账号,获取所有仓库列表并展示。

如下图所示:

image-20230802161921761

上午操作的时候,也是有点懵,能获取到列表,为什么还是404呢。

点了好几个都不行,好在仓库很多,后面又点了下面的仓库,发现有的是未激活状态,有的是404状态
一度以为是仓库的结构不行,比如有没有证书,有没有readme.md啥的。后来发现,就是单纯的不支持项目首字母大写。

image-20230802161929218

解决方案就是去gitee,把项目名称修改为小写。

image-20230802162316255

修改以后,点击Drone界面的SYNC,再点击项目,就可以进行激活等操作了。激活项目,就会在gitee对应的仓库设置里面自动打开一个webhook,所以不需要用户手动去开启了

image-20230802162303025

基本的配置完成了,下面就需要drone-runner了。
docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=yyjeqhc.cn:100 \
  --env=DRONE_RPC_SECRET=123456 \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=my-first-runner \
  --publish=3000:3000 \
  --restart=always \
  --name=runner \
  drone/drone-runner-docker:1
  
  这个DRONE_RPC_相关参数,和server保持一致,也可以在drone官网查看
  

image-20230802112012107

drone runner是实际执行任务的容器,没有运行runner,server将无法完成工作。进度条卡在白色转圈圈
此时,再启动runner容器,进度条就变成黄色转圈圈,表示正在构建了。

普通的构建还是很容易成功的,这里跳过。

下面是把构建的文件保存到主机。
kind: pipeline
type: docker

steps:
- name: test
  image: golang:latest
  volumes:
  - name: cache
    path: /tmp/cache
  commands:
  - go build
  - cp ./tools /tmp/cache/1440

volumes:
- name: cache
  host:
    path: /home/drone

我的项目是tools,以上内容保存为.drong.yml文件。

push项目,会自动构建,没想到都不用拉取代码,直接就fail了。

image-20230802144747818

查看项目设置,没有任何可以修改的地方

image-20230802145035817

这个表示Drone账号权限不足,所以才需要在创建Drone-server的时候,添加一个管理员账号,上面的命令就是后来改过的。

登录Drone的管理员账号后:

image-20230802144810650

image-20230802144821320

把这个运行容器特权设置的选项打开,再保存修改。然后点击new Build,就可以直接重新构建了。

image-20230802144849899

构建成,提示Success。然后查看虚拟机的挂载目录

[root@localhost ~]# cd /home/drone
[root@localhost drone]# ls
1440  docker-compose.yml  drone
可以看见,构建的可执行文件复制出来了。

image-20230802152232609

image-20230802152246849

接下来,需要修改drone.yml,添加把构建的可执行文件复制到镜像里面,进行发布。

kind: pipeline
type: docker

steps:
- name: test
  image: golang:alpine
  volumes:
  - name: cache
    path: /tmp/cache
  commands:
  - go build
  - cp ./tools /tmp/cache/1542

- name: build
  image: docker:dind
  privileged: true
  volumes:
  - name: cache
    path: /tmp/cache
  - name: docker_sock
    path: /var/run/docker.sock
  environment:
    API_KEY:
      from_secret: dockerhubkey
  commands:
  - echo "FROM alpine" > Dockerfile
  - echo "COPY ./tools /" >> Dockerfile
  - echo "CMD [\"/tools\"]" >> Dockerfile
  - docker build -t yyjeqhc/tools:drone .
  - docker login -u yyjeqhc -p $API_KEY
  - docker push yyjeqhc/tools

volumes:
- name: cache
  host:
    path: /home/drone
- name: docker_sock
  host:
    path: /var/run/docker.sock

这个也很麻烦,这里没有记录过程,直接展示最后可用的代码了。前提是需要自己提前在docker的hub仓库创建存储库。

push项目,自动构建,查看hub.docker

image-20230802152318705

可以看见已经推送到官方仓库了

然后在虚拟机拉取镜像并运行,即可。

docker pull yyjeqhc/tools:latest
docker run -d -p 8080:8080 --name my_container yyjeqhc/tools:latest

image-20230802152552159

上面的drone.yml是最终版本的,修改了docker login里面的密码,一开始采用的是明文,后来查看博客,发现可以进行修改。
在项目的设置里面,点击Secrets,再点击添加secrets

image-20230802160304091

image-20230802161516260

就是起到类似于环境变量的效果。这个secret的使用就是上面的from_secret

下面是补充:

kind: pipeline
type: docker

steps:
- name: test
  image: alpine
  commands:
  - echo "hello world"

本来是404的项目,修改项目名称后,再提交,可以正常构建了。

image-20230802162612415

image-20230802162629935

image-20230802162640573

在项目构建过程中,我想要让go build那个容器运行编译的二进制文件并且在后台运行,结果发现它有IP地址,但是怎么修改drone.yml,都不能访问到它的8080号端口,也就放弃了。

还有,构建过程中,发现有一个git的容器在运行,但是构建过程一结束,也就被删除了。所以,不知道是不是每次构建,都要重新拉取全部代码。

总的来说,也可以算是入门了吧。

标签:name,--,DRONE,drone,Drone,构建,env,自动化,docker
From: https://www.cnblogs.com/dayq/p/17601537.html

相关文章

  • 软件测试|web自动化测试神器playwright教程(十二)
    前言在日常工作中,我们经常是基于某个测试环境地址去测试某个项目,所以应该把它单独拿出来做为一个全局的配置。其他网址可以使用不同的后缀,只使用相对地址。常见情景比如我们的社区,不同的类别只需要改变我们的后缀即可,如下图:首页地址为:https://ceshiren.com/,我们选择查看热门......
  • 软件测试|web自动化测试神器playwright教程(十三)
    前言我们在工作中,会遇到需要使用不同的硬件设备测试兼容性的问题,尤其是现在手机型号,屏幕大小分辨率五花八门的,我们基本不可能全部机型都用真机测试一遍,playwright提供了模仿机型的功能,我们可以使用playwright来模拟设备。设置手机模式配置需要模拟的设备,我们需要配置我们使用的......
  • 软件测试|web自动化测试神器playwright教程(十四)
    前言我们在日常工作中,经常会遇到下面的情况,我们需要在一个下拉框中选择一个选项:在使用selenium定位的过程中,我们可以选择使用selenium的Select类,有了playwright,我们的操作会变得更简单一些。playwright也提供了select的方法进行操作。select用法使用locator.select_option(......
  • 软件测试|web自动化测试神器playwright教程(十五)
    前言我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。弹框通常分为3种,分别为alert,confirm,promot。alert弹框:只有信息和确定按键confirm弹框:在alert弹窗基础上增加了取消按钮prompt弹框:在confi......
  • 软件测试|web自动化测试神器playwright教程(十六)
    前言在我们的日常工作中,经常会遇到文件下载的事件,如下图:我们可以看到在下载文件时会弹出一个Windows对话框,我们知道,selenium只能操作web页面,无法操作Windows对话框,使用selenium时,我们可以借助autoit等工具实现该功能。playwright则可以不借助其他工具实现文件的下载。文件下......
  • Docker与DevOps的完美结合:实现自动化、监控和日志管理
    1.引言1.1介绍Docker和DevOps的概念和背景在软件开发和运维领域,Docker和DevOps是两个备受关注的重要概念。了解这两个概念的背景和意义对于理解如何将它们结合起来实现自动化、监控和日志管理至关重要。Docker的概念和背景Docker是一种开源的容器化平台,它允许开发人员在隔离的环......
  • 构建易于运维的 AI 训练平台:存储选型与最佳实践
    伴随着公司业务的发展,数据量持续增长,存储平台面临新的挑战:大图片的高吞吐、超分辨率场景下数千万小文件的IOPS问题、运维复杂等问题。除了这些技术难题,我们基础团队的人员也比较紧张,负责存储层运维的仅有1名同事,因而组件的易用性,一直也是我们评估的重要维度。我们尝试过文件......
  • 构建以人为本的全面预算管理模式
    在财务分析的转型过程中,系统、预测、过程和大数据等都发挥着重要的作用,除此之外,我们往往会忽视一个更重要的因素——人在成功的转型项目中更是发挥着核心作用。企业大部分转型之旅都与人有关,通常人可以发挥创造力以更好地为企业服务。如今,数据质量正以难以置信的速度得到改善,企业运......
  • 使用轻量级 CDC debezium-server-databend 构建实时数据同步
    作者:韩山杰DatabendCloud研发工程师https://github.com/hantmacDebeziumServerDatabend是一个基于DebeziumEngine自研的轻量级CDC项目,用于实时捕获数据库更改并将其作为事件流传递最终将数据写入目标数据库Databend。它提供了一种简单的方式来监视和捕获关系型数......
  • 用友助医院推动数电票试点 构建数智化财税系统
    近年来,国税局等部门颁布了密集政策,以推广全面数字化的电子发票(简称:数电票),数电票开票试点地区逐步扩展到全国所有省份和地区,预计到今年年底前,数电票数量占比将大于90%。对于医院而言,这既是加速财税数字化、改善智慧就医服务的良好契机,也意味着系统接入、流程改造等方面的挑战。数......