[小团队自动化] (三) 轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流...

(三) 轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流


写在前边

这一篇文章是基于 Gitea+Drone CI+Vault 打造属于自己的CI/CD工作流系列文章第三篇,让我们一起来完成 dronegitea 的搭配使用,这篇内容比较简单和容易,也是最终篇。

在第一篇文章中(一) Drone CI For Github —— 打造自己的CI/CD工作流,我们一起了解了Drone For Github 的部署和使用,一起感受了 Drone的简单强大的功能带来的方便和快捷。

在第二篇文章中(二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流,我们一起了解了Vault 的部署和使用,并了解和学习了怎么为 Drone 指定 Secret 的存储为 Vault ,解决了在实际的应用中,不同项目的敏感数据重复使用以及权限控制问题。

在更早的一篇文章中基于Gitea打造一个属于你自己的代码托管平台,我们一起了解了 Gitea 的部署和使用,感受 Gitea 作为一个轻量化的代码托管平台,依然拥有丰富的功能和美观的界面。

我们分别了解了 DroneVaultGitea 的部署和使用,那么我们为什么不把它们结合起来,打造一个专属于自己的CI/CD工作流呢?

废话少说,说干就干,开始搞事。

组合DroneVaultGitea

接来下,我们开始将DroneVaultGitea组合到一起,构建一个专属于自己的CI/CD工作流

如果你对它们还不了解,请参考我之前的文章。

  • (一) Drone CI For Github —— 打造自己的CI/CD工作流
  • (二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流
  • 基于Gitea打造一个属于你自己的代码托管平台

编写 docker-compose.yml

这里我们结合之前三篇文章的docker-compose.yml

加入 gitea 之后,只需要修改 drone-serverenvironment

  1. 删除 DRONE_GITHUB_SERVER DRONE_GITHUB_CLIENT_ID DRONE_GITHUB_CLIENT_SECRET

  2. 加入 DRONE_GITEA_SKIP_VERIFY DRONE_GITEA_SERVER

version: "3.7"
services:
  nginx:
    image: nginx:alpine
    container_name: dronetest_nginx
    ports:
      - "80:80"
    restart: always
    networks:
      - dronenet
  mysql:
    image: mysql:5.7
    restart: always
    container_name: dronetest_mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=drone
      - MYSQL_USER=drone
      - MYSQL_PASSWORD=drone_password
    networks:
      - dronenet
    volumes:
      - /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw
      - /path/to/data:/var/lib/mysql/:rw
      - /path/to/logs:/var/log/mysql/:rw
  vault:
    image: vault:latest
    container_name: vault
    restart: always
    networks:
      - dronenet
    volumes:
      - ./vault/file:/vault/file
      - ./vault/config:/vault/config
      - ./vault/logs:/vault/logs
    cap_add:
      - IPC_LOCK
    environment:
      - VAULT_ADDR=http://127.0.0.1:8200
    command: vault server -config=/vault/config/local.json #这句非常重要,一定要替换原有的Dockerfile中的CMD,不然会自动初始化,生成的数据都在docker logs中,不说你肯定找不到。dog.jpg,所以我选择手动初始化
  memcache:
    image: memcached:alpine
    container_name: test_memcache
    restart: always
    networks:
      - dronenet
  gitea:
    image: gitea/gitea:latest
    restart: always
    container_name: test_gitea
    networks:
      - dronenet
    ports:
      - "22:22"			#git服务对外使用22端口会更加方便
    volumes:
      - /var/lib/gitea:/data:rw	#gitea的data数据应该做持久化,映射到宿主机磁盘上
  drone-server:
    image: drone/drone:1.0.0-rc.5 #不要用latest,latest并非稳定版本
    container_name: dronetest_server
    networks: 
      - dronenet
    volumes:
      - ${DRONE_DATA}:/var/lib/drone/:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
    restart: always
    environment:
      - DRONE_DEBUG=true
      - DRONE_DATABASE_DATASOURCE=drone:drone_password@tcp(dronetest_mysql:3306)/drone?parseTime=true   #mysql配置,要与上边mysql容器中的配置一致
      - DRONE_DATABASE_DRIVER=mysql
      - DRONE_GITEA_SKIP_VERIFY=false
      - DRONE_GITEA_SERVER=http://test_gitea:3000
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw  #RPC秘钥
      - DRONE_SERVER_PROTO=http			#这个配置决定了你激活时仓库中的webhook地址的proto
      - DRONE_SERVER_HOST=dronetest.yiranzai.top
      - DRONE_USER_CREATE=username:yiranzai,admin:true  #管理员账号,是你想要作为管理员的Gitea用户名
  drone-vault:
    image: drone/vault
    container_name: dronetest_vault
    restart: always
    networks:
      - dronenet
    environment:
      - SECRET_KEY=7890bcce69bb685a9a424767fe9d1be1	 #和drone-agent通信的加密
      - DEBUG=true									
      - VAULT_ADDR=http://vault:8200
      - VAULT_TOKEN_RENEWAL=84h
      - VAULT_TOKEN_TTL=168h
      - VAULT_TOKEN=s.mx4KQycrFAfiaHIuPnNLhFCy		#这里不要用root token,用上边生成的只读token
  drone-agent:
    image: drone/agent:1.0.0-rc.5
    container_name: dronetest_agent
    restart: always
    networks:
      - dronenet
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      - DRONE_SECRET_SECRET=7890bcce69bb685a9a424767fe9d1be1
      - DRONE_SECRET_ENDPOINT=http://dronetest_vault:3000
      - DRONE_RPC_SERVER=http://dronetest_server
      - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw
      - DRONE_DEBUG=true
      - DRONE_LOGS_DEBUG=true
      - DRONE_LOGS_PRETTY=true
      - DRONE_LOGS_NOCOLOR=false
networks:
  dronenet:
复制代码

结束了?

是的结束了,如果你仔细看了前两篇文章的话,会明白,这一点都不奇怪,从 github 切换到 gitea 只需要简单改动配置即可。

本系列前两篇文章是重中之重,请着重阅读。

总结


本篇文章简单归简单,但是整体的配合还是有一些需要注意的点需要说明一下

  • gitea 的账号就是用来登陆 drone 的账号,在 drone-server 中的 environment : DRONE_USER_CREATE 指明管理员的用户名
  • 所有的url都要写上协议
  • Vault 初始化生成的五个 unseal keyroot token 一定要记住并且不能泄露
  • drone-agent 可以有多个,做分布式。
  • vault 也是可以分布式的

系列文章

  • 基于 Gitea+Drone CI+Vault 打造属于自己的CI/CD工作流
  • (一) Drone CI For Github —— 打造自己的CI/CD工作流
  • (二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流
  • (三) 轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流
  • 番外:基于Gitea打造一个属于你自己的代码托管平台

有什么问题,欢迎评论或邮件。 好了,继续划水去了。

你可能感兴趣的:([小团队自动化] (三) 轻量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流...)