docker gitea drone实现超轻量级CI CD实战详解

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录环境安装安装docker-ce及docker-composedocker 镜像加速安装docker-compose安装giteadocker-compose操作方式访问 Gitea安装drone+drone-runner配置应用1、创建应用2、生成新的令牌3、修改刚刚 /home/docker/drone下的 docker-compose.yml4、启动实战这是一个springboot的例子Dockerfile.drone.ymlrun.sh这是一个vue项目的例子成果展示贴几张在用的图片构建流程根据你定义的pipline执行可以结合portainer来管理你的容器

环境安装

需要如下环境

docker + docker-compose

drone + drone-runner gitea

安装docker-ce及docker-compose

卸载旧版本docker,较旧版本的Docker被称为docker或docker-engine。如果已安装这些,请卸载它们以及相关的依赖项。

sudo yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

1、安装所需的包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、使用以下命令设置稳定存储库。

sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装最新版本的Docker CE和containerd

sudo yum -y install docker-ce docker-ce-cli containerd.io

4、常用命令

systemctl start docker # 开启docker systemctl stop docker # 关闭docker systemctl status docker # 检查docker systemctl enable docker # 设置开机自启动

docker 镜像加速

对于使用systemctl的系统,请在/etc/docker/daemon.json中写入如下内容

