部署drone实现ci/cd

git私服搭建

https://gitea.io/en-us/

一、Gitea创建OAuth2应用程序

git仓库地址http://49.235.6.235:3000/

进入Gitea-->点击右上角头像-->设置-->应用-->管理OAuth2应用程序
来创建一个OAuth2应用程序

这里的重定向URL是授权成功后跳转到drone的地址,根据自己的drone地址来创建

创建成功后就可以拿到客户端ID和客户端密钥了,这里可以先记录下来,我们后边会用到,因为一旦离开这个页面就没法再查看密钥了,只能重新生成

二、编写docker-compose.yml文件

这里我们通过使用 Docker Compose 来构建并启动 Drone和 Docker Runner,编写 docker-compose.yml 文件

mkdir /home/docker/drone 
cd /home/docker/drone 
vim docker-compose.yml

在配置文件中,我们设置 docker-compose.yml 的格式为 3 号版本,定义以下两个docker服务。

  • Drone Server:使用drone/drone:1版本镜像,将 drone 容器的 80 端口映射到宿主机的 8082端口。映射容器内 /data 目录到宿主机的 /data/drone 目录,以便 drone 可以保留数据。配置服务自动重新启动,并配置构建 drone 所需的环境变量。
  • Docker Runner:使用drone/drone-runner-docker:1版本镜像,将 docker 启动句柄挂载到容器/var/run/docker.sock文件中,以便 drone 可以使用 docker-runner 来执行镜像构建任务。环境变量中需要配置 drone server 的端口协议以及共享密钥,以便与 server 进行通信。
  • 具体配置可参考如下配置:
version: '3'
services:
  # 容器名称
  fan-drone-server:
    # 构建所使用的镜像
    image: drone/drone:1
    # 映射容器内80端口到宿主机的7079端口
    ports:
      - 8082:80
    # 映射容器内/data目录到宿主机的/data/drone目录
    volumes:
      - /data/drone:/data
    # 容器随docker自动启动
    restart: always
    environment:
      # Gitea 服务器地址
      - DRONE_GITEA_SERVER=http://49.235.6.235:3000
      # Gitea OAuth2客户端ID
      - DRONE_GITEA_CLIENT_ID=afa9c9e9-802d-4ce3-a1e6-4d81d98bf3ad
      # Gitea OAuth2客户端密钥
      - DRONE_GITEA_CLIENT_SECRET=OglyfNgftu6t7RZjZl1tTz764VGKzyDmc98IAdWlnet6
      # drone的共享密钥
      - DRONE_RPC_SECRET=asdfsadfasdfsadfsadfasdf
      # drone的主机名
      - DRONE_SERVER_HOST=192.168.31.254:8082
      # 外部协议方案
      - DRONE_SERVER_PROTO=http
      # 创建管理员账户,这里对应为gitea的用户名
      - DRONE_USER_CREATE=username:zhangwei,admin:true

  fan-docker-runner:
    image: drone/drone-runner-docker:1
    ports:
      - 7080:3000
    restart: always
    depends_on:
      - fan-drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      # 用于连接到Drone服务器的协议。该值必须是http或https。
      - DRONE_RPC_PROTO=http
      # 用于连接到Drone服务器的主机名
      - DRONE_RPC_HOST=192.168.31.254:8082
      # Drone服务器进行身份验证的共享密钥,和上面设置一样
      - DRONE_RPC_SECRET=asdfsadfasdfsadfsadfasdf
      # 限制运行程序可以执行的并发管道数。运行程序默认情况下执行2个并发管道。
      - DRONE_RUNNER_CAPACITY=2
      # docker runner 名称
      - DRONE_RUNNER_NAME=fan-docker-runner-1

红色方框内容根据实际情况修改

构建drone和runner

docker-compose up -d 

-d 为后台运行

三、配置drone

打开drone http://192.168.1.1:8082

到这里如果没有出问题的话drone就构建完成了,我们在浏览器输入配置的drone地址,可看到自动跳转到gitea的授权页面

这里我们进行授权后就跳转到drone的页面了,只需授权一次即可,往后我们登录了gitea就直接进入drone
进入drone会看到未激活的仓库,我们点击激活它

进入git仓库

我们会看到仓库已经自动配置好了web钩子

检测链接是否正常

可以进去测试钩子,一般是没问题的



到这里我们的drone就安装完毕了,激活仓库后,我们向仓库推送一个commit,gitea就会发送消息通知drone去干活啦~

四、配置Drone自动构建

drone的安装过程还是很简单的,下面我们来进行drone构建的配置
drone支持不同环境的不同管道配置,这里我使用Docker Pipelines管道配置
简单来说就是drone的每一步操作都在一个临时的drone的容器中进行,容器操作完会自动销毁,容器之间会共享当前的工作目录

1.本地部署

本地部署主要步骤:

drone拉取最新的代码到当前工作目录

drone创建maven/grade容器,通过指定的构建工具maven/grade等将代码编译/打包为jar包,然后将jar包和

drone创建ssh容器,在容器中通过ssh连接到宿主机,通过定义好的命令,到jar和Dockerfile目录中将jar包制作构建为镜像,然后通过镜像创建应用容器并运行,期间会删除之前老的应用程序容器和镜像

2.编写drone部署的文件

在仓库的根目录下创建.drone.yml配置文件


配置文件参考如下配置:

# drone 本地构建
kind: pipeline
type: docker
name: bladex-boot
# drone构建步骤
steps:
  # 1.maven打包
  - name: maven compile
    image: maven:3.6.2-jdk-8
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-cache
        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /home # 将应用打包好的Jar和执行脚本挂载出来
    commands:
      - mvn clean package -q
      - cp doc/script/fatjar/service.sh /home #复制启动脚本到宿主机
      - cp target/blade-api.jar /home/app.jar #复制打包好的文件到宿主机
    when:  # 触发事件
      branch: master
      event: [ push ] 
  - name: startup
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.31.254 # 远程连接地址
      username: root # 远程连接账号
      password: 
        from_secret: ssh_password # 从Secret中读取SSH密码 在drone服务器中配置
      port: 22 # 远程连接端口
      command_timeout: 5m # 远程执行命令超时时间
      script:
        - cd /home/docker/drone # 进入宿主机构建目录
        - chmod +x service.sh # 更改为可执行脚本
        - ./service.sh restart # 运行脚本打包应用镜像并运行
volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /home/docker/drone # 从宿主机中挂载的目录
  - name: maven-cache
    host:
      path: /root/.m2
# drone执行触发器
trigger:
  branch:
    - master

drone中存储密码的方式

相关文档

https://www.ffis.me/archives/1988.html

https://www.cnblogs.com/dxp909/p/11585904.html

https://juejin.cn/post/6963430116080910367



posted @   枫中落叶  阅读(365)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示