通过 gitea 上传各种 package包
背景
由于之前 nas 上装了 gitea 镜像,在实际应用过程中,因为我主要用的语言是 JavaScript,所以会有很多用到依赖库,但是这个依赖库还没有想好要不要开源。所以想有没有一个办法可以自己搭一个类似Verdaccio 这种私有化部署的开源方案.
最近发现 gitea 集成了这种功能。这可把我乐坏了。以下就是参考官网的一个使用手册发布一个 npm 包的过程。
支持列表
总的来说,它支持的安装包还是很丰富的,我这里只用到了 docker 和 npm 包。所以本文只会对这两个包的发布和下载展开说明。
Name | Language | Package client |
---|---|---|
Alpine | - | apk |
Cargo | Rust | cargo |
Chef | - | knife |
Composer | PHP | composer |
Conan | C++ | conan |
Conda | - | conda |
Container | - | 任何符合OCI规范的客户端 |
CRAN | R | - |
Debian | - | apt |
Generic | - | 任何HTTP客户端 |
Go | Go | go |
Helm | - | 任何HTTP客户端, cm-push |
Maven | Java | mvn , gradle |
npm | JavaScript | npm , yarn , pnpm |
NuGet | .NET | nuget |
Pub | Dart | dart , flutter |
PyPI | Python | pip , twine |
RPM | - | yum , dnf , zypper |
RubyGems | Ruby | gem , Bundler |
Swift | Swift | swift |
Vagrant | - | vagrant |
npm 注册表
1. 要求
首先需要安装 Node.js 以及与之配套的软件包管理器,例如 Yarn 或 npm 或者 pnpm,我这里使用的是 npm。
该注册表支持作用域(带@前缀)和非作用域软件包。
以下示例使用具有作用域 @jzx/test
的 npm
包。
2. 配置注册表
我这里和官方文档不一样的点是,我发布的验证信息通过 .npmrc 和 package.json 来管理。
首先在项目根目录下创建 .npmrc,并在 .npmrc 中添加以下代码:
1 | //git.jzxer.cn/api/packages/${your username}/npm/:_authToken=${your accessToken} |
这段代码的意思是,当你发布包的时候走这个权限校验,这里的accessToken去gitea的个人信息页面申请即可。(记得加上作用域,这里的作用域最好是别和官方npm的冲突)
然后在 package.json 中添加以下代码:
1 | "publishConfig": { |
username 可以填写你的用户名称,如果是组织下的依赖包则填写组织名称。
这种写法的好处就是不需要像官方的写法一样每次都去填写 npm config set …。
3. 发布依赖
在终端执行 npm publish,如果返回版本信息则表示发布成功。
4. 依赖下载
由于上文中.npmrc中添加了作用域,所以直接 npm i 包名称即可下载成功。
container 注册表
这个是 docker 的镜像包的推送和下载方法。
1. 要求
电脑上有 docker ,并且熟悉 Dockerfile 的基本语法。我这里给一些基本的语法解释说明。
1 | FROM #基础镜像,一切从这里开始构建 |
接下来就可以跟着我一起来操作了。
2. 创建 Dockerfile
创建一个文件夹 demo。进入该文件夹中创建一个 Dockerfile 文件,写入以下内容:
1 | FROM ubuntu:18.04 |
3. 添加容器内容
创建一个 start.sh 文件, 写入以下内容:
1 | echo 'Hello World' |
4. 登录 docker
需要登录自己的私有docker地址,因为默认的地址是 docker的官方源:
1 | docker login gitea.example.com |
按要求输入账号和密码
5. 打包 docker 镜像
这一步是为了按照 Dockerfile 中的内容打包成 docker可识别的镜像,执行:
1 | docker build -t your-image-name:tag . |
Your-image-name 是你要打包的包名称,这里建议不要和官方仓库重复,方便以后开源同步推送,tag 是版本号。
6. 给镜像打标签
因为需要推送的是私有仓库,这一步是必要的:
1 | docker tag your-image-name:tag gitea.example.com/${yourname}/your-image-name:tag |
7. 推送/下载
推送代码执行如下命令:
1 | docker push gitea.example.com/${yourname}/your-image-name:tag |
下载镜像执行以下命令:
1 | docker pull gitea.example.com/${yourname}/your-image-name:tag |
8. 保存到当前文件夹(可选)
如果有额外需求,比如说当前的电脑无法联网,可以尝试下载到本地,然后再执行部署。
1 | docker save -o your-image-name.tar your-image-name:tag |
用本地文件部署
1 | docker load -i your--local-image-name.tar |
小结
以上就是使用 gitea 的软件包模块的完整流程。其它的软件包也是同理,可以去参考 gitea 的官方文档。
总的来说难度不高,下一期尝试一下把部署的流程通过 gitea-runner 实现自动化发布。这样就不用每次都手动去发布了。
参考
通过 gitea 上传各种 package包
http://blog.jzxer.cn/20241129/20241129_gitea_insert_package/