目录
- 环境安装
- 安装docker-ce及docker-compose
- docker 镜像加速
- 安装docker-compose
- 安装gitea
- docker-compose操作方式
- 访问 Gitea
- 安装drone+drone-runner
- 配置应用
- 1、创建应用
- 2、生成新的令牌
- 3、修改刚刚 /home/docker/drone下的 docker-compose.yml
- 4、启动
- 实战
- 这是一个springboot的例子
- Dockerfile
- .drone.yml
- run.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;
}
}
成果展示
贴几张在用的图片
构建流程根据你定义的pipline执行
可以结合portainer来管理你的容器
以上就是docker gitea drone实现超轻量级CI CD实战详解的详细内容,更多关于docker gitea drone轻量级CI CD的资料请关注悠久资源网其它相关文章!