基于gitlab搭建Drone CI

news2024/10/6 8:30:13

drone简介:

drone官方文档:https://docs.drone.io/
drone跟Jenkins一样,可实现持续集成,就是可以帮助我们解决重复的代码构建,自动化测试,发布等重复劳动,通过简单一个提交代码的动作,解决接下来要做的很多事。

Drone是一种基于容器技术的连续运输系统,所以安装也是基于docker安装。

相对于Jenkins,Jenkins虽然有100多种插件可实现复杂的功能,所以操作部署也是同样的复杂。
而drone,短小精悍,部署简单,比 Jenkins 语法简单,更加适合 云原生应用。

一、gitlab设置

gitlab搭建参考:Gitlab教程

在Applications选项填写Name 和 Redirect URI,Name取个好记得即可。
Redirect URI 为搭建drone的地址,后面需要以login结尾。

在这里插入图片描述
scopes根据自己选择,最后Save applications即可
在这里插入图片描述
保存后,记下相关信息,安装drone会用到。
在这里插入图片描述
设置Network,后续drone激活项目会使用到
在这里插入图片描述

二:docker安装drone Server和Runner

drone有个Server和Runner(Agent)的概念,我们先来理解下:

Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。
Runner(Agent):一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。
drone-runner不是必选的,官方不推荐吧runner和server安装在一个实例上

先生产共享密钥,用于连接Server和Runner之间,两者需一致。

1.运行drone Server

(172.16.11.2这台服务器)

openssl rand -hex 16

在这里插入图片描述
拉取镜像

docker pull drone/drone

docker运行drone Server

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true   \
  --env=DRONE_GITLAB_SERVER=http://172.16.11.1:82  \
  --env=DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96 \
  --env=DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1 \
  --env=DRONE_SERVER_HOST=172.16.11.2 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_TLS_AUTOCERT=false \
  --env=DRONE_LOGS_DEBUG=true \
  --env=DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 \
  --env=DRONE_USER_CREATE=username:root,admin:true \
  --publish=80:80 --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  -e TZ="Asia/Shanghai" \
  drone/drone

解释:
http://172.16.11.1:82这个是我的gitlab服务,因为我的端口是配置了82
172.16.11.2 是drone本机

浏览器访问172.16.11.2,点击继续Continue,自动跳转gitlab,授权即可进入drone。
在这里插入图片描述
在这里插入图片描述
进入可看到gitlab所有项目,选择一个项目,点击进入activate 激活进入项目即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.运行drone Runner(Agent)

拉取镜像,根据自己项目需要选择合适的runner。如有docker,k8s,exec,ssh等。
这里,我需要远程ssh部署,就选择ssh的runner,如果runner不合适,在构建时,会一直pending状态。

如果是docker项目,则拉取docker的镜像

docker pull drone/drone-runner-ssh
docker pull drone/drone-runner-docker

drone 已经正常,接下来需要Runner执行工作了。

docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=172.16.11.2 \
-e DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-ssh

在这里插入图片描述
运行成功后,查看日志,docker logs ffd3ef3090fc可查看是否连接成功。
在这里插入图片描述
在这里插入图片描述
successfully pinged the remote serve连接成功。

到这里drone安装完成。

三、用docker-compose安装drone(拓展)

既然可以用docker安装drone,那可以用docker-compose编排,更简单,不用每次run 很多命令参数,参数直接写在环境.env文件即可,有任何改动,只需要更改.env参数即可。

1.创建docker-compose工作目录及docker-compose文件

创建目录/docker_drone

mkdir /docker_drone
cd /docker_drone
vim docker-compose.yml

内容如下:

version: "3.3"
 
