GitLab基于Drone搭建持续集成(CI/CD)

本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。

1. 准备工作

创建OAuth应用
创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。
在这里插入图片描述
在这里插入图片描述

ps:授权回调 URL 必须与以下格式和路径匹配,并且必须使用确切的服务器方案和主机。

2. 创建共享密钥

创建共享密钥以验证运行程序与中央 Drone 服务器之间的通信。

您可以使用 openssl 生成共享密钥:openssl rand -hex 16

3. 部署runner :

在服务创建一个文件夹,可以命名为drone,里面放docker-compose.yml和.env文件。文件内容如下:

docker-compose配置文件:

version: '3'

services:
  drone-server:
    image: drone/drone:2
    ports:
      - 8280:80
      - 443:443
    volumes:
      - /var/lib/drone:/data
      - /root/.ssh:/root/.ssh/
    restart: always
    environment:
      - DRONE_GITLAB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}  #您的 GitLab oauth 客户端 ID
      - DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}  #GitLab oauth 客户端密钥
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}  #提供在上一步中生成的共享密钥。这用于验证服务器和 runner 之间的 rpc 连接。
      - DRONE_SERVER_HOST=${DRONE_SERVER_HOST}  您的外部主机名或 IP 地址。如果使用 IP 地址,则可以包含端口。
      - DRONE_SERVER_PROTO=http   #外部协议方案。此值应设置为 http 或 https。如果您配置 ssl 或 acme,则此字段默认为 https。
      - DRONE_GITLAB_SERVER=http://gitlab.com # 您的gitlab服务器URL
      - DRONE_USER_CREATE=username:YPF,admin:true # 管理员账户

  drone-runner:
    image: drone/drone-runner-docker:latest
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.ssh/:/root/.ssh/
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=${DRONE_SERVER_HOST}
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=${HOSTNAME}

.env:

DRONE_GITHUB_CLIENT_ID=xxx 
DRONE_GITHUB_CLIENT_SECRET=xxx   
DRONE_RPC_SECRET=xxx
DRONE_SERVER_HOST=192.168.xx.xx:8280

拉取镜像并部署runner,运行命令:docker-compose up -d
直接拉取docker镜像,一般情况下都会报错、超时拉取不到

restore-cache: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

解决办法
配置国内docker镜像源:

{
  "registry-mirrors": [
        "https://yt7qrop4.mirror.aliyuncs.com",
        "https://ccr.ccs.tencentyun.com",
        "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
        "https://docker.m.daocloud.io",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://your_preferred_mirror",
        "https://dockerhub.icu",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn",
        "https://docker.rainbond.cc"
    ]
}

上面为加速器地址,需要把下面代码放到/etc/docker/daemon.json这个文件内(没有这个文件就创建一个)
换源之后执行以下指令: systemctl daemon-reload
重新加载配置 systemctl restart docker 重新启动docker
验证
运行docker ps可以看到以下容器:

CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                                NAMES
8b1704182e38        drone/drone-runner-docker:latest   "/bin/drone-runner-d…"   3 months ago        Up About a minute   3000/tcp                                             drone-drone-runner-1
69cecad7b541        drone/drone:2                      "/bin/drone-server"      3 months ago        Up About a minute   0.0.0.0:443->443/tcp, 0.0.0.0:8280->80/tcp           drone-drone-server-1

运行起来后,浏览器输入http://192.168.xx.xx:8280/就可以访问到了。

点击CONTINUE按钮会跳转到gitlab的授权页面,授权完之后会跳回来,注册一下。

注册完进去就可以看见我们gitlab上面所有的仓库了。
在这里插入图片描述

选一个仓库进去,点击激活按钮activate,激活成功后,会在gitlab仓库里面添加一个WebHooks,可以到gitlab去看看。
在这里插入图片描述

setting里面的Secrets可以设置一些敏感的参数,比如密码,密钥那些。
在这里插入图片描述

设置好之后可以在pipeline里面用from_secret语法使用。

4. Docker Pipelines

这一步是配置构建流水线了。

在git仓库根目录添加一个文件.drone.yml,在这里面定义流水线步骤。

kind: pipeline
type: docker
name: front-web-publish

steps:
# 加载依赖
- name: restore-cache
  image: drillster/drone-volume-cache
  volumes:
    - name: cache
      path: /drone/src/node_modules
  settings:
    restore: true


