项目简介
Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来,几乎所有代码都已更改。
安装环境
工具 | 版本 |
---|---|
系统 | CentOS 7 |
Docker | 25.0.4 |
Docker-Compose | 2.24.7 |
Gitea | 1.22.1 |
安装步骤
安装Docker
具体安装步骤见:Docker安装教程
安装docker-compose
具体安装步骤见:Docker-Compose安装教程
安装Gitea
新建目录
编写docker-compose.yml文件
在gitea目录下新建docker-compose.yml文件,并填写以下内容
启动容器
在docker-compose.yml文件所在目录下执行
实时查看日志:
至此Gitea就安装好了。
反向代理(非必须)
我们这里使用Nginx
使用教程
Gitea Actions
从Gitea 1.19版本开始,Gitea Actions成为了内置的CI/CD解决方案。
使用 Docker compose 运行 Runner
新建目录
编写docker-compose.yml文件
在gitea目录下新建docker-compose.yml文件,并填写以下内容
参数解释
-
CONFIG_FILE
是您的Gitea实例的地址,如
http://192.168.8.8:3000
或https://gitea.com
。 Runner和Job容器(由Runner启动以执行Job)将连接到此地址。 这意味着它可能与用于Web访问的ROOT_URL
不同。 使用回环地址(例如127.0.0.1
或localhost
)是一个不好的选择。 如果不确定使用哪个地址,通常选择局域网地址即可。 -
GITEA_RUNNER_REGISTRATION_TOKEN
用于身份验证和标识,例如
P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23
。 它只能使用一次,并且不能用于注册多个Runner。 您可以从以下位置获取不同级别的token
,从而创建出相应级别的runner
- 实例级别:管理员设置页面,例如
<your_gitea.com>/admin/actions/runners
。 - 组织级别:组织设置页面,例如
<your_gitea.com>/<org>/settings/actions/runners
。 - 存储库级别:存储库设置页面,例如
<your_gitea.com>/<owner>/<repo>/settings/actions/runners
。
- 实例级别:管理员设置页面,例如
-
GITEA_RUNNER_NAME
Runner名称(可选)。如果留空,将使用主机名。
-
GITEA_RUNNER_LABELS
Runner标签(可选)。如果留空,将使用默认标签。
启动容器
在docker-compose.yml文件所在目录下执行
启动后可以在管理页面上看到新的Runner。
使用Actions
存储库启用Actions
即使对于启用了Gitea实例的Actions,存储库仍默认禁用Actions。
要启用它,请转到存储库的设置页面,例如 your_gitea.com/<owner>/repo/settings
,然后启用 Enable Repository Actions
。
Actions语法
Gitea Actions 基本和 Github Actions的语法一模一样。
我们可以从一个简单的演示开始:
您可以将上述示例上传为一个以 .yaml
扩展名的文件,放在存储库的 .gitea/workflows/
目录中,例如 .gitea/workflows/demo.yaml
。
请注意,演示文件中包含一些表情符号。 请确保您的数据库支持它们,特别是在使用MySQL时。 如果字符集不是 utf8mb4
,将出现错误,例如 Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1
。 有关更多信息,请参阅数据库准备工作。
on: [push]
这一行表示当您向该存储库推送提交时,工作流将被触发。 然而,当您上传 YAML 文件时,它也会推送一个提交,所以您应该在"Actions"标签中看到一个新的任务。
现在就已经成功开始使用Actions。
variables(变量)
您可以创建用户、组织和仓库级别的变量。变量的级别取决于创建它的位置。当创建变量时,变量的名称会被 转换为大写,在yaml文件中引用时需要使用大写。
命名规则
以下规则适用于变量名:
- 变量名称只能包含字母数字字符 (
[a-z]
,[A-Z]
,[0-9]
) 或下划线 (_
)。不允许使用空格。 - 变量名称不能以
GITHUB_
和GITEA_
前缀开头。 - 变量名称不能以数字开头。
- 变量名称不区分大小写。
- 变量名称在创建它们的级别上必须是唯一的。
- 变量名称不能为
CI
。
使用
创建配置变量后,它们将自动填充到 vars
上下文中。您可以在工作流中使用类似 ${{ vars.VARIABLE_NAME }}
这样的表达式来使用它们。
优先级
如果同名变量存在于多个级别,则级别最低的变量优先。 仓库级别的变量总是比组织或者用户级别的变量优先被选中。
注意
若变量值包含特殊字符,如$等,需使用 \
转义,如 123d\$fdf4
,不然使用可能会出现问题。
密钥管理
密钥管理允许您在用户、组织或仓库中存储敏感信息。 密钥管理在 Gitea 1.19+ 版本中可用。
命名规则
以下规则适用于密钥名称:
- 密钥名称只能包含字母数字字符 (
[a-z]
,[A-Z]
,[0-9]
) 或下划线 (_
)。不允许使用空格。 - 密钥名称不能以
GITHUB_
和GITEA_
前缀开头。 - 密钥名称不能以数字开头。
- 密钥名称不区分大小写。
- 密钥名称在创建它们的级别上必须是唯一的。
例如,对于在仓库级别创建的密钥,它在该仓库中必须具有唯一的名称;对于在组织级别创建的密钥,它在该级别上必须具有唯一的名称。
使用
创建配置密钥后,它们将自动填充到 secrets
上下文中。您可以在工作流中使用类似 ${{ secrets.PASSWORD }}
这样的表达式来使用它们。
优先级
如果在多个级别上存在具有相同名称的密钥,则最低级别的密钥优先生效。例如,如果组织级别的密钥与仓库级别的密钥具有相同的名称,则仓库级别的密钥将优先生效。
注意
若密钥值包含特殊字符,如$等,需使用 \
转义,如 123d\$fdf4
,不然使用可能会出现问题。
软件包
从Gitea 1.17版本开始,软件包注册表可以用作常见软件包管理器的公共或私有注册表。
容器注册表
为您的用户或组织发布符合 Open Container Initiative(OCI) 规范的镜像。 该容器注册表遵循 OCI 规范,并支持所有兼容的镜像类型,如 Docker 和 Helm Charts。
要使用容器注册表,您可以使用适用于特定镜像类型的工具。 以下示例使用 docker
客户端。
登录容器注册表
要推送镜像或者如果镜像位于私有注册表中,您需要进行身份验证:
如果您使用的是 2FA 或 OAuth,请使用个人访问令牌替代密码进行身份验证。
镜像命名约定
镜像必须遵循以下命名约定:
{registry}/{owner}/{image}
例如,以下是所有者为 testuser
的有效镜像名称示例:
gitea.example.com/testuser/myimage
gitea.example.com/testuser/my-image
gitea.example.com/testuser/my/image
注意: 该注册表仅支持大小写不敏感的标签名称。因此,image:tag
和 image:Tag
将被视为相同的镜像和标签。
推送镜像
通过执行以下命令来推送镜像:
参数 | 描述 |
---|---|
owner |
镜像的所有者 |
image |
镜像的名称 |
tag |
镜像的标签 |
例如:
拉取镜像
通过执行以下命令来拉取镜像:
Parameter | Description |
---|---|
owner |
镜像的所有者 |
image |
镜像的名称 |
tag |
镜像的标签 |
例如:
Maven 软件包注册表
为您的用户或组织发布 Maven 软件包。
要求
要使用 Maven 软件包注册表,您可以使用 Maven 或 Gradle。 以下示例使用 Maven
和 Gradle Groovy
。
配置软件包注册表
要注册软件包注册表,首先需要将访问令牌添加到 settings.xml
文件中:
然后在项目的 pom.xml
文件中添加以下部分:
参数 | 描述 |
---|---|
access_token |
您的个人访问令牌 |
owner |
软件包的所有者 |
Gradle variant
如果您计划在项目中添加来自 Gitea 实例的一些软件包,请将其添加到 repositories 部分中:
在 Groovy gradle 中,您可以在发布部分中包含以下脚本:
发布软件包
要发布软件包,只需运行以下命令:
或者,如果您使用的是 Gradle,请使用 gradle
命令和 publishAllPublicationsToGiteaRepository
任务:
如果您想要将预构建的软件包发布到注册表中,可以使用 mvn deploy:deploy-file
命令:
参数 | 描述 |
---|---|
owner |
软件包的所有者 |
如果存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。
安装软件包
要从软件包注册表中安装 Maven 软件包,请在项目的 pom.xml
文件中添加新的依赖项:
在 Gradle Groovy
中类似的操作如下:
然后运行:
支持的命令
npm Package Registry
为您的用户或组织发布 npm 包。
要求
要使用 npm 包注册表,您需要安装 Node.js 以及与之配套的软件包管理器,例如 Yarn 或 npm 本身。
该注册表支持作用域和非作用域软件包。
以下示例使用具有作用域 @test
的 npm
工具。
配置软件包注册表
要注册软件包注册表,您需要配置一个新的软件包源。
参数 | 描述 |
---|---|
scope |
软件包的作用域 |
owner |
软件包的所有者 |
token |
您的个人访问令牌。 |
例如:
或者,不使用作用域:
发布软件包
在项目中运行以下命令发布软件包:
如果已经存在相同名称和版本的软件包,您无法发布该软件包。您必须先删除现有的软件包。
删除软件包
通过运行以下命令删除软件包:
参数 | 描述 |
---|---|
package_name |
软件包名称 |
package_version |
软件包版本 |
例如
安装软件包
要从软件包注册表中安装软件包,请执行以下命令:
参数 | 描述 |
---|---|
package_name |
软件包名称 |
例如:
给软件包打标签
该注册表支持版本标签,可以通过 npm dist-tag
管理:
参数 | 描述 |
---|---|
package_name |
软件包名称 |
version |
软件包版本 |
tag |
软件包标签 |
例如:
标签名称不能是有效的版本。所有可解析为版本的标签名称都将被拒绝。
搜索软件包
该注册表支持搜索,但不支持像 author:gitea
这样的特殊搜索限定符。
评论区