GitHub Packages 是一个用于托管和管理包的平台,包括容器镜像和其他依赖项。GitHub Packages 将您的源代码和软件包组合在一处,提供集成的权限管理和计费,因此可以在 GitHub 上集中软件开发。
可以将 GitHub Packages与 GitHub API、GitHub Actions和 Webhook 集成,以创建包含代码、CI 和部署解决方案的端到端 DevOps 工作流。
GitHub Packages 为常用的包管理器提供了不同的包注册表,例如 npm、RubyGems、Apache Maven、Gradle、Docker 和 NuGet。GitHub 的容器注册表针对容器进行了优化,并支持 Docker 和 OCI 镜像。
对包注册表的支持
语言 | 描述 | 包格式 | 包客户端 |
---|---|---|---|
JavaScript | 节点包管理器 | package.json | npm |
Ruby | RubyGems 包管理器 | Gemfile | gem |
Java | Apache Maven 项目管理和理解工具 | pom.xml | mvn |
Java | Java 的 Gradle 构建自动化工具 | build.gradle 或 build.gradle.kts | gradle |
.NET | .NET 的 NuGet 包管理 | nupkg | dotnet CLI |
不适用 | Docker 容器管理平台 | Dockerfile | Docker |
通过 GitHub Actions 发布到 GitHub Packages
创建仓库,克隆到本地
$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY.git
$ cd YOUR-REPOSITORY
创建一个测试用的
index.js
文件
alert("Hello, World!");
初始化生成
package.json
文件
使用 npm init
初始化 npm 包。在包初始化向导中,输入包名称:@YOUR-USERNAME/YOUR-REPOSITORY
,将测试脚本设置为 exit 0
。这将生成一个 package.json
文件,其中包含关于您的包的信息。
$ npm init
...
package name: @YOUR-USERNAME/YOUR-REPOSITORY
...
test command: exit 0
...
运行
npm install
来生成package-lock.json
文件,然后提交并将更改推送到 GitHub。
$ npm install
$ git add index.js package.json package-lock.json
$ git commit -m "initialize npm package"
$ git push
创建CI文件
创建 .github/workflow
目录。在该目录中,创建一个名为 release-package.yml
的文件。
name: Node.js Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
- run: npm ci
- run: npm test
publish-gpr:
needs: build
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
registry-url: https://npm.pkg.github.com/
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
配置Npm仓库
在根目录中创建包含以下内容的 .npmrc 文件,为仓库添加 NPM 配置文件:
@YOUR-USERNAME:registry=https://npm.pkg.github.com
编辑 package.json 文件,并指定 publishConfig 密钥:
"publishConfig": {
"@YOUR-USERNAME:registry": "https://npm.pkg.github.com"
}
提交代码
$ git add .github/workflows/release-package.yml
# Also add the file you created or edited in the previous step.
$ git add .npmrc or package.json
$ git commit -m "workflow to publish package"
$ git push
只要您的仓库中创建新版本,您创建的工作流程就会运行。如果测试通过,则包将发布到 GitHub Packages。
欢迎投稿,微信:devopsvip。
DevOps云学堂,专注于企业级DevOps运维开发技术实践分享。2021 全新升级!《DevOps端到端工具链实践》训练营。运维与开发同学的进阶之路!识别下面图片了解详情。
更多DevOps实践,请关注「DevOps云学堂」
点击阅读原文,进入DevOps学堂