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

news/2024/11/15 3:37:44/

本文介绍了如何为 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:2ports:- 8280:80- 443:443volumes:- /var/lib/drone:/data- /root/.ssh:/root/.ssh/restart: alwaysenvironment:- 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:latestrestart: alwaysdepends_on:- drone-servervolumes:- /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-publishsteps:
# 加载依赖
- name: restore-cacheimage: drillster/drone-volume-cachevolumes:- name: cachepath: /drone/src/node_modulessettings:restore: true- name: build-projectimage: node:lts-slimprivileged: truevolumes: #将容器内目录挂载到宿主机- name: cachepath: /drone/src/node_modules- name: build-htmlpath: /htmlcommands:- |if [ -f /html/yarn.lock ]; thencp -f /html/yarn.lock ./yarn installelseyarn installfi- npm run build- |if [ "$(ls -A /html)" ]; thenrm -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-scpsettings:# 服务器地址, 账号, 密码host: # 不使用secrets, 明文from_secret: '${DRONE_COMMIT_BRANCH}_host'username: rootpassword:from_secret: '${DRONE_COMMIT_BRANCH}_psd'# 需要上传的文件 「需要相对路径, 如果用绝对路径会整条路径打包上传」source: ./front-web.tar.gz# 上传的目录文件夹target: /root/htmlport: 22command_timeout: 2mwhen:branch:- dev- test- name: ssh-commandsimage: appleboy/drone-sshsettings:host:from_secret: '${DRONE_COMMIT_BRANCH}_host'username: rootpassword:# 注意在 drone 页面的 Secrets 添加对应配置from_secret: '${DRONE_COMMIT_BRANCH}_psd'port: 22script:- |#判断环境变量ENV="dev"TAG="3.0"if [ "${DRONE_COMMIT_BRANCH}" = "release" ]; thenENV="pre"TAG="1.0"mv ./front-web.tar.gz root/html/elif [ "${DRONE_COMMIT_BRANCH}" = "test1" ]; thenENV="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 $TAGvolumes: # 定义流水线挂载目录,用于共享数据- name: build-htmlhost:path: /root/drone/html # 从宿主机中挂载的目录- name: cachehost:path: /root/drone/src/node_modulestrigger:branch:- dev- test- releaseevent:- push- pull_request

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

build.sh脚本

#!/bin/bashecho "接受参数:$1,$2,$3"
project=$1
environment=$2
suffix=$3rm 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官方文档结合自己公司项目整理而成。


http://www.ppmy.cn/news/1546763.html

相关文章

golang 实现比特币内核:从公钥创建wallet地址

作为比特币用户,我们总是需要发送或接收比特币,这就需要让别人知道你的钱包地址。由于钱包地址需要人类读取,之前我们使用的编码方案产生的是二进制结果,因此我们需要一种新的方案,以人类友好的方式创建钱包地址。 钱包地址实际上是从公钥生成的,并且需要满足以下要求:…

stable-diffusion-3 ,每天免费试用

https://huggingface.co/spaces/stabilityai/stable-diffusion-3-mediumhttps://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium官方space,童叟无欺,科学试用。 an image of a girl with white hair, in the style of ross tran, light …

随堂测微信小程序ssm+论文源码调试讲解

2 关键技术简介 2.1 微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验。 小程序的主要开发语言是JavaScript,它与…

重构代码之替换参数为显式方法

替换参数为显式方法 是一种重构技术,旨在通过替换方法参数来创建更清晰、更具可读性的代码。当一个方法包含标志性参数时,该方法的行为可能会根据参数的不同而发生改变。这样会导致方法的调用方式不够明确,因为调用者不一定能直观地知道每个参…

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责:每个类应该有一个明确的职责,避免将多个责任混合在一起。降低耦合:通过将不同的职责分开,可以降低类之间的耦合度,提高系统的灵活性。易于维护:当…

Oracle 高水位线和低-高水位线(High Water Mark Low High Water Mark)

在Oracle的逻辑存储结构中(表空间-段-区-块),数据是存在数据段中的,通常一个表就是一个数据段,而段最终又由许多数据块组成。当数据存入数据块时,需要对块进行格式化,高水位线(High …

【AI日报】2024年11月13号

我回来啦!!发现自己好久不发文章了。 在某头部AI公众号实习的过程中,学到太多太多了,也感谢某位大神的指点,也衷心祝愿他的IP可以越做越好 之后因为时间关系,可能要自己出来单干了。 在实习过程中学到的…

大数据相关技术的基本概念?

一、Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Distributed File System)&#xff0…