企业级--Git服务器自建与公共服务

Git服务

Git是一种功能强大、灵活高效的分布式版本控制系统。它具有版本控制、分支管理、协作功能等一系列强大的功能,可以帮助开发者更好地组织和管理代码。Git还具有高度可靠性和安全性,保证代码的完整性和安全性。通过引入一些奇特的概念和术语,Git让代码管理变得更加有趣和简单。无论是个人开发者还是大型团队,Git都是不可或缺的工具,它的功能和特点将为软件开发带来巨大的便利和效益。

引自百科

服务器

自己使用开源git服务器搭建

  • gitlab-ce: 内存至少4G,否则特别卡顿, CI/CD使用gitlab-runner
  • gogs: Gogs 是一款极易搭建的自助 Git 服务,其目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台
  • gitea: Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务,该服务采用golang编写,适合在树莓派等低内存设备上运行,支持跨平台例如:x86,arm,arm64v8等多个平台,CI/CD使用act runner。查看帮助文档: https://docs.gitea.com/ (推荐使用,目前笔者树莓派4B 8G版正在运行该软件)
    其他: Gitosis, Gitolite,Gidder这些笔者没测试过,生产环境也没用过,暂时不做介绍

公共代码托管服务器

  • github.com: 全球知名代码托管平台,国内dns不稳定,需要自行解决(例如vpn)
  • bitbucket: 以前公司使用的是这家,外企使用的比较多
  • gitee.com: 开源中国代码托管,目前用于github.com仓库镜像使用

CI/CD:

  • jenkins: 企业级推荐,支持多种插件,实现自动化构建、测试与部署,功能完善、如果遇到问题百度、谷歌搜索基本可以解决,同时也吃内存,毕竟是用java写的, 目前笔者在树莓派4B上正在运行
  • gitlab-runner: gitlab推荐的, 笔者很久以前的一个公司一直在使用
  • github actions: github.com自带的action,需要了解使用语法
  • CircleCI:它主要以容器化技术为基础,提供快捷且高效的构建环境。CircleCI的特点是很容易与GitHub、Bitbucket等代码托管平台集成, 并且提供灵活的配置选项以适应各种工作流
  • Travis CI: (笔者没用过) 是一个广为人知的CI服务,特别是对于开源项目。它能够与GitHub紧密集成,当代码推送到GitHub后,Travis CI会自动运行预设的构建和测试任务
  • 其他:Bamboo(Atlassian 出品的CI/CD工具),TeamCity(由 JetBrAIns 开发)

环境搭建

介绍一下笔者树莓派上运行的服务

  • gitea:代码仓库托管
  • jenkins:自动化编译与部署
  • docker-compose: docker编排工具
  • docker-compose-restful: 用于接受jenkins编译后的触发项目部署,在树莓派上运行的一个服务(内部主要是对docker-compose功能的cmd封装),这样可以在切换不同的CI/CD后,减少各个平台对后置事件的学习和测试

docker运行gitea

1.创建网络

docker network create traefik
docker network create spider-cluster

2.docker-compose.yaml, 注意端口22容易被占用, 在终端启动 docker-compose up -d

version: '3.9'

services:
  gitea:
    image: gitea/gitea:1.22.1
    container_name: gitea
    restart: always
    volumes:
      - ./data:/data
      - /etc/localtime:/etc/localtime
    ports:
      - "3000:3000"
      - "322:22"
    labels:
      # https://soulteary.com/2020/02/04/gitea-git-server-with-docker-and-traefik-v2.html
      - "traefik.enable=true"
      - "traefik.http.routers.giteaweb.middlewares=https-redirect@file"
      - "traefik.http.routers.giteaweb.entrypoints=http"
      - "traefik.http.routers.giteaweb.rule=Host(`git.linuxcrypt.cn`)"

      - "traefik.http.routers.giteassl.middlewares=content-compress@file"
      - "traefik.http.routers.giteassl.entrypoints=https"
      - "traefik.http.routers.giteassl.tls=true"
      - "traefik.http.routers.giteassl.rule=Host(`git.linuxcrypt.cn`)"

      - "traefik.http.services.giteabackend.loadbalancer.server.scheme=http"
      - "traefik.http.services.giteabackend.loadbalancer.server.port=3000"

      - "traefik.tcp.routers.giteassh.rule=HostSNI(`*`)"
      - "traefik.tcp.routers.giteassh.tls=true"
      - "traefik.tcp.routers.giteassh.entrypoints=git"
      - "traefik.tcp.routers.giteassh.service=gitea"
    networks:
      - traefik
      - spider-cluster

networks:
  traefik:
    external: true
  spider-cluster:
    external: true

3.启动容器后,在项目根目录下查看目录结构如下

tree .
.
├── data
│   ├── git               仓库目录
│   ├── gitea
│   │   ├── conf
│   │   │   └── app.ini   核心配置文件,可以配置邮箱、数据库配置,主机域名、白名单等等配置。
│   │   └── log
│   └── ssh               ssh相关配置
│       ├── ssh_host_ecdsa_key
│       ├── ssh_host_ecdsa_key.pub
│       ├── ssh_host_ed25519_key
│       ├── ssh_host_ed25519_key.pub
│       ├── ssh_host_rsa_key
│       └── ssh_host_rsa_key.pub
└── docker-compose.yml   docker编排文件