- name: build-project
  image: node:lts-slim
  privileged: true
  volumes: #将容器内目录挂载到宿主机
    - name: cache
      path: /drone/src/node_modules
    - name: build-html
      path: /html
  commands:
  - |
    if [ -f /html/yarn.lock ]; then
      cp -f /html/yarn.lock ./
      yarn install
    else
      yarn install
    fi
  - npm run build
  - |
    if [ "$(ls -A /html)" ]; then
      rm -rf /html/*
    fi
  - cp yarn.lock /html/yarn.lock
  - cp -r ./dist /html/forward
  - cp ./common/shell/Dockerfile  /html/Dockerfile
  - cp ./common/shell/build.sh /html/build.sh
  - tar -zcvf ./front-web.tar.gz /html/
  - cp -rf ./front-web.tar.gz /html/front-web.tar.gz

- name: scp-files # 上传文件步骤
  image: appleboy/drone-scp
  settings:
    # 服务器地址, 账号, 密码
    host: # 不使用secrets, 明文
      from_secret: '${DRONE_COMMIT_BRANCH}_host'
    username: root
    password:
      from_secret: '${DRONE_COMMIT_BRANCH}_psd'
    # 需要上传的文件 「需要相对路径, 如果用绝对路径会整条路径打包上传」
    source: ./front-web.tar.gz
    # 上传的目录文件夹
    target: /root/html
    port: 22
    command_timeout: 2m
  when:
    branch:
      - dev
      - test

- name: ssh-commands
  image: appleboy/drone-ssh
  settings:
    host:
      from_secret: '${DRONE_COMMIT_BRANCH}_host'
    username: root
    password:
      # 注意在 drone 页面的 Secrets 添加对应配置
      from_secret: '${DRONE_COMMIT_BRANCH}_psd'
    port: 22
    script:
      - |
        #判断环境变量
        ENV="dev"
        TAG="3.0"
        if [ "${DRONE_COMMIT_BRANCH}" = "release" ]; then
          ENV="pre"
          TAG="1.0"
          mv ./front-web.tar.gz root/html/
        elif [ "${DRONE_COMMIT_BRANCH}" = "test1" ]; then
          ENV="test"
          TAG="2.0"
        fi
      #拉取镜像并用k8s部署
      - cd /root/html
      - tar -zxvf front-web.tar.gz --strip-components 1  -C ./
      - chmod +x build.sh
      - sh ./build.sh "web" $ENV $TAG

volumes: # 定义流水线挂载目录,用于共享数据
  - name: build-html
    host:
      path: /root/drone/html # 从宿主机中挂载的目录
  - name: cache
    host:
      path: /root/drone/src/node_modules

trigger:
  branch:
    - dev
    - test
    - release
  event:
    - push
    - pull_request

完成后提交到仓库,gitlab会通过上面注册的webhook发送通知给Drone执行构建。

build.sh脚本

#!/bin/bash

echo "接受参数:$1,$2,$3"
project=$1
environment=$2
suffix=$3

rm front-web.tar.gz
rm yarn.lock
echo "查看当前目录中的文件"
pwd && ls -al
echo "复制配置文件"
cp -f /opt/conf/k8s-${environment}-default.conf default.conf
echo "构建docker镜像,并推送到仓库"
docker build -f Dockerfile -t harborv2.ichub.com/ichub2/micro-web:${suffix} . && docker push harborv2.ichub.com/ichub2/micro-web:${suffix}
echo "重启前端pod并暴露服务"
cd /root/ichub2/${environment}
pwd && ls -al
kubectl delete -f web-${environment}.yaml
kubectl apply -f web-${environment}.yaml
echo "清理镜像文件"
docker rmi harborv2.ichub.com/ichub2/micro-web:${suffix}  ##测试环境

本文根据Dron官方文档结合自己公司项目整理而成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RHCE 第四次作业

一.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 1.配置环境 [rootlocalhost ~]# yum install bind [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 2.配置DNS主服务器 [rootlocalhost ~]# vim /etc/named.conf options { …

【ArcGIS】绘制各省碳排放分布的中国地图

首先,准备好各省、自治区、直辖市及特别行政区(包括九段线)的shp文件: 通过百度网盘分享的文件:GS(2022)1873 链接:https://pan.baidu.com/s/1wq8-XM99LXG_P8q-jNgPJA 提取码&#…

关于CountDownLatch失效问题

一、项目背景 这几天要开发一个类似支付宝那种年度账单统计的功能,就是到元旦后支付完会把用户这一年的消费情况从各个维度(我们把这一个维度称作一个指标)统计分析形成一张报告展示给用户。 这个功能实现用到了CountDownLatch。假如统计分析…

【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38191 在当今复杂多变的全球经济环境下,医药行业正面临着诸多挑战与机遇。2024 年,医药行业的发展态势备受关注。 一方面,全球生物医药交易活跃,2021 - 2023 年的交易中,已…

鸿蒙5.0时代:原生鸿蒙应用市场引领开发者服务新篇章

前言 10月22日原生鸿蒙之夜发布会宣布HarmonyOS NEXT正式发布,首个版本号:鸿蒙5.0。这次“纯血鸿蒙”脱离了底层安卓架构成为纯国产的独立系统,仅凭这一点就有很多想象空间。 目前鸿蒙生态设备已超10亿,原生鸿蒙操作系统在中国市…

3.PyCharm工具

第三方IDE,集成开发工具,官网下载。 社区版本,免费使用。 创建项目 配置解释器,创建python文件,编写代码,运行:

arkUI:Flex弹性布局的各个属性

arkUI:Flex弹性布局的简单使用 1 主要内容说明2 相关内容2.1 Flex弹性布局的方向2.1.1 源码1的简答说明2.1.2 源码1 (Flex弹性布局的方向)2.1.3 源码1运行效果2.1.3.1 当direction: FlexDirection.RowReverse2.1.3.2 当direction: FlexDirect…

串口接收,不定长数据接收

###1.CUBE-MX配置串口 2.我采用串口中断接收,打开中断接口 3.时钟同样8倍频,1分频,使用内部时钟 打开串口中断 main() { __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 启用空闲中断__HAL_UART_ENABLE_IT(&huart1, UART_IT_R…

TikTok本土店vs跨境店:解读TikTok小店差异

TikTok小店的两种主要的店铺类型:本土店和跨境店,虽然这两种店铺在功能上有相似之处,但它们在运营模式、市场定位、目标受众和面临的挑战等方面存在显著的区别。 一、定义与基本特征 1. TikTok本土店 本土店指的是在特定国家或地区内经营的…

深度学习——优化算法、激活函数、归一化、正则化

文章目录 🌺深度学习面试八股汇总🌺优化算法方法梯度下降 (Gradient Descent, GD)动量法 (Momentum)AdaGrad (Adaptive Gradient Algorithm)RMSProp (Root Mean Square Propagation)Adam (Adaptive Moment Estimation)AdamW 优化算法总结 经验和实践建议…

用 Python搭建一个微型的HTTP服务器用于传输 2024/11/9

使用内置的 http.server 模块,来搭建微型服务器。 快速启动服务器http.server --- HTTP 服务器Python 3.13.0 文档 声明:文章代码部分 由 ai 生成 创建一个简单的文件共享服务器 进入 需要共享的目录 再打开cmd 输入以下代码 python -m http.server 8000 打开服务器 设置主…

虚拟机linux7.9下安装mysql

1.MySQL官网下载安装包: MySQL :: Download MySQL Community Server https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 2.解压文件: #tar xvzf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 3.移动文件&#…

Turtlebot3 buger 硬件与操作平台详细介绍

引言 TurtleBot3 有三个版本,分别是紧凑型的 Burger、功能更强的 Waffle和性能提升的 Waffle Pi,分别适用于不同的应用需求。使用 Raspberry Pi 作为主控单板计算机(SBC),而 Waffle Pi 可以使用更强大的 NVIDIA Jetson…

LabVIEW导入并显示CAD DXF文件图形 程序见附件

LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用,LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…

北斗智能定位平板终端|三防平板|北斗有源终端|北斗搜救终端

在当今快速发展的科技时代,智能设备的应用已经渗透到我们生活的方方面面,从日常娱乐到专业工作,无一不彰显着科技的魅力。特别是在高精度定位领域,随着全球卫星导航系统(GNSS)技术的不断进步,智…

40.第二阶段x86游戏实战2-初识lua

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本,公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议,现打算迁移到IS-IS路由协议,张同学正在该公司实习,为了提高实际工作的准确性和…

【Hadoop实训】Flume系统负载均衡测试

一、搭建并配置Flume机器 在master上,执行: scp -r /export/servers/flume slave1:/export/servers/scp -r /export/servers/flume slave2:/export/servers/scp /etc/profile slave1:/etc/profilescp /etc/profile slave2:/etc/profile 执行完上述指令后…

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)

前言:多线程编程已经广泛开始使用,其可以充分利用系统资源来提升效率,但是线程安全问题也随之出现,它直接影响了程序的正确性和稳定性,需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前,需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed,它就是一个绝对定位元素。​ 在…