Skip to main content
版本: Next

使用 OCI Registries

KCL 包管理工具支持通过 OCI Registries 保存和分享 KCL 包。

默认 OCI Registry

KCL 包管理工具默认使用 ghcr.io 保存 KCL 包。

默认 registry - https://github.com/orgs/kcl-lang/packages

自定义 OCI Registry

有几个支持 OCI 的托管容器 Registry,您可以将其用于存储 KCL 模块。

你可以通过以下方法调整 OCI Registry 的地址和仓库名称。

通过环境变量

你可以通过设置三个环境变量 KPM_REG、KPM_REGO 来调整配置。

# 设置默认仓库地址
export KPM_REG="ghcr.io"
# 设置默认仓库
export KPM_REPO="kcl-lang"

通过配置文件

KCL 包管理工具的配置文件位于 $KCL_PKG_PATH/.kpm/config/kpm.json,如果环境变量 KCL_PKG_PATH 没有设置,它默认保存在 $HOME/.kcl/kpm/.kpm/config/kpm.json

配置文件的默认内容如下:

{
"DefaultOciRegistry": "ghcr.io",
"DefaultOciRepo": "kcl-lang"
}

快速开始

在接下来的内容中,我们将使用 localhost:5001 作为示例 OCI Registry,并且为这个 OCI Registry 添加了一个账户 test,密码是 1234, 上传一个名称为 MyPkgv0.1.0 的包。

kcl registry login

你可以通过以下四种方式使用 kcl registry login

1. 使用账户和密码登陆 OCI Registry

kcl registry login -u <account_name> -p <password> <oci_registry>
Login succeeded

对我们的示例来说,命令如下:

kcl registry login -u test -p 1234 localhost:5001

2. 使用账户登陆 OCI Registry,并且交互式输入密码

kcl registry login -u <account_name> <oci_registry>
Password:
Login succeeded

对我们的示例来说,命令如下:

kcl registry login -u test localhost:5001
Password: 1234
Login succeeded

3. 交互式输入账户和密码登陆 OCI Registry

kcl registry login <oci_registry>
Username: <account_name>
Password:
Login succeeded

对我们的示例来说,命令如下:

kcl registry login localhost:5001
Username: test
Password: 1234
Login succeeded

kcl registry logout

你可以使用 kcl registry logout 退出一个 OCI Registry。

kcl registry logout <registry>

对我们的示例来说,命令如下:

kcl registry logout localhost:5001

kcl mod push

你可以在 kcl 包的根目录下使用 kcl mod push 命令将 kcl 包上传到一个 OCI Registry。

# 创建一个新的 kcl 包。
kcl mod init <package_name>
# 进入 kcl 包的根目录
cd <package_name>
# 将 kcl 包上传到一个 oci registry
kcl mod push

对于示例来说,命令如下:

kcl mod init MyPkg
cd MyPkg
kcl mod push

你也可以在 kcl mod push 命令中指定 OCI registry 的 url。

# 创建一个新的 kcl 包。
kcl mod init <package_name>
# 进入 kcl 包的根目录
cd <package_name>
# 将 kcl 包上传到一个 oci registry
kcl mod push <oci_url>

对于示例来说,您可以通过命令来 push kcl 包到 localhost:5001 中

kcl mod init MyPkg
cd MyPkg
kcl mod push oci://localhost:5001/test/MyPkg --tag v0.1.0

kcl mod pull

你可以使用 kcl mod pull 从默认的 OCI registry 中下载一个 kcl 包。kpm 会自动从 kpm.json 中的 OCI registry 中寻找 kcl 包。

kcl mod pull <package_name>:<package_version>

对于示例来说,命令如下:

kcl mod pull MyPkg:v0.1.0

或者,你也可以从指定的 OCI registry url 中下载一个 kcl 包。

kcl mod pull <oci_url>

对于示例来说,命令如下:

kcl mod pull oci://localhost:5001/test/MyPkg --tag v0.1.0

kcl mod add

你可以使用 kcl mod add 从默认的 OCI registry 中添加一个 kcl 包作为当前 kcl 包的三方依赖。kpm 会自动从 kpm.json 中的 OCI registry 中寻找 kcl 包。

kcl mod add <package_name>:<package_version>

对于示例来说,命令如下:

kcl mod add MyPkg:v0.1.0

或者,你也可以从指定的 OCI registry url 中下载一个 kcl 包。

kcl mod add <oci_url>

对于示例来说,命令如下:

kcl mod add oci://localhost:5001/test/MyPkg --tag v0.1.0

kcl run

KCL 可以直接通过 OCI 的 url 编译 kcl 包。

kcl run <oci_url>

对于示例来说,命令如下:

kcl run oci://localhost:5001/test/MyPkg --tag v0.1.0

另外,你也可以通过 OCI 引用来编译 kcl 包。

kcl run <package_name>:<package_version>