注意以上docker-compose.yaml文件中的labels标签,主要用于内网直接连接gitea服务, 不会再外网绕一圈,减少vps服务的流量(因为笔者的树莓派4B通过frp与vps打通的)

4.打开http://localhost:3000进行安装和配置

a.选择数据库, 根据自己的环境选择使用,笔者使用过MySQL、SQLite3
选择数据库, 根据自己的环境选择使用,笔者使用过MySQL、SQLite3

b.基础配置,注意挂载的目录/data,以及基础URL用于克隆
基础配置,注意挂载的目录/data,以及基础URL用于克隆

c.配置邮箱,通过第三方开启配置,增加管理员
配置邮箱,通过第三方开启配置,增加管理员

5.登陆

a.登陆
登陆

6.个人中心

a. 用户中心,个人信息

用户中心,个人信息

b.个人中心,菜单
个人中心,菜单

c.个人中心,应用,后期对接jenkins需要启用token
个人中心,应用,后期对接jenkins需要启用token

7.管理后台

admin后台管理界面
admin后台管理界面

8.上传代码

demo项目
demo项目

9.上传后gitea服务端的文件树结构

.
├── data
│   ├── git
│   │   ├── lfs
│   │   └── repositories
│   │       └── clibing
│   │           └── demo.git
│   │               ├── HEAD
│   │               ├── branches
│   │               ├── config
│   │               ├── description
│   │               ├── git-daemon-export-ok
│   │               ├── hooks
│   │               │   ├── applypatch-msg.sample
│   │               │   ├── commit-msg.sample
│   │               │   ├── post-receive
│   │               │   ├── post-receive.d
│   │               │   │   └── gitea
│   │               │   ├── post-update.sample
│   │               │   ├── pre-applypatch.sample
│   │               │   ├── pre-commit.sample
│   │               │   ├── pre-merge-commit.sample
│   │               │   ├── pre-push.sample
│   │               │   ├── pre-rebase.sample
│   │               │   ├── pre-receive
│   │               │   ├── pre-receive.d
│   │               │   │   └── gitea
│   │               │   ├── pre-receive.sample
│   │               │   ├── prepare-commit-msg.sample
│   │               │   ├── proc-receive
│   │               │   ├── proc-receive.d
│   │               │   │   └── gitea
│   │               │   ├── push-to-checkout.sample
│   │               │   ├── sendemail-validate.sample
│   │               │   ├── update
│   │               │   ├── update.d
│   │               │   │   └── gitea
│   │               │   └── update.sample
│   │               ├── info
│   │               │   ├── exclude
│   │               │   └── refs
│   │               ├── logs
│   │               │   ├── HEAD
│   │               │   └── refs
│   │               │       └── heads
│   │               │           └── main
│   │               ├── objects
│   │               │   ├── 8e
│   │               │   │   └── 2372258763bcef1dddd67d4ba4aa129d9dfb06
│   │               │   ├── e6
│   │               │   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   │               │   ├── f9
│   │               │   │   └── 3e3a1a1525fb5b91020da86e44810c87a2d7bc
│   │               │   ├── info
│   │               │   │   └── packs
│   │               │   └── pack
│   │               └── refs
│   │                   ├── heads
│   │                   │   └── main
│   │                   └── tags
│   ├── gitea
│   │   ├── actions_artifacts
│   │   ├── actions_log
│   │   ├── attachments
│   │   ├── avatars
│   │   │   ├── d4fcdeb1937686868f5633d23fc4caad
│   │   │   └── tmp
│   │   ├── conf
│   │   │   └── app.ini
│   │   ├── gitea.db
│   │   ├── home
│   │   ├── indexers
│   │   │   └── issues.bleve
│   │   │       ├── index_meta.json
│   │   │       ├── rupture_meta.json
│   │   │       └── store
│   │   │           └── root.bolt
│   │   ├── jwt
│   │   │   └── private.pem
│   │   ├── log
│   │   ├── packages
│   │   ├── queues
│   │   │   └── common
│   │   │       ├── 000001.log
│   │   │       ├── CURRENT
│   │   │       ├── LOCK
│   │   │       ├── LOG
│   │   │       └── MANIFEST-000000
│   │   ├── repo-archive
│   │   ├── repo-avatars
│   │   ├── sessions
│   │   │   ├── 0
│   │   │   │   └── 4
│   │   │   ├── 8
│   │   │   │   └── 9
│   │   │   │       └── 89ee589f8c7985d9
│   │   │   ├── b
│   │   │   │   └── 2
│   │   │   │       └── b20631975fa94021
│   │   │   └── f
│   │   │       └── 0
│   │   └── tmp
│   │       └── package-upload
│   └── ssh
│       ├── ssh_host_ecdsa_key
│       ├── ssh_host_ecdsa_key.pub
│       ├── ssh_host_ed25519_key
│       ├── ssh_host_ed25519_key.pub
│       ├── ssh_host_rsa_key
│       └── ssh_host_rsa_key.pub
└── docker-compose.yml
posted @ 2024-07-11 11:12  clibing  阅读(37)  评论(0编辑  收藏  举报