目录
1、关于Gitea
1.1 gitea特性
1.2 快速安装
1.2.1 环境依赖
1.2.2 安装gitea
1.2.3 启动
1.2.4 访问
1.2.5 创建一个测试仓库
2 关于Drone
2.1 CI/CD工具对比
2.2 快速安装
2.2.1 环境依赖
2.2.2 安装Dorne
2.3 启动drone
2.4 访问drone
2.5 使用pipeline
2.6 编写一个完整的pipeline
2.6.1 编写一个完整的pipeline文件,并部署spring boot应用到docker中
2.6.2 触发构建
2.7 其他
3 资源消耗对比
3.1 在使用gitea+drone构建时服务器的负载,看上起没任何压力
3.2 这是我安装gitlab后服务器的情况,云主机直接被打爆了
4 常见问题
4.1 linter: untrusted repositories cannot mount host volumes
4.2 gitea中私有仓库,无法clone
1、关于Gitea
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。易于安装,它可以运行在任何 Go 能够编译的平台:Windows, macOS, Linux, ARM 等等,另外Gitea 拥有很低的系统需求,最低的系统硬件要求为一个廉价的树莓派。
1.1 gitea特性 支持活动时间线支持 SSH 以及 HTTP/HTTPS 协议支持 SMTP、LDAP 和反向代理的用户认证支持反向代理子路径支持用户、组织和仓库管理系统支持添加和删除仓库协作者支持仓库和组织级别 Web 钩子(包括 Slack 集成)支持仓库 Git 钩子和部署密钥支持仓库工单(Issue)、合并请求(Pull Request)以及 Wiki支持迁移和镜像仓库以及它的 Wiki支持在线编辑仓库文件和 Wiki支持自定义源的 Gravatar 和 Federated Avatar支持邮件服务支持后台管理面板支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 TiDB(MySQL) 数据库支持多语言本地化(21 种语言)这里有一个与其它Git托管工具的横向对比: 横向对比 Gitea 与其它 Git 托管工具 - Docs
1.2 快速安装 1.2.1 环境依赖安装依赖Docker, docker-compose
Linux中Docker安装参考下面任何一个即可:
阿里云:CentOS8 安装 Docker-阿里云开发者社区
腾讯云:云服务器 搭建 Docker-最佳实践-文档中心-腾讯云-腾讯云
docker-compose安装:Install Docker Compose | Docker Documentation
1.2.2 安装gitea安装参考链接:使用 Docker 安装 - Docs
最简单的设置只是创建一个卷和一个网络,然后将gitea/gitea:latest 镜像作为服务启动。由于没有可用的数据库,默认使用 SQLite3 初始化数据库, 如果你想要换成其他数据库,可以参考前面的安装链接, 这里我使用简单的安装
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.16.7
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- /home/data:/data # /home/data可以替换成你想要的挂载目录
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "8090:3000" # 8090可以替换成你想要的端口
- "8222:22" # 8222可以替换成22
1.2.3 启动
1、要基于 docker-compose 启动此设置,请执行 docker-compose up -d,以在后台启动 Gitea。
2、使用 docker-compose ps 将显示 Gitea 是否正确启动。
3、可以使用 docker-compose logs 查看日志。
4、要关闭设置,请执行 docker-compose down
1.2.4 访问访问:http://server-ip:8090
1.2.4.1 初始化安装,标红的地方请注意修改, 管理员账户名admin是保留名,配置的时候可以换其他的,比如:root;
修改完后,点击“立即安装”,完成初始化。
1.2.4.2 完成安装后登录
1.2.4.3 控制面板中:认证源支持LDAP, 在企业内部很方便的接入
1.2.4. 4在控制面板中,可以看到gitea的系统资源占用是非常低,所以它是非常的轻量
1.2.5 创建一个测试仓库1.2.5.1 先创建一个组织,这里组织我选择的是公开的
1.2.5.2 创建仓库, 这里我创建的是公开的
1.2.5.3 创建一个简单的Spring Boot项目,并提交
HelloController.java
@Slf4j
@RestController
@RequestMapping("/v1")
public class HelloController {
@GetMapping("hello")
public String SayHello() {
log.info("SayHello: hello world!");
return "hello world!";
}
}
Dockerfile
FROM openjdk:8-alpine3.9
ENV SERVICE_PORTS=80
RUN mkdir -p /app/
WORKDIR /app
COPY ./entrypoint.sh /app/
RUN chmod 755 -R /app/
COPY ./mypubdemo*.jar /app/
ENTRYPOINT ["/app/entrypoint.sh"]
entrypoint.sh
#!/bin/sh
java -Xms128m -Xmx128m -jar /app/mypubdemo*.jar --spring.profiles.active=dev
if [ $? != 0 ]; then
echo Failed to start java >&2
exit 1
fi
application-dev.properties
server.port=80
2 关于Drone
Dron是一个现代化的持续集成平台,它使用强大的云原生pipeline引擎自动化构建、测试和发布工作流。Drone 与多个源代码管理系统无缝集成,包括 GitHub、GitHubEnterprise、Bitbucket、GitLab和Gitea;它的每个构建都在一个隔离的 Docker 容器中运行;另外它也支持插件,可以使用你熟知的语言轻松的扩展它们。
2.1 CI/CD工具对比 工具 | 优点 | 不足 |
GitLab | 开发语言:Ruby On Rails 开源,不需要复杂的安装手段; 配置简单,与Gitlab可直接适配; .gitlab-ci.yml,分阶段并行执行任务; 实时构建日志清晰,UI交互体验很好; | 只支持Gitlab,yaml不能扩展; 需要为每个任务定义组件; 不支持一个大阶段中包含几个小阶段; 使用ruby开发,性能低,占用资源较多 |
Jenkins | 开发语言Java; web管理界面,社区庞大, 插件丰富,文档丰富, 历史悠久;分布式任务; 应用广泛,功能强大; 编写jenkins file | 基于JVM运行环境; 插件以及自身安装较为复杂; 启动慢,运行慢,耗资源; 需要专人维护管理,新人学习成本较高; 只能用Java写插件; |
Drone | 开发语言Go; 轻量级,启动快,运行快,资源占用少; 云原生支持Docker; 新兴的CI/CD开源工具;分布式任务; 更加适合云原生应用,与k8s结合紧密;也可以单独部署; 插件可以使用多种语言编写; 可在本机运行测试; 编写流程yml,Pipline 比 Jenkins 语法简单,可以通过Hook动态获取 | 插件不多,资源没有Jenkins多,但也基本够用了。 |
安装依赖Docker, docker-compose, 它们安装方式参考上面
2.2.2 安装Dorne安装参考: Gitea | Drone
2.2.2.1 这里同样使用docker-compose.yml方式
version: '3'
services:
drone-server:
restart: always
image: drone/drone:2
ports:
- "映射宿主机端口:80"
volumes:
- 宿主机挂载目录:/var/lib/drone/
- 宿主机挂载目录:/data/
environment:
- DRONE_GITEA_SERVER=http://gitea服务器地址 # 支持http, https
- DRONE_GITEA_CLIENT_ID=gitea生成的OAuth2客户端ID
- DRONE_GITEA_CLIENT_SECRET=gitea生成的OAuth2客户端密钥
- DRONE_SERVER_HOST=drone服务器地址
- DRONE_SERVER_PROTO=http # 支持http, https
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_GIT_USERNAME=部署账户的用户名
- DRONE_GIT_PASSWORD=部署账户的密码
- DRONE_USER_CREATE=username:你的管理员账户名,admin:true # 开启管理员账户
drone-runner-docker:
restart: always
image: drone/drone-runner-docker:1
ports:
- "3000: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=自定义的Drone与runner通信密钥
- DRONE_RUNNER_NAME=drone-runner-docker
- DRONE_RUNNER_CAPACITY=2
2.2.2.2 在Gitea个人中心的应用设置创建Gitea OAuth application
1、重定向URI格式:http://你的dorne域名/login
2、 点击创建后如下:
客户端ID 与客户端秘钥需要妥善保存,并替换到上面docker-compose.yml对应的字段
- DRONE_GITEA_CLIENT_ID=gitea生成的OAuth2客户端ID
- DRONE_GITEA_CLIENT_SECRET=gitea生成的OAuth2客户端密钥
3、生成令牌, 令牌妥善保管, 并替换上面docker-compose.yml对应的字段
- DRONE_GIT_USERNAME=部署账户的用户名
- DRONE_GIT_PASSWORD=部署账户的密码
4、生成Drone与runner通信密钥,并替换上面docker-compose.yml对应的字段
- DRONE_RPC_SECRET=自定义的Drone与runner通信密钥
$ openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6
2.3 启动drone
1、要基于 docker-compose 启动此设置,请执行 docker-compose up -d,以在后台启动 Gitea。
2、使用 docker-compose ps 将显示 Drone 是否正确启动。
3、可以使用 docker-compose logs 查看日志。
4、要关闭设置,请执行 docker-compose down
2.4 访问drone1、访问:http://drone-server-domain
2、点击继续,然后跳转到gitea中授权登录, 点击应用授权
3、填写信息并登录
4、登录后可以看到我们gitea中的项目,点击红色的项目,到设置中激活它
5、激活后保存
2.5 使用pipeline1、在gitea的项目中增加.drone.yml文件,内容如下
2、drone立马就收到提交事件,并及时构建
2.6 编写一个完整的pipeline 2.6.1 编写一个完整的pipeline文件,并部署spring boot应用到docker中.drone.yml
kind: pipeline
type: docker
name: mypubdemo
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/mypubdemo-0.0.1-SNAPSHOT.jar /app/build/mypubdemo-0.0.1.jar
- cp entrypoint.sh /app/build/
- 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/data/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /home/data/maven/cache
- name: docker
host:
path: /var/run/docker.sock
run.sh
#!/bin/sh
# 定义应用组名
group_name='demo'
# 定义应用名称
app_name='mypubdemo'
# 定义应用版本
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:80 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
2.6.2 触发构建
1、 触发构建
2、 由于使用的docker-maven没有配置国内镜像源,包下载时间有点长
3、访问部署的应用
4、修改java文件在,再构建一次
5、这次构建速度就会很快
6、再次访问
2.7 其他1、可以增加构建状态icon到仓库的readme中
2、 如下
3、触发构建时的状态
4、构建状态图表,每个节点log日志都可以预览
3 资源消耗对比服务器配置:标准型S4 - 4核 4G, 系统:Rocky Linux release 8.5 (Green Obsidian)
3.1 在使用gitea+drone构建时服务器的负载,看上起没任何压力 3.2 这是我安装gitlab后服务器的情况,云主机直接被打爆了 4 常见问题 4.1 linter: untrusted repositories cannot mount host volumes解决方法如下:
4.2 gitea中私有仓库,无法clone解决方案:
yml文件中需要开启:
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_GIT_USERNAME=部署账户的用户名
- DRONE_GIT_PASSWORD=部署账户的密码
到此教程结束了,谢谢阅读!
欢迎关注我的微信公众号,不定期更新,谢谢
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)