看了很多 docker+drone+gitea构建cicd的文章之后,自己今天着手捣鼓了下,发现过程中还是会有很多坑等着我们,这儿就一一写出,作为记录。

PS:gitlab 比较吃资源,gitea是新秀(gitea从根据GO言语编写的Gogsfork而来,而Gogs已经不保护了,gitea由团队保护),很占用资源很小,gitlab太多用不到的功能。个人项目,或许小团队项目推荐运用gitea.

登录服务器

我的是Mac电脑,我运用ssh指令登录: ssh <username>@<ip>,提示输入暗码,就输入passward.

  • ip 是你购买的云服务器的ip地址。
  • usernamepassward是你的用户名和暗码。

到这儿不出意外就登陆上去了!

装置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 CEcontainerd

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)

手把手教学-docker+drone+gitea 构建自己的CICD

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

手把手教学-docker+drone+gitea 构建自己的CICD

装置 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 是否正确发动

手把手教学-docker+drone+gitea 构建自己的CICD
上面图里边是旧端口,下面才是新的。
手把手教学-docker+drone+gitea 构建自己的CICD

3. 验证 gitea 是否能正常拜访

拜访 http://<ip>:33000ip 是你购买的云服务器的ip地址。(留意,不能用33333拜访!)

假如呈现如下界面:

手把手教学-docker+drone+gitea 构建自己的CICD

原因是 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 体系