暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Fastapi框架-(17)基于docker下的小公司Gogs+Drone 纯个人实践笔记(埋坑笔记)

小儿来一壶枸杞酒泡茶 2021-08-19
1155

1、为啥选择这个组合来做CI(可持续集成)

gogs - 对机器硬件要求的成本低

drone 配置简单易懂(主要还是我不是专业运维,还不会Jenkins 哈哈)

2、使用docker的方式-gogs 安装

基于之前我的已经安装好docker,所以后续相关的服务的搭建也为了快速的搭建,所以直接的使用docker进行安装部署是最方便快捷地。

2.1:gogs镜像拉取

$ docker pull gogs/gogs
Using default tag: latest
复制代码

2.2:数据挂载和端口映射并启动

(前台)$ docker run --name=gogs -p 10022:22 -p 2080:3000 -v D:/data/gogs:/data gogs/gogs
(后台)$ docker run --name=gogs -p 10022:22 -p 2080:3000 -v D:/data/gogs:/data -d gogs/gogs
复制代码

停止的情况重启:

docker start gogs
复制代码

2.3:访问127.0.0.1:2080进行配置安装

2.4:启动用于代码管理pg数据库容器

启动一个新的数据库容器对象:

$ docker run --name gogs_pg -v D:/data/gogs_pg/pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5566:5432 -d postgres:9.4
复制代码

链接测试新的数据库容器对象:

2.4:gogs数据库配置运行信息配置

首先新创建一个数据库:

再配置链接数据库信息:

2.5:gogs应用信息配置和其他设置

2.5立即安装(错误解决问题-数据库主机地址问题)

查阅官方字典信息:

(默认同属于启动的默认网桥中)查看容器对应的ip信息:

修改数据库主机地址:

然后正常安装了且可以需要登入:

此时可以进入到我们的仓库:

3 安装客户端及创建仓库测试验证

3.1 git客户端安装

windows下git服务端安装和下载安装git客户端用户本地进行相关的仓库的操作

服务端git 下载地址:git-scm.com/downloads

tortoisegit 下载地址: tortoisegit.org/download/

Sourcetree 下载地址:www.sourcetreeapp.com/ 使用介绍:www.cnblogs.com/tian-xie/p/… 或者直接使用腾讯管家安装

git安装:(参考:blog.csdn.net/qq_41868500…

1.双击安装程序“Gitxxxxx.exe”:

2.点击“Next”,显示如下:

3.点击“Next”,显示如下

选择说明:

说明:

(1)图标组件(Addition icons) : 选择是否创建桌面快捷方式。

(2)桌面浏览(Windows Explorer integration) : 浏览源码的方法,使用bash 或者 使用Git GUI工具。

(3)关联配置文件 : 是否关联 git 配置文件, 该配置文件主要显示文本编辑器的样式。

(4)关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件。

(5)使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码。
复制代码

4.点击“Next”,显示如下

5.点击“Next”,显示截图如下:

设置环境变量

选择使用什么样的命令行工具,一般情况下我们默认使用Git Bash即可:

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2555164cb1fc4682aefe638408f12307~tplv-k3u1fbpfcp-watermark.image)
(1)Git自带:使用Git自带的Git Bash命令行工具。

(2)系统自带CMD:使用Windows系统的命令行工具。

(3)二者都有:上面二者同时配置,但是注意,这样会将windows中的find.exe 和 sort.exe工具覆盖,如果不懂这些尽量不要选择。
复制代码

6.选择之后,点击“Next”,显示截图如下:

7.选择之后,继续点击“Next”,显示如下:

选择提交的时候换行格式

(1)检查出windows格式转换为unix格式:将windows格式的换行转为unix格式的换行再进行提交。

(2)检查出原来格式转为unix格式:不管什么格式的,一律转为unix格式的换行再进行提交。

(3)不进行格式转换 : 不进行转换,检查出什么,就提交什么。
复制代码

8.选择之后,点击“Next”,显示截图如下:

9.选择之后,点击“Next”,显示截图如下:

10.安装完成之后,显示截图如下:、

客户端安装参考:blog.csdn.net/qq_39505065…