{“registry-mirrors”:[“https://registry.docker-cn.com”]}

之后重启服务:

$ sudo systemctl daemon-reload $ sudo systemctl restart docker

安装docker-compose

1、在官方文档对比docker版本下载合适的docker-compose包

https://docs.docker.com/compose/install/

https://github.com/docker/compose/releases

2、下载安装包

sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

将1.24.1换成你要安装的版本,我安装的是1.25.1,也可以选择自己喜欢的版本

3、对二进制文件应用可执行权限

sudo chmod +x /usr/local/bin/docker-compose

4、测试安装

docker-compose –version #成功时回显示版本号。 docker-compose version 1.25.1, build a82fef07

安装gitea

创建目录 /home/docker/gitea,创建文件 docker-compose.yml 内容如下

version: “3” networks: gitea: external: false services: server: image: gitea/gitea:latest # 直接装最新版就好了,没啥好选的,随意 container_name: gitea environment: – USER_UID=1000 – USER_GID=1000 restart: always networks: – gitea volumes: – ./data:/data # /home/data可以替换成你想要的挂载目录 – /etc/timezone:/etc/timezone:ro – /etc/localtime:/etc/localtime:ro ports: – “3000:3000” # 可以替换成你想要的端口 – “8222:22” # 8222可以替换成22

docker-compose操作方式

docker-compose up -d 后台启动 Gitea docker-compose down docker-compose logs docker-compose ps 将显示 Gitea 是否正确启动

访问 Gitea

访问:http://server-ip:3000 会进入初始化安装界面,按实际情况配置即可,端口号不用变,URL换成宿主机地址或者域名

修改完后,点击“立即安装”,完成初始化

安装drone+drone-runner

创建目录 /home/docker/drone,创建文件 docker-compose.yml 内容如下

version: 3 services: drone-server: restart: always image: drone/drone:2 ports: – “9999:80” volumes: – ./:/var/lib/drone/ – ./data:/data/ environment: – DRONE_GITEA_SERVER=http://xxxxxxxxx:3000/ # Gitea访问地址 – DRONE_GITEA_CLIENT_ID=xxxxxxxxx # 应用ID,下一步会获取 – DRONE_GITEA_CLIENT_SECRET=xxxxxxxxx # 应用密钥,下一步会获取 – DRONE_SERVER_HOST=xxxxxxxxx:9999 – DRONE_SERVER_PROTO=http # 支持http, https – DRONE_RPC_SECRET=xxxxxxxxx # 通信密钥,下一步会获取 – DRONE_GIT_ALWAYS_AUTH=true – DRONE_GIT_USERNAME=xxxxxxxxx # git用户名 – DRONE_GIT_PASSWORD=xxxxxxxxx # git密码 – DRONE_USER_CREATE=username:xxxxxxxxx,admin:true # 管理员用户名,开启管理员账户 drone-runner-docker: restart: always image: drone/drone-runner-docker:1 ports: – “10000:3000” volumes: – /var/run/docker.sock:/var/run/docker.sock environment: – DRONE_RPC_PROTO=http # 支持http, https – DRONE_RPC_HOST=drone-server – DRONE_RPC_SECRET=xxxxxxxxx # 通信密钥,下一步会获取 – DRONE_RUNNER_NAME=drone-runner-docker – DRONE_RUNNER_CAPACITY=2

创建文件好后,先不启动,去Gitea配置获取应用ID和密钥

配置应用

进入Gitea,点击头像-设置-应用

1、创建应用

应用名称 drone

重定向 URI http://xxxxxxxxxx:9999/login 就是drone入口地址

创建好后,会获取ClientID和ClientSecret

2、生成新的令牌

令牌名称 drone

创建好后,会获取令牌

3、修改刚刚 /home/docker/drone下的 docker-compose.yml

应用ID、应用密钥 修改为刚刚获取的 ClientID和ClientSecret

通信密钥 修改为刚刚获取的 令牌

4、启动

进入 /home/docker/drone 执行 docker-compose up -d

实战

这是一个springboot的例子

在项目pom.xml同级目录下添加如下文件

Dockerfile

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

.drone.yml

kind: pipeline type: docker name: game steps: – name: build-jar # 流水线名称 image: maven:3.8.5-openjdk-8 # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 – name: maven-cache path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载 – name: maven-build path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 commands: # 定义在Docker容器中执行的shell命令 – mvn clean package -DskipTests=true # 应用打包命 – cp target/game.jar /app/build/game.jar – cp Dockerfile /app/build/ – cp run.sh /app/build/ – name: build-docker # 流水线名称 image: plugins/docker volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 – name: maven-build path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 – name: docker path: /var/run/docker.sock # 挂载宿主机的docker settings: dockerfile: /app/build/Dockerfile commands: # 定义在Docker容器中执行的shell命令 – cd /app/build – chmod +x run.sh – sh run.sh – docker ps volumes: # 定义流水线挂载目录,用于共享数据 – name: maven-build host: path: /home/docker/drone/maven/build # 从宿主机中挂载的目录 – name: maven-cache host: path: /home/docker/drone/maven/cache – name: docker host: path: /var/run/docker.sock

run.sh

#!/bin/sh # 定义应用组名 group_name=nnzmr # 定义应用名称 app_name=game # 定义应用版本 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 8080:8080 –name ${app_name} -e TZ=”Asia/Shanghai” -v /etc/localtime:/etc/localtime -d ${group_name}/${app_name}:${app_version} echo —-start container—-

这是一个vue项目的例子

.drone.yml

这里有个小bug,我想把npm install的依赖保存下来,下次用,但是好像没有成功,我再弄弄看

kind: pipeline type: docker name: search steps: – name: prepare # 流水线名称 image: node:14-alpine # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 – name: node-model path: /app/model # 将maven下载依赖的目录挂载出来,防止重复下载 – name: node-cache path: /app/cache # 将maven下载依赖的目录挂载出来,防止重复下载 – name: node-build path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 commands: # 定义在Docker容器中执行的shell命令 – npm config set prefix “/app/model” npm config set cache “/app/cache” – npm config set registry https://registry.npm.taobao.org – npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass – npm install – npm run build – cp -r dist /app/build/ – cp Dockerfile /app/build/ – cp default.conf /app/build/ – cp run.sh /app/build/ – name: build # 流水线名称 image: plugins/docker volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 – name: node-build path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 – name: docker path: /var/run/docker.sock # 挂载宿主机的docker settings: dockerfile: /app/build/Dockerfile commands: # 定义在Docker容器中执行的shell命令 – cd /app/build – chmod +x run.sh – sh run.sh – docker ps volumes: # 定义流水线挂载目录,用于共享数据 – name: node-build host: path: /home/docker/drone/node/build # 从宿主机中挂载的目录 – name: node-model host: path: /home/docker/drone/node/model – name: node-cache host: path: /home/docker/drone/node/cache – name: docker host: path: /var/run/docker.sock

Dockerfile

# 设置基础镜像 FROM nginx #设置CTS时区 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai >/etc/timezone # 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面 COPY ./dist /usr/share/nginx/html/ #用本地的 default.conf 配置来替换nginx镜像里的默认配置 COPY default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD [“nginx”,”-g”,”daemon off;”]

run.sh

#!/bin/sh # 定义应用组名 group_name=nnzmr # 定义应用名称 app_name=search # 定义应用版本 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 8081:80 –name ${app_name} -e TZ=”Asia/Shanghai” -v /etc/localtime:/etc/localtime -d ${group_name}/${app_name}:${app_version} echo —-start container—-

default.conf

server { listen 80; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

成果展示

贴几张在用的图片

docker gitea drone实现超轻量级CI CD实战详解插图docker gitea drone实现超轻量级CI CD实战详解插图1docker gitea drone实现超轻量级CI CD实战详解插图2docker gitea drone实现超轻量级CI CD实战详解插图3

构建流程根据你定义的pipline执行

docker gitea drone实现超轻量级CI CD实战详解插图4

可以结合portainer来管理你的容器

docker gitea drone实现超轻量级CI CD实战详解插图5

以上就是docker gitea drone实现超轻量级CI CD实战详解的详细内容,更多关于docker gitea drone轻量级CI CD的资料请关注其它相关文章!

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容