Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

配置 Gitea 服务器来管理项目版本

本文的IP地址是为了方便理解随便打的,不要乱点

首先使用 docker 搭建 Gitea 服务器,用于管理代码版本,数据库选择mysql

Gitea 服务器的 docker-compose.yml 配置文件如下:

version: "3"services:server:image: gitea/gitea:1.19.3container_name: giteaenvironment:- USER_UID=1000- USER_GID=1000- GITEA__database__DB_TYPE=mysql- GITEA__database__HOST=123.45.54.123:3306- GITEA__database__NAME=gitea- GITEA__database__USER=root- GITEA__database__PASSWD=123456restart: alwaysvolumes:- ./gitea:/data- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:roports:- "3002:3000"- "2222:22"

运行前先去数据库服务器中新建一个名为 gitea 的数据库

命令:CREATE DATABASE gitea

编写完成后在当前目录下运行 docker compose up -d 即可运行 docker 容器

搭建 Drone 服务器与 Drone Runner

再使用 Docker 搭建 Drone 服务器,用于自动化部署的 CI/CD 平台

浏览器中打开上一步配置好的Gitea,点击右上角头像,点击设置,进入设置页面

点击应用选项卡,在页面底部输入应用名称(随便写一个就好,例如:Drone CI),输入重定向URI(Drone服务链接+’/login‘,如’http://123.45.54.123:3991/login‘)

点击创建应用

客户端ID即为下方配置文件的DRONE_GITEA_CLIENT_ID

客户端密钥即为下方配置文件的DRONE_RPC_SECRET

记录后点击完成即可

接着在服务器中输入

openssl rand -hex 16

生产一个密钥,记录后写到下方配置文件的DRONE_RPC_SECRET中

drone 服务器的 docker-compose.yml 配置文件如下:

version: "3"services:drone:image: drone/drone:2container_name: droneenvironment:- DRONE_GITEA_SERVER=http://123.45.54.123:3002- DRONE_GITEA_CLIENT_ID=客户端ID- DRONE_GITEA_CLIENT_SECRET=客户端密钥- DRONE_RPC_SECRET=生成的密钥- DRONE_SERVER_HOST=123.45.54.123:3991- DRONE_SERVER_PROTO=http- DRONE_USER_CREATE=username:Gitea,admin:true # 开启管理员账户restart: alwaysvolumes:- ./drone:/dataports:- 3991:80- 3992:443

其中 3002 是上一步搭建 Gitea 服务器的端口号,3991 和 3992 是新开的端口号。

编写完成后在当前目录下运行 docker compose up -d 即可运行 docker 容器

Drone Runner 相当于 Worker ,用于执行任务

drone runner的 docker-compose.yml 配置文件如下:

DRONE_RUNNER_NAME是随便起的,3993 同样是新开的端口

version: "3"services:runner:image: drone/drone-runner-docker:1container_name: runnerenvironment:- DRONE_RPC_PROTO=http- DRONE_RPC_HOST=123.45.54.123:3991  # Drone服务器的地址- DRONE_RPC_SECRET=生成的密钥,应与Drone服务器的一致- DRONE_RUNNER_CAPACITY=2- DRONE_RUNNER_NAME=my-first-runnerrestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sockports:- 3993:3000

同样编写完成后在当前目录下运行 docker compose up -d 即可运行 docker 容器

一定一定一定要注意不要乱加 ‘/’ ,不乱写 ‘http://’,不然可能踩坑,按照上方配置文件作为模板改写即可

至此,环境搭建完成,接下来用编写项目进行测试

项目测试

在代码生成器项目根目录下添加以下三个配置文件

.drone.yml

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: test_drone # 定义流水线名称steps: # 定义流水线执行步骤,这些步骤将顺序执行- name: build-jar # 流水线名称image: maven:3.8.5-openjdk-8 # 定义创建容器的Docker镜像volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置- name: maven-cachepath: /home/Gettler/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载- name: maven-buildpath: /app/build/generator # 将应用打包好的Jar和执行脚本挂载出来commands:- $MAVEN_HOME/bin/mvn -v- $MAVEN_HOME/bin/mvn clean package -DskipTests=true# 将打包后的jar包,拷贝到 /root/testDrone 目录- cp target/*.jar  /app/build/generator- cp Dockerfile /app/build/generator- cp run.sh /app/build/generator- name: build-docker # 流水线名称image: plugins/dockervolumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置- name: maven-buildpath: /app/build/generator # 将应用打包好的Jar和执行脚本挂载出来- name: dockerpath: /var/run/docker.sock # 挂载宿主机的dockersettings:dockerfile: /app/build/generator/Dockerfilecommands:- cd /app/build/generator- chmod +x run.sh- sh run.sh- docker psvolumes: # 定义流水线挂载目录,用于共享数据- name: maven-buildhost:path: /app/build/generator   #jar包目录可以修改从宿主机中挂载的目录- name: maven-cachehost:path: /home/Gettler/docker/maven/cache- name: dockerhost:path: /var/run/docker.sock

Dockerfile

#指定基础镜像(一般指定程序所依赖的环境)
#本例子是构建SpringBoot所以我指定的jdk环境变量
FROM openjdk:8#将./hello-world.jar添加到容器的/opt目录中
COPY ./*.jar /opt#指定dockerfile的命令在哪个目录下执行
WORKDIR /opt#指定容器和外界交互的端口
EXPOSE 80#容器运行后执行的命令(该命令在WORKDIR指定的工作目录下执行)
#注意:多个CMD指令只有最后一个会生效
CMD java -jar *.jar#在构建镜像时执行的命令
#我这边用它来打印java的环境变量
RUN java -version#添加该镜像的元数据
LABEL version="1.0" description="代码生成器服务" by="Gettler"

run.sh

#!/bin/sh
# 定义应用组名
group_name='power'
# 定义应用名称
app_name='generator'
# 定义应用版本
app_version='latest'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 4001:80 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

然后新建gitea仓库,将其push到远程仓库后,然后以Gitea用户(管理员身份)进入Drone服务 http://123.45.54.123:3991/,点击continue即可关联到gitea服务授权登录。

登录后点击右上角SYNC按钮同步仓库,看到刚刚新建的仓库后点进去,激活,然后点击Setting页面,勾选trust

image-20231107102207218

勾选trust后,每次代码push都可以自动进行版本发布

也可以手动发布,点击右上角new build按钮,选择代码分支,即可进行部署。

点击对应build可以查看日志,出现绿色对勾后即为发布成功

image-20231107102348398

再附上一手前端项目配置

Vue 项目配置

.drone.yml

kind: pipeline # 定义一个管道
type: docker # 当前管道的类型
name: test # 当前管道的名称steps: # 定义管道的执行步骤- name: deploy # 步骤名称image: node:18 # 当前步骤使用的镜像,我是node18,也可以修改其他镜像settings:mirror: # Docker镜像加速地址depends_on: [clone] # 依赖的步骤volumes: # 挂载数据卷(此为容器内的目录)- name: node_modules # 数据卷名称path: /drone/src/node_modules # 容器内目录 绝对路径- name: deploy_pathpath: /app/build/frontcommands: # 当前步骤执行的命令- pwd # 查看当前目录- npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像- yarn # 安装node_modules包(我的项目用yarn,看项目也可使用其他命令)- yarn build # 执行编译(我的项目用yarn,看项目也可使用其他命令)- cp -r ./dist/* /app/build/front/html/- cp Dockerfile /app/build/front- cp default.conf /app/build/front- cp run.sh /app/build/front- name: build # 流水线名称image: plugins/dockerdepends_on: [deploy]volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置- name: deploy_pathpath: /app/build/front # 将应用打包好的Jar和执行脚本挂载出来- name: dockerpath: /var/run/docker.sock # 挂载宿主机的dockersettings:mirror: # Docker镜像加速地址dockerfile: /app/build/front/Dockerfilecommands:- cd /app/build/front- chmod +x run.sh- sh run.sh- docker psvolumes: # 声明数据卷(此为服务器中的实际目录)- name: node_modules # 数据卷名称host:path: /home/Gettler/docker/node_modules- name: deploy_pathhost: path: /app/build/front- name: dockerhost:path: /var/run/docker.sock

记得修改Docker镜像加速地址!

Dockerfile

# 设置基础镜像
FROM nginx:latest# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY html /usr/share/nginx/html
# 用本地的 default.conf 配置来替换nginx镜像里的默认配置
COPY default.conf /etc/nginx/conf.d/default.confEXPOSE 80LABEL version="1.0" description="前端服务" by="Gettler"

run.sh

#!/bin/sh
# 定义应用组名
group_name='power'
# 定义应用名称
app_name='front'
# 定义应用版本
app_version='latest'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 3995:80 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

img

若要修改 docker-compose.yml 文件,修改后再次输入 docker compose up -d 即可重新加载有变化的容器,过程中会删除之前的容器。而 docker compose up -d --no-create 命令可以在存在yaml文件中描述的容器的情况下启动容器,不会重建容器。

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

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

相关文章

Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)

以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果: 1.实现两数相加求和 2.可以通过curl实时调用,参数以GET方式提供,并得到结果。(类似调用函数) 一、实现思路 需要准备如下的…

分布式websocket IM聊天系统相关问题问答【第九期】

前言 上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。 本期对应视频 目前已经写的文章有。并且有对应视频版本。 git项目地…

FPGA中跨时钟域传数据——(1)单bit脉冲

FPGA中跨时钟域传数据——(1)单bit脉冲 亚稳态模型由快时钟传到慢时钟由慢时钟传到快时钟 亚稳态模型 必须在建立时间和保持时间内,数据不变化,否则会产生亚稳态。 由快时钟传到慢时钟 在快时钟里面进行数据展宽(…

牛客周赛 Round 20 解题报告 | 珂学家 | 状压DP/矩阵幂优化 + 前缀和的前缀和

前言 整体评价 这场比赛很特别,是牛客周赛的第20场,后两题难度直线飙升了。 前四题相对简单,E题是道状压题,历来状压题都难,F题压轴难题了,感觉学到了不少。 A. 赝品 先求的最大值 然后统计非最大值的个…

位置无关码PIC详解:原理、动态链接库、代码重定位

静态链接库将代码和数据在编译时整合到可执行文件,使程序独立运行。动态链接库允许在程序运行时加载,而不是在编译时将库的代码和数据静态地合并到可执行文件中。这允许多个程序共享同一份库,减小程序体积。由于动态链接库在编译时并未确定其…

【Electron】Electron是什么

1. Electron是什么 Electron是使用JavaScript、HTML和CSS构建跨平台(Windows、MacOs、Linux)的桌面应用。Electron其实就是一个可以展示网页内容的壳子,相当于一个独立的浏览器,可以提供给你一些接口,去调用系统的资源…

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能 模型驱动应用使用插件实现跳转业务流程阶段跳转功能 在实际操作中总会遇到使用业务流程的需求,那么如何使用plugin实现跳转阶段的功能呢 需求背景是主表上有业务流程&#x…

在Python环境中运行R语言的配环境实用教程

前情提要 在做一些生物信息与医学统计的工作,本来偷懒希望只靠python完成的,结果还是需要用R语言,倒腾了一会儿,调成功了,就记录一下这个过程。 我的环境: win10, pycharm, R-4.3.2 首先,我们…

Redis 面试题 | 05.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

muduo网络库剖析——线程Thread类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

OpenCV书签 #差值哈希算法的原理与相似图片搜索实验

1. 介绍 差值哈希算法(Difference Hash Algorithm,简称dHash) 是哈希算法的一种,主要可以用来做以图搜索/相似图片的搜索工作。 2. 原理 差值哈希算法通过计算相邻像素的差异来生成哈希,即通过缩小图像的每个像素与平…

高效构建Java应用:Maven的使用总结

一、Maven简介和快速入门 1.1 Maven介绍 Maven-Introduction Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven…

excel(wps)之vlookup函数合并sheet数据

VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应…

DEB方式安装elastic search7以及使用

参考:https://www.cnblogs.com/anech/p/15957607.html 1、安装elastic search7 #手动下载安装 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.1-amd64.deb wget https://artifacts.elastic.co/downloads/elasticsearch/elastics…

深度学习(4)--Keras安装

目录 Keras安装: 1.1.安装CUDA/cuDDN工具包 1.1.1.安装前准备 1.1.2.安装CUDA 1.1.3.安装cuDDN 1.2.安装Anaconda 1.3.安装tensorflow框架 1.3.1.使用cmd安装 1.3.2.使用Anaconda Prompt安装 1.4.安装Keras框架 1.5.打开jupyter notebook,执行import调用 Keras…

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器 点击button按钮触发事件显示月份与获取的时间 Button button3 (Button) findComponentById(ResourceTable.Id_button3);button3.setClickedListener(new Component.ClickedListener() {Overridepublic void onClick(Compon…

基于springboot酒店预订系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:AdminLTEjQueryvue.jselementuijsp 服务端技术:springbootmybatis 本系统功能包括: 一、…

实验:MySQL 客户端SocketTimeout 抓包分析

实验准备 服务端环境准备 服务器信息 阿里云 99 大洋白嫖机 $ cat /proc/version Linux version 5.15.0-83-generic (builddlcy02-amd64-027) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #92-Ubuntu SMP Mon Aug 14 09:30:42 UT…

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶(Full Self Driver)技术结构图,图中把自动驾驶模型拆分出分成了几个依赖的模块: 技术底座:自动标注技术处理大量数据,仿真技术创造图片数据,大数据引擎进不断地更新&…

UML中的实现关系

在UML(统一建模语言)中,“实现”关系是指一个类(实现类)实现一个接口或抽象类的方法的情况。这种关系通常用于指定类如何实现某个特定的接口规范。 UML中的实现关系 在UML类图中,实现关系用一条带有空心箭…