查看右键菜单信息:

3.2 仓库测验

1)创建组织

2)创建仓库

3)拉取仓库

4)克隆检测仓库

提示错误:

原因是因为我电脑开了这个走了代理问题!!!!:

关闭下了之后:

5)提交代码验证

提交一个本地版本:

push推送到远程仓库:

输入用户名信息:

输入错误的密码和用户之后的解决方案

mayn@DESKTOP-16CKEN1 MINGW64 d/code/gitpro/mycode (master)
$ git push -u origin master
libpng warning: iCCP: cHRM chunk does not match sRGB
fatal: Authentication failed for 'http://192.168.219.130:10080/mycode/test.git/'

mayn@DESKTOP-16CKEN1 MINGW64 d/code/gitpro/mycode (master)
$ git remote add origin http://192.168.219.130:10080/mycode/test.git
fatal: remote origin already exists.

复制代码

mayn@DESKTOP-16CKEN1 MINGW64 d/code/gitpro/mycode (master)
$ git push -u origin master
libpng warning: iCCP: cHRM chunk does not match sRGB
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 205 bytes | 205.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To http://192.168.219.130:10080/mycode/test.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

mayn@DESKTOP-16CKEN1 MINGW64 d/code/gitpro/mycode (master)

复制代码

提示推送远程仓库成功:

查看仓库推送记录信息:

从上面操作可看,我们的仓库基本搭建完成了,剩下就如何进行CI的操作处理!

4 drone的安装(失败案例)

4.1 Drone CI 简介

Drone 主要是一个持续集成和持续交付的平台,相对于Jenkins来说比较的轻量,结合docker可以完美的紧张组合,再加上我们的Gogs来实现持续集成相对需求比较少的小公司来说是比较完美的。

  • Drone和gitlab的一样引入了Pipelnes的概念,管道可帮助我们自动化软件交付过程中的步骤,例如启动代码构建,运行自动化测试以及部署到暂存或生产环境。

  • 相关的配置信息可以通过将.drone.yml文件放在git信息库的根目录中来配置管道。

  • 多个step来完成一系列的步骤脚本指令,来执行对应的项目各个阶段需要处理的事项

4.2 通过docker-compose来启动Drone

对应的配置文件信息:

version: '3'
services:
drone-server:
image: drone/drone:latest
ports:
- 10081:80
volumes:
- D:/data/fastapi_zyx_drone/drone:/var/lib/drone/
- D:/data/fastapi_zyx_drone/run/docker.sock:/var/run/docker.sock
restart: always
environment:
- DRONE_OPEN=true
- DRONE_SERVER_HOST=127.0.0.1:3080
- DRONE_SERVER_PROTO=http
- DRONE_LOGS_TRACE=true
- DRONE_LOGS_DEBUG=true
- DRONE_GOGS=true
- DRONE_GOGS_SERVER=127.0.0.1:2080
- DRONE_PROVIDER=gogs
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
- DRONE_DATABASE_DRIVER=sqlite3
- DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
drone-agent:
image: drone/agent:latest
depends_on:
- drone-server
volumes:
- D:/data/fastapi_zyx_drone/run/docker.sock:/var/run/docker.sock
restart: always
environment:
- DRONE_RPC_SERVER=127.0.0.1:3080
- DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
- DRONE_LOGS_TRACE=true
- DRONE_LOGS_DEBUG=true
复制代码

启动(-f 指定文件):

PS D:\code\python\local_python\docker_fastapi> docker-compose  -f .\drone_docker_compose.yml up -d

复制代码

启动成功,但是无法访问:

查看启动的容器:

查看容器日志信息:

修改了gogs的地址:

再启动:

这次莫名其妙没可以了!!!!奇葩奇葩!!!!

4.3 访问drone的入口地址:

PS:注意访问的映射端口的地址http://127.0.0.1:10081:

ps:下面输GOGS的管理员密码信息

告警提示:

修改上次一的配置在启动!!!!

多次尝试删除(好像确定了就是必须使用这个):

localhost:2080
复制代码

修改地址添加http:

综上问题,看来还是木有办法!尝试切换多次!也无法正常进行登入!