services:
  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    networks: 
      - drone_net        # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
    ports:
      - '80:80'      # Web管理面板的入口 PROTO=http  时使用该端口
      - '443:443'     # Web管理面板的入口 PROTO=https 时使用该端口
      - '9000:9000'    # RPC服务端口
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock   # docker.sock [1]
      - /var/data/drone/:/var/lib/drone             # drone数据存放路径
    environment:
      - DRONE_AGENTS_ENABLED=true                   # 使用Runner
      - DRONE_GITLAB_SERVER=${DRONE_GITLAB_SERVER}                     # gitlab的地址
      - DRONE_GITLAB_CLIENT_ID=${DRONE_GITLAB_CLIENT_ID}          # gitlab获得的ClientID
      - DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITLAB_CLIENT_SECRET}  # gitlab获得的ClientSecret
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}                      # RPC秘钥    [2]
      - DRONE_SERVER_HOST=${DRONE_SERVER_HOST}                    # RPC域名(在一个实例上可以不用)
      - DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO}                  # git webhook使用的协议(建议http)
      - DRONE_OPEN=true                                           # 开发drone
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite     # 数据库文件
      - DRONE_DATABASE_DRIVER=sqlite3                             # 数据库驱动,我这里选的sqlite
      - DRONE_DEBUG=true                                          # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_DEBUG=true                                     # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_TRACE=true                                     # 调试相关,部署的时候建议先打开
      - DRONE_USER_CREATE=username:root,admin:true          # 初始管理员用户
      - TZ=Asia/Shanghai                                          # 时区
    restart: always
  drone-runner:
    image: drone/drone-runner-ssh:latest
    container_name: drone-runner
    networks: 
      - drone_net     # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
    depends_on:
      - drone-server 
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker.sock [1]
    environment:
      - DRONE_RPC_HOST=${DRONE_RPC_HOST}  # RPC服务地址
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}  # RPC秘钥
      - DRONE_RPC_PROTO=${DRONE_RPC_PROTO}    # RPC协议(http || https)
      - DRONE_RUNNER_CAPACITY=2               # 最大并发执行的 pipeline 数
      - DRONE_DEBUG=true                      # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_DEBUG=true                 # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_TRACE=true                 # 调试相关,部署的时候建议先打开
      - TZ=Asia/Shanghai
    restart: always
networks:
      drone_net:                  
      # 注意空格格式,否则报错,让drone-server和drone-agent处于一个网络中,方便进行RPC通信

2.编辑.env环境

cd /docker_drone
vim .env

根据自己实际的参数修改
内容如下:

DRONE_GITLAB_SERVER=http://172.16.11.1
DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96
DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1
DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22
DRONE_SERVER_HOST=172.16.11.2
DRONE_SERVER_PROTO=http
DRONE_RPC_HOST=172.16.11.2
DRONE_RPC_PROTO=http

在这里插入图片描述

3.启动测试

docker-compose up -d

在这里插入图片描述
到这里drone创建完成。

搭建完成,开始下一步,使用Drone自动构建项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/508523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Text-to-3D 任务论文笔记: Latent NeRF

文章目录 概述相关工作3D形状合成使用2D监督的text-to-3D 任务 方法前置知识LDMScore Distillation Latent NeRF文本引导RGB refinementSketch-Shape Guidance对于显式形状的Latent-Paint 实验实验细节文本引导的生成RGB RefinementTextual-Inversion Sketch-Shape GuidanceLat…

使用Handler创建一个Android秒表应用

0、应用是一个有活动、布局和其他资源组成的集合。其中一个活动是应用的主活动。每个应用都有一个主活动,在文件AndroidManifest.xml中指定。 1、默认地,每个应用都在自己的进程中运行。这样有助于保证应用安全。 2、但是可以使用startActivity(intent)传…

信息安全支撑技术

信息安全支撑技术 密码学密码学发展古典密码近代密码学现代密码学 基本保密通信模型密码系统的安全性密码学技术在信息安全中的应用对称密码算法非对称密码算法其他密码服务哈希函数消息认证码数字签名 公钥基础设施(PKI)CA:认证权威RA&#…

九耶丨阁瑞钛伦特-SpringCloud(六)

Spring Cloud Config 是一个基于 Spring Boot 实现的分布式配置管理工具,它专注于管理各种环境中的应用程序配置,例如开发环境、测试环境和生产环境等。它提供了一个集中的配置服务器,允许在运行时动态地管理和更新应用程序的配置信息&#x…

10 个超赞的 C 语言开源项目

今天给大家分享10个超赞的C语言开源项目,希望这些内容能对大家有所帮助! 01 Webbench Webbench是一个在 Linux 下使用的非常简单的网站压测工具。 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能。 最多可以…

