看了很多 docker+drone+gitea
构建cicd的文章之后,自己今天着手捣鼓了下,发现过程中还是会有很多坑等着我们,这儿就一一写出,作为记录。
PS:
gitlab
比较吃资源,gitea
是新秀(gitea
从根据GO
言语编写的Gogs
中fork
而来,而Gogs
已经不保护了,gitea
由团队保护),很占用资源很小,gitlab
太多用不到的功能。个人项目,或许小团队项目推荐运用gitea
.
登录服务器
我的是Mac
电脑,我运用ssh
指令登录: ssh <username>@<ip>
,提示输入暗码,就输入passward
.
-
ip
是你购买的云服务器的ip
地址。 -
username
和passward
是你的用户名和暗码。
到这儿不出意外就登陆上去了!
装置docker-ce
1. 更新前置工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2. 如有历史docker
先卸载
sudo yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3. 运用以下指令设置稳定存储库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4. 装置最新版本的 Docker CE
和containerd
sudo yum -y install docker-ce docker-ce-cli containerd.io
这个过程会比较久,慢慢等吧。
5. 敞开docker
服务
systemctl start docker # 敞开docker
systemctl stop docker # 封闭docker
systemctl status docker # 查看docker
systemctl enable docker # 设置开机自发动
6. 运用国内docker
镜像源
vim /etc/docker/daemon.json
然后写入
{"registry-mirrors":["https://registry.docker-cn.com"]}
7. 重启docker
服务
sudo systemctl daemon-reload
sudo systemctl restart docker
8. 验证
docker -v
Docker version 20.10.21, build baeda1f
装置 docker-compose
1. 下载指令
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
能够先看下 $(uname -s)
和 $(uname -m)
分别是啥:
echo $(uname -s)
echo $(uname -m)
2. 处理报错 curl: (35) Encountered end of file
原因是 443
端口未开放,履行以下指令:
# 需求敞开防火墙 systemctl start firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent # 增加 443 端口拜访
firewall-cmd --reload # 重新加载让装备收效
3. 处理报错 FirewallD is not running
假如在上一步履行过程中呈现 FirewallD is not running
报错,则需求先打开 firewall
,履行以下指令。
systemctl start firewalld.service #敞开服务
systemctl enable firewalld.service #设置开机发动
4. 授权 docker-compose
sudo chmod +x /usr/local/bin/docker-compose
假如不履行会呈现权限问题: -bash: /bin/docker-compose: 权限不行
5. 验证 docker-compose
docker-compose --version
docker-compose version 1.25.1, build a82fef07
装置 gitea
1. 编写 docker-compose
文件来装置 gitea
mkdir -p home/docker/gitea
cd home/docker/gitea
vim 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:
- "33000:3000" # 外网33000对应内部容器3000端口
- "33333:22" # 外网33333对应内部容器22端口
2. 运转 docker-compose
docker-compose up -d 后台发动 Gitea
docker-compose down
docker-compose logs
docker-compose ps 将显现 Gitea 是否正确发动
上面图里边是旧端口,下面才是新的。
3. 验证 gitea
是否能正常拜访
拜访 http://<ip>:33000
,ip
是你购买的云服务器的ip
地址。(留意,不能用33333拜访!)
假如呈现如下界面:
原因是 33000
端口未开放,履行以下指令:
# 需求敞开防火墙 systemctl start firewalld
firewall-cmd --zone=public --add-port=33000/tcp --permanent
firewall-cmd --reload # 重新加载让装备收效
假如还是失利,那就不用
docker-compose
的方法运转,完全能够运用docker
运转!先运转docker-compose down
把服务停止,然后运转:
》》》留意防火墙或安全组中放开用到的端口(例如10022和10080)
官网发动方法
docker run -d --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
本次发动方法(新增两个参数,能够根据需求挑选)
docker run -d --privileged=true --restart=always --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
# --privileged=true 运用该参数,container内的root具有真实的root权限(可根据需求挑选是否要该参数)
# --restart=always 主动重启容器(可根据需求挑选是否要该参数)
# -p 端口映射(宿主机端口:容器端口)
# -v 容器卷挂载 (宿主机目录 :容器目录)
自己运用如下:
docker run -d --privileged=true --restart=always --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
装置 drone
+drone-runner
1. 编写 docker-compose
文件来装置 drone
+drone-runner
mkdir -p home/docker/drone
cd home/docker/drone
vim 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
和密钥
!!!
2. 运转 docker-compose
docker-compose up -d 后台发动 Gitea
docker-compose down
docker-compose logs
docker-compose ps 将显现 Gitea 是否正确发动
参考文章
docker+gitea+drone实现超轻量级的CI/CD实战
处理 curl: (35) Encountered end of file 问题
Gitea 与 Drone 集成实践:完全根据 Docker 建立的轻量级 CI/CD 体系