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

这篇具有很好参考价值的文章主要介绍了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.3
        container_name: gitea
        environment:
            - 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=123456
        restart: always
        volumes:
            - ./gitea:/data
            - /etc/timezone:/etc/timezone:ro
            - /etc/localtime:/etc/localtime:ro
        ports:
            - "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:2
        container_name: drone
        environment:
            - 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: always
        volumes:
            - ./drone:/data
        ports:
            - 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:1
        container_name: runner
        environment:
            - 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-runner
        restart: always
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        ports:
            - 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-cache
        path: /home/Gettler/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /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/docker
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-build
        path: /app/build/generator # 将应用打包好的Jar和执行脚本挂载出来
      - name: docker
        path: /var/run/docker.sock # 挂载宿主机的docker
    settings:
      dockerfile: /app/build/generator/Dockerfile
    commands:
        - cd /app/build/generator
        - chmod +x run.sh
        - sh run.sh
        - docker ps

volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /app/build/generator   #jar包目录可以修改从宿主机中挂载的目录
  - name: maven-cache
    host:
      path: /home/Gettler/docker/maven/cache
  - name: docker
    host:
      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

Docker 配置 Gitea + Drone 搭建 CI/CD 平台,实战,Linux,docker,gitea,ci/cd

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

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

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

Docker 配置 Gitea + Drone 搭建 CI/CD 平台,实战,Linux,docker,gitea,ci/cd

再附上一手前端项目配置

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_path
        path: /app/build/front
    commands: # 当前步骤执行的命令
      - 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/docker
    depends_on: [deploy]
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: deploy_path
        path: /app/build/front # 将应用打包好的Jar和执行脚本挂载出来
      - name: docker
        path: /var/run/docker.sock # 挂载宿主机的docker
    settings:
      mirror: # Docker镜像加速地址
      dockerfile: /app/build/front/Dockerfile
    commands:
        - cd /app/build/front
        - chmod +x run.sh
        - sh run.sh
        - docker ps

volumes: # 声明数据卷(此为服务器中的实际目录)
  - name: node_modules # 数据卷名称
    host:
      path: /home/Gettler/docker/node_modules
  - name: deploy_path
    host: 
      path: /app/build/front
  - name: docker
    host:
      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.conf

EXPOSE 80

LABEL 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----'

Docker 配置 Gitea + Drone 搭建 CI/CD 平台,实战,Linux,docker,gitea,ci/cd

若要修改 docker-compose.yml 文件,修改后再次输入 docker compose up -d 即可重新加载有变化的容器,过程中会删除之前的容器。而 docker compose up -d --no-create 命令可以在存在yaml文件中描述的容器的情况下启动容器,不会重建容器。文章来源地址https://www.toymoban.com/news/detail-817734.html

到了这里,关于Docker 配置 Gitea + Drone 搭建 CI/CD 平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

            Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 下载Linux版本的jdk,解压到/usr/local目录 进入 /etc/profile 目录,设置环境变量 刷新配置文件,输入

    2024年02月14日
    浏览(39)
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

    CI,Continuous Integration,持续集成。即将持续不断更新的代码经构建、测试后也持续不断的集成到项目主干分支。 CD,包含两层含义:Continuous Delivery,持续交付,和 Continuous Deployment,持续 部署。 持续交付:是持续集成的后续步骤,持续频繁地将软件的新版本交付到类生产环境

    2024年02月14日
    浏览(38)
  • CI/CD流水线实战

    不知道为什么,现在什么技术都想学,因为我觉得我遇到了技术的壁垒,大的项目接触不到,做的项目一个字 辣* 。所以,整个人心浮气躁,我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末,我再次宅在了家里,学习了一下 CICD 。 先分享一下 shigen 的学习视频资源

    2024年02月12日
    浏览(52)
  • docker 镜像制作 与 CI/CD

    目录 镜像到底是什么? 使用docker创建镜像 步骤: 1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件) 2、编辑requirements.txt文件  3、编辑app.py文件,我们的程序文件 4、生成镜像文件 5、查看生成的镜像 6、下载启动redis镜像 7、使用生成的镜像生成容器  8、​​​​查看实

    2024年02月11日
    浏览(36)
  • CI/CD—Docker初入门学习

    Docker 是基于 Go 语言的开源应用容器虚拟化技术。Docker的主要目标是build、ship and run any app,anywhere,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的一次封装、到处运行(来源于官网)。这里的应用组件,即可以是一个Web应用,也可以是

    2024年02月14日
    浏览(47)
  • CI/CD—Docker中深入学习

    什么是容器数据卷: 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久 化。MySQL容器删除了,删容器跑路!需求:MySQL数据可以存储在本地 容器之间可以有一个数据共享的技术!Docker 容器中产生的数据,同

    2024年02月14日
    浏览(33)
  • 14. Docker中实现CI和CD

    目录 1、前言 2、什么是CI/CD 3、部署Jenkins 3.1、下载Jenkins 3.2、启动Jenkins 3.3、访问Jenkins页面 4、Jenkins部署一个应用 5、Jenkins实现Docker应用的持续集成和部署 5.1、创建Dockerfile 5.2、集成Jenkins和Docker 6、小结 持续集成(CI/CD)是一种软件开发的经验总结。它用于帮助开发团队和交付

    2024年02月11日
    浏览(35)
  • 【持续集成CI/持续部署CD】六、Docker Compose构建CI全流程

    1. 创建宿主机挂载目录并赋权 2. 新建 Jenkins+Sonar 安装脚本 jenkins-compose.yml 脚本,这里的 Jenkins 使用的是 Docker 官方推荐的镜像 jenkinsci/blueocean,在实际使用中发现,即使不修改插件下载地址,也可以下载插件,所以比较推荐这个镜像。 3. 在 jenkins-compose.yml 文件所在目录下执行

    2024年02月10日
    浏览(43)
  • [Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

            前面的架构存在的问题是, 若有多个目标服务器都需要使用该镜像,那么每个目标服务 器都需要在本地构建镜像,形成系统资源浪费。 若能够在 Jenkins 中将 镜像构建好并推送到 Harbor 镜像中心 ,那么无论有多少目标服务器需要该镜像,都只需要从 Harbor 拉取即可

    2024年02月14日
    浏览(43)
  • 【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是 持续集成 及 持续交付、部署 。在此,我们在京东云上以一个案例简单实践下 CI 流程。 1.1 CI/CD 持续集成 (Continuous Integration,

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包