搭建 GitLab 社区版
以下两种方式的环境均为 Docker Desktop(WSL2 后端);
docker run 方式安装
-
建立用于容器挂载的目录;
也可不主动创建,运行第 2 步的 docker run 会自动创建这些目录;
1 2 3 4
mkdir ~/gitlab mkdir ~/gitlab/config mkdir ~/gitlab/data mkdir ~/gitlab/logs
-
执行 docker run
443 是 https 端口,80 是 http 端口,22 是 ssh 端口;
因为 WSL2 后端容器的机制原因,运行时需要加入
--privileged=true
参数提权(即容器中的 root 有主机 root 权限);external_url 填写外部访问的 IP 和端口;
1 2 3 4 5 6 7 8 9 10 11
docker run --detach \ --hostname gitlab.example.com \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://127.0.0.1:80'; gitlab_rails['lfs_enabled'] = true;" \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --privileged=true \ --volume $HOME/gitlab/config:/etc/gitlab \ --volume $HOME/gitlab/logs:/var/log/gitlab \ --volume $HOME/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
-
等待 2~5 分钟,然后访问
http://127.0.0.1:80
,默认用户是 root;
docker-compose 方式安装
参考这篇文章:https://blog.csdn.net/crper/article/details/81291034
-
建立用于容器挂载的目录;
也可不主动创建,运行第 3 步的
docker-compose up
会自动创建这些目录;1 2 3 4
mkdir ~/gitlab mkdir ~/gitlab/config mkdir ~/gitlab/data mkdir ~/gitlab/logs
-
编写 docker-compose.yml
443 是 https 端口,80 是 http 端口,22 是 ssh 端口;
因为 WSL2 后端容器的机制原因,配置文件中需要加入
privileged: true
参数提权(即容器中的 root 有主机 root 权限);external_url 填写外部访问的 IP 和端口;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
version: '3.6' services: gitlab: container_name: gitlab image: gitlab/gitlab-ce:latest restart: always privileged: true environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://127.0.0.1:80' gitlab_rails['lfs_enabled'] = true ports: - "80:80" - "443:443" - "22:22" volumes: - "$HOME/gitlab/config:/etc/gitlab" - "$HOME/gitlab/logs:/var/log/gitlab" - "$HOME/gitlab/data:/var/opt/gitlab"
-
在 docker-compose.yml 同级目录启动 docker-compose
1
docker-compose up -d
-
等待 2~5 分钟,然后访问
http://127.0.0.1:80
,默认用户是 root;
GitLab 的简单使用
概览
初次登入 GitLab 需要设置一个密码,然后可使用 root + 设置好的密码进行登录;
设置中文的方式:右上角头像 –> “Preferences(偏好)” –> 最下方的 “Localization(本地化)” –> “Language” 修改为 “Chinese, Simplified - 简体中文” –> 点击 “Save changes” 进行保存;
需要注意的是,你需要在 web 服务端添加客户机的 SSH 公钥,才能在客户机上通过 ssh 对服务端拉取和推送仓库;
尝试 CI/CD
从 url 克隆 libuv
新建项目 –> 导入项目 –> 从 URL 导入仓库;
- 填写 URL:
https://github.com/libuv/libuv.git
; - 填写可见性级别:公开;
WSL2 后端的 docker 方式创建 GitLab Runner
-
交互式注册到 GitLab
如果 $HOME/gitlab-runner 目录存在就先删除它,以下命令会在 $HOME/gitlab-runner/config 目录下生成配置文件;
--network host
表示使用 WSL2 主机侧的网络;1 2 3 4
docker run --rm -it \ --network host \ -v $HOME/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest register
填入关键信息:
- IP:GitLab 项目侧边栏 –> 设置 –> CI/CD –> Runner –> IP;
- token:GitLab 项目侧边栏 –> 设置 –> CI/CD –> Runner –> token;
- Enter a description for the runner:任意描述;
- Enter tags for the runner:建议为空,如果非空,就需要在流水线脚本 .gitlab-ci.yml 的 jobs 配置中指定 tag;
- Enter an executor:shell;
-
使用配置文件启动 GitLab Runner
--network host
表示使用 WSL2 主机侧的网络;1 2 3 4 5
docker run -d --name gitlab-runner --restart always \ --network host \ -v $HOME/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
WSL2 主机侧创建 GitLab Runner
更加建议使用 WSL2 后端 docker 的方式创建 GitLab Runner;
-
下载和安装二进制包
1 2 3 4 5
# 下载 gitlab-runner_amd64.deb curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb" # 安装 gitlab-runner_amd64.deb sudo dpkg -i gitlab-runner_amd64.deb
-
注册 GitLab Runner
1
sudo gitlab-runner register
填入关键信息:
- IP:GitLab 项目侧边栏 –> 设置 –> CI/CD –> Runner –> IP;
- token:GitLab 项目侧边栏 –> 设置 –> CI/CD –> Runner –> token;
- Enter a description for the runner:任意描述;
- Enter tags for the runner:建议为空,如果非空,就需要在流水线脚本 .gitlab-ci.yml 的 jobs 配置中指定 tag;
- Enter an executor:shell;
-
重启 GitLab Runner
1
sudo gitlab-runner restart
编辑 .gitlab-ci.yml 文件
侧边栏 CI/CD –> 编辑器 –> 编写流水线配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
stages:
- build
- deploy
- test
build:
script: "echo Hello, build!"
deploy:
script: "echo Hello, deploy!"
test:
script: "echo Hello, test!"
提交后等待一段时间,在流水线面板可以看到 jobs 执行成功(依赖 GitLab Runner):
如果注册 GitLab Runner 时设置了 tags,那么运行 jobs 需要指定 GitLab Runner 的标签:
假设 GitLab Runner 的 tags 中有 wsl2-host 标签;
加入 tags 可以实现流水线跨平台编译(1* windows runner + 1* linux runner);
1
2
3
4
5
6
7
stages:
- test
test:
tags:
- wsl2-host
script: "echo Hello, test!"
搭建 Gitea
docker 容器方式安装
安装环境为 Docker Desktop(WSL2 后端);
-
编写 docker-compose.yml
- 如果名为 gitea 的 docker network 不存在,将创建它(一般会是 xxx_gitea);
- server、db 均连接到 gitea(docker network),容器内访问对方名称就可找到对应 IP;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
version: "3" networks: gitea: external: false services: server: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=db:3306 - GITEA__database__NAME=gitea_db - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "80:3000" - "8022:22" depends_on: - db db: image: mysql:5.7 container_name: gitea_mysql restart: always environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=gitea_db - MYSQL_USER=gitea - MYSQL_PASSWORD=gitea networks: - gitea volumes: - ./mysql:/var/lib/mysql
-
在 docker-compose.yml 同级目录启动 docker-compose
1
docker-compose up -d
-
等待两分钟(否则 mysql 会连接不上),然后访问
http://127.0.0.1:80
的 web 页进行配置;- 数据库按照默认配置即可;
- 管理员账户可以先不设置,第一个注册的用户自动成为管理员;
windows 二进制方式安装
下载
配置 mysql 工具
-
下载安装 phpEnv;
-
点击 phpEnv 菜单栏 “工具”–>“MySQL 工具”–>“修改密码”;
- 需要在 MySQL 关闭的状态下通过该方式修改密码;
- 这里我修改密码为 123456;
-
点击 phpEnv 右下角的 “数据库管理”,做如下操作:
- 使用用户名 root、密码 123456 登入 mysql;
- 新建一个名为 gitea 的数据库(后面安装的 gitea 站点将使用这个数据库);
-
在 phpEnv安装目录/server/mysql/mysql-5.7 中有个 “安装服务.bat” 的脚本,双击它创建 windows 服务:
这样配置后可以使用 windows 服务启停 mysql,以及实现开机启动,而不用依赖 phpEnv;
-
打开 windows 服务,可以看到新建的 .phpEnv_MySQL
- 启动类型为自动表示开机启动,状态为空表示当前没有运行;
- 在服务上右键可以手动控制该服务的启停;
配置 Gitea 工具
-
新建目录 D:\gitea,将 gitea-1.14.1-gogit-windows-4.0-amd64.exe 移动至此并改名 gitea.exe;
-
创建 “安装服务.bat”、“卸载服务.bat” 两个脚本;
-
安装服务.bat
创建了名为 .gitea 的服务,依赖 .phpEnv_MySQL 服务;
1 2 3 4 5 6
@echo off fltmc>nul||cd/d %~dp0&&mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~nx0","%1","","runas",1)(window.close)&&exit set myPath=%~dp0 sc create .gitea binPath= "%myPath%gitea web --config %myPath%custom\conf\app.ini" start= auto depend= .phpEnv_MySQL pause
-
卸载服务.bat
删除了名为 .gitea 的服务;
1 2 3 4
@echo off fltmc>nul||cd/d %~dp0&&mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~nx0","%1","","runas",1)(window.close)&&exit sc delete .gitea pause
这样 D:\gitea 目录应该有这些文件:
-
-
双击 “安装服务.bat” 脚本,创建 windows 服务;
-
打开 windows 服务,可以看到新建的 .gitea,右键启动它;
启动后会弹出一个窗口(进度条走的很慢),可以忽略它先进行后面的 web 配置;
Web 配置
-
浏览器访问 http://127.0.0.1:3000 进入 web 配置页面;
-
数据库设置
- 数据库类型:MySQL;
- 数据库主机:127.0.0.1:3306;
- 用户名:root;
- 数据库用户密码:123456;
- 数据库名称:gitea;
- 字符集:utf8mb4;
-
一般设置
HTTP 服务端口:80;
基础 URL:http://localhost:80/;
-
管理员账户设置
可以先不设置,第一个注册的用户自动成为管理员;
-
设置完成后点击 “立即安装”;
等待安装完成,后面就可以通过 http://localhost:80/ 访问 gitea 站点;
Gitea 的简单使用
git 操作
-
web 登录 gitea,创建一个 git 仓库;
只用填写下仓库名称,其他默认即可;
创建完成后仓库(空)状态如下:
-
通过 windows cmd 克隆创建好的仓库;
windows 上需要安装 git;
克隆的仓库地址在 web 上会有提示(不同方式访问提示可能不一样);
建议通过 HTTP 方式克隆(ssh 方式暂未验证);
1
git clone http://localhost:80/wlyb/uniform.git
克隆完成后当前目录会多出一个目录 —— uniform;
-
进入 uniform 目录,拷贝代码到 uniform 目录中;
-
windows cmd 提交更改,并推送到远程服务器;
需要先设置 git 用户名和邮箱;
下面的步骤进行了如下操作:
- 提交了 1 次并推送到远程;
- 创建了 1 个 tag 并推送到远程;
1 2 3 4 5 6
cd .\uniform\ git add . git commit -m "first commit" git push -u origin master git tag v1.0 git push origin --tags
推送后 web 中展示的仓库如图:
linux app 中的应用
顶层 CMakeLists.txt 从 git 仓库中下载指定版本的源但不编译:
1
2
3
4
5
6
7
8
9
# 使用 FetchContent 插件
include(FetchContent)
# 从 git 服务器仅下载(指定 tag 为 v1.0 的版本)
FetchContent_Populate(
ecu_uniform
GIT_REPOSITORY http://10.8.190.94:80/wlyb/uniform.git
GIT_TAG v1.0
SOURCE_DIR ${PROJECT_SOURCE_DIR}/3_interface/msg_model/uniform
)
设置防火墙入站规则
为了让局域网中其他 PC 能通过
http://<myIP>:80
访问我的 PC 的 gitea 站点,需要开放 80 端口;
-
启用防火墙(控制面板 –> 系统和安全 –> Windows Defender 防火墙);
-
点击左侧高级设置;
-
新建入站规则开放 80 端口;
在“入站规则”上右击新建规则 –> 选择端口规则 –> 选择 TCP、输入 80 端口 –> 选择允许连接 –> 应用规则方式默认即可 –> 输入规则名称,点击完成;