5 一键部署gogs+drone安装(尝试)

把gogs的服务也拉倒docker-compose进行启动:

5.1 重新编排docker-compose完整的配置信息:

version: '3'
services:
gogs:
image: gogs/gogs:latest
container_name: gogs
ports:
# 安装配置gogs需要访问3000的端口
- "3000:3000"
- "10022:22"
volumes:
#- D:/data/fastapi_drone/gogs/app.ini:/data/gogs/conf/app.ini
- D:/data/fastapi_drone/gogs:/data

drone-server:
image: drone/drone:latest
container_name: drone-server
ports:
# 访问drone的时候需要访问的8080的端口
- "8080:80"
- "8443:443"
volumes:
# 挂载外部的目录
- D:/data/fastapi_drone/drone:/var/lib/drone/
- D:/data/fastapi_drone/drone/run/docker.sock:/var/run/docker.sock
restart: always
environment:

- DRONE_DEBUG=true

# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
- # 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
- DRONE_OPEN=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_SERVER_HOST=drone-server
- DRONE_GIT_ALWAYS_AUTH=false
# 开启 gogs
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
# gogs 服务地址,使用容器名 + 端口号---注意点这里需有前面的HTTP
- DRONE_GOGS_SERVER=http://gogs:3000
# drone 的提供者,本项目中为 gogs服务
- DRONE_PROVIDER=gogs
# 配置 drone 数据库
- DRONE_DATABASE_DRIVER=sqlite3
# 配置 drone 数据库文件
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
# 协议,可选 http、https
- DRONE_SERVER_PROTO=http
# 秘钥信息设置,主要是用在 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
# 秘钥信息设置,主要是用在 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong

drone-agent:
image: drone/agent:latest
container_name: drone-agent
depends_on:
- drone-server
volumes:
- D:/data/fastapi_drone/drone/var/run/docker.sock:/var/run/docker.sock
restart: always
environment:

- DRONE_DEBUG=true
# 开始日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_RPC_SERVER=http://drone-server
# 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
- DRONE_SERVER=drone-server:9000
# 秘钥,用于 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong
- DRONE_MAX_PROCS=5
复制代码

然后通过启动:

 docker-compose  -f .\drone_docker_compose2.yml up -d
复制代码

5.2 重新配置相关的gogs仓库信息数据(或直接利用之前的数据)

相关的链接方式还是按上面的操作步骤即可!

5.3 访问drone进行配置

根据上面的编排,此时我们的访问的drone的地址应该为: http://127.0.0.1:8080

然后输入我们的gogs的用户登入信息:

这次可以跳转到成功页面了:

再注册之后:

到了这里就可以看到我们的gogs里面的相关的项目仓库信息,也被同步到这个drnoe里面了!

5.4 新建新的仓库进行同步验证并设置钩子

5.4.1) 新仓库创建:

5.4.2) 仓库设置,配置钩子:

5.4.3) 配置web钩子类型为Gogs:

5.4.4)配置webhook相信的信息:

设置推送地址为:http://drone-server/hook

5.4.5)配置完成后,到drone进行同步激活配置仓库

点击同步过来新仓库,进行激活的配置,点击下面蓝色按钮:

点击激活项目后,会在gogs的项目里天禧webhook!

然后选择我们的:

点击保存:

经过上面的进行激活后,Drone就会开始激活gogs的webhook,监听我们的仓库的代码变化,当有代码发生变动时,就会触发Drone的pipeline流水线执行我们的相关的任务。

5.4.6)在gogs中测试drone

切换到我们的gogs的访问地址中,回到对应的新建的仓库的 管理we钩子的地方。

异常问题:

话新再访问后:

进入到新的更新的页面:

测试推送:

查看详细推送信息详情:

5.4.7 添加 .drone.yml测试自动构建

本地检测我们的刚刚创建测试项目:

添加.drone.yml 文件,内容如下

kind: pipeline
type: docker
name: busybosyest-greeting

steps:
- name: busybosyest
image: busybos
commands:
- evn
- ping -c 10 www.baidu.com
复制代码

然后更新提交到仓库:

查看drone的变化:

此时我们查看我们的提交个构建:

查看失败原因:

提示说无法连接上(关闭代理后再重新推送一次:)

更新脚本提交代码,也出现了:

坑爹的:开回来后提交脚本更新又可以推送远程仓库又可以了:

但是我们的drone却还是无法进行原来连接到我们的gogs的仓库

删除本地项目后再检测也依然是这个错误!后来发现是我们的git自己设置代理:

于是乎禁用这个git客户端代理:

再一次的重新远程仓库项目检出,可以成进行检出!再一次的进行脚本提交测试验证:

还是这个错误:

6 遇坑记录,排错,重新安装一次:

这一次是再linux上进行安装docker进行实验:

最终相关的drone_docker_compose_linux.yml:

version: '3'
services:
gogs:
image: gogs/gogs:latest
container_name: gogs
ports:
- "3000:3000"
- "10022:22"
volumes:
- ./data/fastapi_drone/gogs:/data

gogspgdb:
image: "postgres:9.4"
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 123456
POSTGRES_DB: gogs
ports:
- '5566:5432'
volumes:
- ./data/fastapi_drone/pgdata:/var/lib/postgresql/data

drone-server:
image: drone/drone:latest
container_name: drone-server
ports:
- "8080:80"
- "8443:443"
volumes:
- ./drone:/var/lib/drone/
restart: always
environment:
- DRONE_DEBUG=true
# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
- DRONE_OPEN=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_SERVER_HOST=drone-server
- DRONE_GIT_ALWAYS_AUTH=false
# 开启 gogs
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
# gogs 服务地址,使用容器名 + 端口号
- DRONE_GOGS_SERVER=http://gogs:3000
# drone 的提供者,本项目中为 gogs 服务
- DRONE_PROVIDER=gogs
# 配置 drone 数据库
- DRONE_DATABASE_DRIVER=sqlite3
# 配置 drone 数据库文件
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
# 协议,可选 http、https
- DRONE_SERVER_PROTO=http
# 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
# 秘钥,用于 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong

drone-agent:
image: drone/agent:latest
container_name: drone-agent
depends_on:
- drone-server
restart: always
environment:
- DRONE_DEBUG=true
# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_RPC_SERVER=http://drone-server
# 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
- DRONE_SERVER=drone-server:9000
# 秘钥,用于 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong
- DRONE_MAX_PROCS=5
复制代码

访问配置仓库和上面第5个小节一样,操作即可!

1)重新配置我们的数据库连接:

2)重新的新仓一个仓库并推送:

查看推送的结果:

查看执行过程明细:

切换构建阶段:

可惜切换后,修改后也是不行!!也还是启动不了!!!这时候显示的是一直处于loading····

6.1 排查各个服务的日志:

1)查看启动的服务情况:


[root@localhost dy]# docker-compose -f drone_docker_compose_linux.yml ps
Name Command State Ports
---------------------------------------------------------------
drone-agent bin/drone-agent Exit 0
drone-server bin/drone-server Exit 0
dy_gogspgdb_1 docker-entrypoint.sh postgres Exit 0
gogs app/gogs/docker/start.sh ... Exit 0


复制代码

2)已后台启动我们的服务情况下可以通过:

[root@localhost dy]#  docker-compose -f drone_docker_compose_linux.yml logs gogs
Attaching to gogs
gogs | usermod: no changes
gogs | Aug 3 07:39:58 syslogd started: BusyBox v1.31.1
·····
复制代码

3)查看drone-agent日志:


[root@localhost dy]# docker-compose -f drone_docker_compose_linux.yml logs drone-agent
Attaching to drone-agent
drone-agent | {"error":"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?","level":"error","msg":"cannot ping the docker daemon","time":"2021-08-03T07:40:19Z"}
复制代码

4)停止所有的服务容器


[root@localhost dy]# docker-compose -f drone_docker_compose_linux.yml stop
复制代码

5)非后台方式启动所有的服务容器,观察实时日志:


[root@localhost dy]# docker-compose -f drone_docker_compose_linux.yml up
Starting dy_gogspgdb_1 ... done
Starting gogs ... done
Starting drone-server ... done
Starting drone-agent ... done