Unity版本使用情况统计(更新至2023年4月)

本期UWA发布的内容是第十二期Unity版本使用统计,统计周期为2022年11月至2023年4月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势,了解近半年来哪些Unity版本的使用概率更…

Java经典笔试题—day05

Java经典笔试题—day05 🔎选择题🔎编程题🥝统计回文🥝连续子数组最大和 🔎结尾 🔎选择题 (1)下面的程序 编译运行后,在屏幕上显示的结果是() public class Test {publi…

使用敏捷开发工具做敏捷需求管理流程

上一篇我们介绍了如何管理产品路线图,这一篇我们介绍下如何管理产品Backlog。 史诗故事通常都是比较大的故事,所以我们需要将史诗故事规划到产品Backlog中,以便让团队在产品Backlog中对史诗故事进行拆分,将其拆解为更小的用户故事…

Kubernetes对象之PersistentVolume,PersistentVolumeClaim和StorageClass

前面我们学习了Kubernetes中的Volume,我们可以发现前文中的Volume(无论何种类型)和使用它的Pod都是一种静态绑定关系,在Pod定义文件中,同时定义了它使用的Volume。在这种情况下,Volume是Pod的附属品&#x…

linux安装redis服务

linux环境采用centos7 1.下载redis安装包 官网下载地址:https://redis.io/download/ 2.安装redis依赖 yum install -y gcc tcl3.上传安装包并解压 tar -xzf redis-6.2.12.tar.gz4.编译安装 进入目录下并安装 cd redis-6.2.12 make && make install默认…

Python 密码破解指南:15~19

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神,试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十五、…

基于springboot会员制医疗预约服务管理信息系统

开发技术介绍 Java语言简介 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景&#xff…

APP多版本并行更新方案

目录 App为什么要更新版本更新类型分析应该如何解决升级样式的收集表结构 App为什么要更新版本 任何一款APP都不可能完美,功能也不可能完善,需要不断迭代更新完善APP。例如:随着业务的不断发展而叠加的功能、产品发展到一定程度需要大改版提升…

【源码解析】Redisson分布式限流器RRateLimiter源码分析

前面已经写了一篇Redisson的分布式限流的使用,Redisson分布式限流的简单实践,对其中的原理很好奇。 一、使用 // 1、 声明一个限流器 RRateLimiter rateLimiter redissonClient.getRateLimiter(key);// 2、 设置速率,5秒中产生3个令牌 rat…

如何把软件从C盘移到D盘?

​为什么要把软件从C盘移到D盘? C盘是安装操作系统的系统分区。虽然很多用户在安装系统的时候会给C盘分配了大量的磁盘空间,但是大多数用户会发现C盘很快就会无缘无故的被占满。这是为什么呢?这主要是由于大多数三方程序默认安装在C盘造成…

安科瑞5G智慧水务能效管理平台在九江环境治理中的应用

摘要:当下,以数字孪生为主的数字技术愈发成熟,为使得长江水环境治理能够“长治久安”,上海院在长江大保护先行先试城市九江城中水环境治理中启用了智慧水务先进理念,搭建了基于数字孪生技术的智慧水务平台。通过数字孪…

Vue 页面列表中部门类型根据层级缩进显示 ASCII 160

如上图, 部门类型都是一长溜, 没有根据级别进行缩进. 修改的时候尝试了在类型字段前面加了空格(ASCII-32), tab制表符(ASCII-09), 但是加载的时候都被去掉了,没有起作用. 然后就想这找个特殊空格试下,类似于CF中的空白用户名. 后来查了下ASCII码表发现还有挺多的, 不过经过测试…

U-boot常用命令(一)

信息查询命令 bdinfo,查看板子信息。 可以得到DRAM的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址信息。 printenv输出环境变量信息,uboot 也支持 TAB 键自动补全功能,输入“print” 然后按…

STL-deque容器

双端数组,可以对头端进行插入删除操作 deque 容器和 vecotr 容器有很多相似之处,比如: deque 容器也擅长在序列尾部添加或删除元素(时间复杂度为O(1)),而不擅长在序列中间添加或删除元素。deque 容器也可…

web自动化测试进阶篇01 ——— 策略模式的实践与技巧

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…