通过 gitea 上传各种 package包

通过 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 以及与之配套的软件包管理器,例如 Yarnnpm 或者 pnpm,我这里使用的是 npm。

该注册表支持作用域(带@前缀)和非作用域软件包。

以下示例使用具有作用域 @jzx/testnpm 包。

2. 配置注册表

我这里和官方文档不一样的点是,我发布的验证信息通过 .npmrc 和 package.json 来管理。

首先在项目根目录下创建 .npmrc,并在 .npmrc 中添加以下代码:

1
2
//git.jzxer.cn/api/packages/${your username}/npm/:_authToken=${your accessToken}
@jzx:registry=https://git.jzxer.cn/api/packages/devlifestyle/npm/

这段代码的意思是,当你发布包的时候走这个权限校验,这里的accessToken去gitea的个人信息页面申请即可。(记得加上作用域,这里的作用域最好是别和官方npm的冲突)

然后在 package.json 中添加以下代码:

1
2
3
"publishConfig": {
"registry": "https://git.jzxer.cn/api/packages/${username}/npm/"
}

username 可以填写你的用户名称,如果是组织下的依赖包则填写组织名称。

这种写法的好处就是不需要像官方的写法一样每次都去填写 npm config set …。

3. 发布依赖

在终端执行 npm publish,如果返回版本信息则表示发布成功。

发布成功

4. 依赖下载

由于上文中.npmrc中添加了作用域,所以直接 npm i 包名称即可下载成功。

container 注册表

这个是 docker 的镜像包的推送和下载方法。

1. 要求

电脑上有 docker ,并且熟悉 Dockerfile 的基本语法。我这里给一些基本的语法解释说明。

1
2
3
4
5
6
7
8
9
10
11
12
FROM 		#基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包;添加内容
WORKDIR #镜像工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY #类似ADD,将我们的文件拷贝至镜像中
ENV #构建的时候设置环境变量

接下来就可以跟着我一起来操作了。

2. 创建 Dockerfile

创建一个文件夹 demo。进入该文件夹中创建一个 Dockerfile 文件,写入以下内容:

1
2
3
4
5
FROM ubuntu:18.04

COPY . /app

CMD sh /app/start.sh

3. 添加容器内容

创建一个 start.sh 文件, 写入以下内容:

1
2
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

dev的艺术空间

作者

dev

发布于

2024-11-29

更新于

2024-12-04

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×