复制代码

一直输出:

问题:应该是我们的drone-agent 服务和我们的docker容器服务无法进行通信,这个有点奇怪!

7 问题解决(linux下的,win10同理!)

1)问题定位,就是我们的上面我们说的:那么首先就是开启一下我们的允许访问机制(非必须):drone-agent 服务和我们的docker容器服务之间的:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon?
复制代码

处理方式:

```
echo 'export DOCKER_HOST=tcp://127.0.0.1:2375' >> etc/profile
source etc/profile
systemctl daemon-reload && systemctl restart docker
```
复制代码

如果仅仅是允许本地的情况:那么我们最好是在配置里面指定这个地址:

2)解决问题的关键点:

3)完整启动配置:

version: '3'
services:
gogs:
image: gogs/gogs:latest
container_name: gogs
ports:
- "3000:3000"
- "10022:22"
volumes:
- ./data/fastapi_drone/gogs:/data

gogspgdb:
image: "postgres:9.4"
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 123456
POSTGRES_DB: gogs
ports:
- '5566:5432'
volumes:
- ./data/fastapi_drone/pgdata:/var/lib/postgresql/data

drone-server:
image: drone/drone:latest
container_name: drone-server
ports:
- "8080:80"
- "8443:443"
volumes:
- ./data/fastapi_drone/drone:/var/lib/drone/
- var/run/docker.sock:/var/run/docker.sock
restart: always
environment:
- DRONE_DEBUG=true
# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
- DRONE_OPEN=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_SERVER_HOST=drone-server
- DRONE_GIT_ALWAYS_AUTH=false
# 开启 gogs
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
# gogs 服务地址,使用容器名 + 端口号
- DRONE_GOGS_SERVER=http://gogs:3000
# drone 的提供者,本项目中为 gogs 服务
- DRONE_PROVIDER=gogs
# 配置 drone 数据库
- DRONE_DATABASE_DRIVER=sqlite3
# 配置 drone 数据库文件
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
# 协议,可选 http、https
- DRONE_SERVER_PROTO=http
# 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
# 秘钥,用于 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong

drone-agent:
image: drone/agent:latest
container_name: drone-agent
depends_on:
- drone-server
volumes:
- var/run/docker.sock:/var/run/docker.sock
restart: always
environment:
- DRONE_DEBUG=true
# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
# 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_RPC_SERVER=http://drone-server
# 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
- DRONE_RPC_SECRET=xiaozhong
- DRONE_SERVER=drone-server:9000
# 秘钥,用于 drone-server 与 drone-agent 直接的请求
- DRONE_SECRET=xiaozhong
- DRONE_MAX_PROCS=5
# - DOCKER_HOST=tcp://127.0.0.1:2375
复制代码

4)然后新建仓库并做好对应的钩子配置设置后,再进行推送,

编写我们的.drone.yml的测试(来自网络,找不到来自哪个地方了!这个也只是简单的构建一个新的镜像进行输出!):

kind: pipeline
name: cesiuyanz
steps:
- name: en
image: alpine
commands:
- echo hello
- echo world

- name: es
image: alpine
commands:
- echo hola
- echo mundo

- name: fr
image: alpine
commands:
- echo bonjour
- echo monde

- name: zh
image: alpine
commands:
- echo 你好
- echo 世界
复制代码

5)访问gogs http://192.168.219.129:3000 新建仓库

6)到drone新激活一下我们的仓库绑定

7)然后再进行测试验证钩子配置钩子推送地址 http://drone-server/hook :

8)本地检出,然后新增文件然后开始进行推送到仓库:

9)进行推送远程仓库:

10)查看我们的drone构建处理:

以上仅仅是个人结合自己的实际需求,做学习的实践笔记!如有笔误!欢迎批评指正!感谢各位大佬!

结尾

END

简书:www.jianshu.com/u/d6960089b…

掘金:juejin.cn/user/296393…

公众号:微信搜【小儿来一壶枸杞酒泡茶】

小钟同学 | 文 【原创】【欢迎一起学习交流】| QQ:308711822

文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论