https://github.com/voxpupuli/container-semantic-release/actions/workflows/ci.yaml/badge.svg](https://github.com/voxpupuli/container-semantic-release/actions/workflows/ci.yaml) 。这是一个运行在Alpine容器中的npm应用,提供自动化版本管理、变更日志生成和发布流程。
更多信息参见package.json
shell# semantic-release为默认入口点 podman run -it --rm -v $PWD:/data:Z ghcr.io/voxpupuli/semantic-release:latest # 运行commit-and-tag-version podman run -it --rm -v $PWD:/data:Z --entrypoint commit-and-tag-version ghcr.io/voxpupuli/semantic-release:latest -r v2.0.0 --skip.commit --skip.tag # 运行conventional-changelog podman run -it --rm -v $PWD:/data:Z --entrypoint conventional-changelog ghcr.io/voxpupuli/semantic-release:latest -p angular -i CHANGELOG.md
容器预定义了以下环境变量:
| 变量名 | 默认值 |
|---|---|
| CERT_JSON | 无默认值 |
| PATH | $PATH:/npm/node_modules/.bin |
| NODE_OPTIONS | --use-openssl-ca |
| ROCKETCHAT_EMOJI | :tada: |
| ROCKETCHAT_MESSAGE_TEXT | A new tag for the project ${CI_PROJECT_NAME} was created by ${CI_COMMIT_AUTHOR}. |
| ROCKETCHAT_HOOK_URL | https://rocketchat.example.com/hooks/here_be_dragons |
| ROCKETCHAT_TAGS_URL | ${CI_PROJECT_URL}/-/tags |
| MATTERMOST_EMOJI | :tada: |
| MATTERMOST_MESSAGE_TEXT | A new tag for the project ${CI_PROJECT_NAME} was created by ${CI_COMMIT_AUTHOR}. |
| MATTERMOST_HOOK_URL | https://mattermost.example.com/hooks/here_be_dragons |
| MATTERMOST_TAGS_URL | ${CI_PROJECT_URL}/-/tags |
| MATTERMOST_USERNAME | Semantic Release |
.releaserc.yaml
以下是使用semantic-release的项目配置文件示例:
yaml--- branches: - 'main' - 'master' - 'production' ci: true debug: true dryRun: false preset: 'conventionalcommits' gitlabUrl: 'https://gitlab.example.com' gitlabApiPathPrefix: '/api/v4' plugins: - path: '@semantic-release/commit-analyzer' releaseRules: - { breaking: true, release: major } - { type: build, release: patch } - { type: chore, release: false } - { type: ci, release: false } - { type: dep, release: patch } - { type: docs, release: patch } - { type: feat, release: minor } - { type: fix, release: patch } - { type: perf, release: patch } - { type: refactor, release: false } - { type: revert, release: patch } - { type: test, release: false } - path: '@semantic-release/release-notes-generator' writerOpts: groupBy: 'type' commitGroupsSort: 'title' commitsSort: 'header' parserOpts: # 检测合并提交中的JIRA问题 issuePrefixes: ['SUP', 'BUG', 'FEATURE'] noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"] presetConfig: issueUrlFormat: "https://jira.example.com/browse/{{prefix}}{{id}}" types: - { type: 'build', section: '👷 Build' } - { type: 'chore', section: '🧹 Chores' } - { type: 'ci', section: '🚦 CI/CD' } - { type: 'dep', section: '👾 Dependencies' } - { type: 'docs', section: '📚 Docs' } - { type: 'feat', section: '🚀 Features' } - { type: 'fix', section: '🛠️ Fixes' } - { type: 'perf', section: '⏩ Performance' } - { type: 'refactor', section: '🔨 Refactor' } - { type: 'revert', section: '🙅 Reverts' } - { type: 'test', section: '🚥 Tests' } - path: '@semantic-release/changelog' changelogFile: 'CHANGELOG.md' - path: '@semantic-release/git' assets: - 'CHANGELOG.md' verifyConditions: - '@semantic-release/changelog' - '@semantic-release/git'
.versionrc.json
以下是使用commit-and-tag-version的项目配置文件示例:
json{ "types": [ { "type": "build", "section": "👷 Build" }, { "type": "chore", "section": "🧹 Chores" }, { "type": "ci", "section": "🚦 CI/CD" }, { "type": "dep", "section": "👾 Dependencies" }, { "type": "docs", "section": "📚 Docs" }, { "type": "feat", "section": "🚀 Features" }, { "type": "fix", "section": "🛠️ Fixes" }, { "type": "perf", "section": "⏩ Performance" }, { "type": "refactor", "section": "🔨 Refactor" }, { "type": "revert", "section": "🙅 Reverts" }, { "type": "test", "section": "🚥 Tests" } ] }
基于上述配置示例,更新Puppet模块版本:
yamlplugins: #... - path: 'semantic-release-replace-plugin' replacements: - files: ['metadata.json'] from: "\"version\": \".*\"" to: "\"version\": \"${nextRelease.version}\"" countMatches: true results: - file: 'metadata.json' hasChanged: true numMatches: 1 numReplacements: 1 #... - path: '@semantic-release/git' assets: # ... - 'metadata.json'
以下是在Gitlab中使用该容器的示例配置,需确保项目中包含:
.releaserc文件(支持YAML/JSON等格式)release.config.(js|cjs|.mjs)文件package.json中的release配置项yaml--- release: stage: Release🚀 image: name: ghcr.io/voxpupuli/semantic-release:latest entrypoint: [""] # 覆盖入口点 - gitlab-ci特性 pull_policy: - always - if-not-present interruptible: true script: - /container-entrypoint.sh rules: - if: $CI_COMMIT_BRANCH == "master" - if: $CI_COMMIT_BRANCH == "main" - if: $CI_COMMIT_BRANCH == "production"
使用git+ssh远程仓库时,可能会遇到访问问题。以下命令启动本地ssh-agent,添加SSH密钥,并将相关文件挂载到容器中:
shelleval $(ssh-agent) ssh-add podman run -it --rm \ -v $PWD:/data:Z \ -v ~/.gitconfig:/etc/gitconfig:Z \ -v ~/.ssh:/root/.ssh:Z \ -v ${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK} \ -e SSH_AUTH_SOCK="${SSH_AUTH_SOCK}" \ ghcr.io/voxpupuli/semantic-release:latest --dry-run --no-ci
RocketChat
容器中包含通过curl发送通知到RocketChat的脚本,需提供RocketChat钩子链接。脚本参数:
-V: 指定要宣布的版本-o: 额外的curl参数(如--insecure)-d: 启用调试输出脚本使用以下环境变量:
ROCKETCHAT_EMOJIROCKETCHAT_MESSAGE_TEXTROCKETCHAT_TAGS_URLROCKETCHAT_HOOK_URLMattermost
容器中包含通过curl发送通知到Mattermost的脚本,需提供Mattermost钩子链接。脚本参数同上,使用以下环境变量:
MATTERMOST_EMOJIMATTERMOST_MESSAGE_TEXTMATTERMOST_TAGS_URLMATTERMOST_HOOK_URLMATTERMOST_USERNAME配置示例
.releaserc.yaml:
yaml--- # ... plugins: # 选择以下其中一种: # ... - path: '@semantic-release/exec' publishCmd: "/scripts/notify-rocketchat.sh -V v${nextRelease.version} -o '--insecure' -d" # ... - path: '@semantic-release/exec' publishCmd: "/scripts/notify-mattermost.sh -V v${nextRelease.version} -o '--insecure' -d" # ...
.gitlab-ci.yml:
yaml--- release: # 选择以下其中一种: # ... variables: ROCKETCHAT_NOTIFY_TOKEN: "隐藏的CI变量,不暴露令牌" ROCKETCHAT_EMOJI: ":tada:" ROCKETCHAT_MESSAGE_TEXT: "项目 ${CI_PROJECT_NAME} 的新标签由 ${GITLAB_USER_NAME} 创建。" ROCKETCHAT_HOOK_URL: "https://rocketchat.example.com/hooks/${ROCKETCHAT_NOTIFY_TOKEN}" ROCKETCHAT_TAGS_URL: "${CI_PROJECT_URL}/-/tags" # ... MATTERMOST_NOTIFY_TOKEN: "隐藏的CI变量,不暴露令牌" MATTERMOST_EMOJI: ":tada:" MATTERMOST_MESSAGE_TEXT: "项目 ${CI_PROJECT_NAME} 的新标签由 ${GITLAB_USER_NAME} 创建。" MATTERMOST_HOOK_URL: "https://mattermost.example.com/hooks/${MATTERMOST_NOTIFY_TOKEN}" MATTERMOST_TAGS_URL: "${CI_PROJECT_URL}/-/tags" MATTERMOST_USERNAME: "Semantic Release [Bot]" # ...
通知效果示例:
text15:07 🤖 bot-account: A new tag for the project dummy-module was created by Jon Doe. Release v1.2.3
如需在容器中使用自定义证书,可通过入口点脚本添加。导出CERT_JSON环境变量,容器将在运行时导入证书。证书应为包含PEM格式证书的JSON哈希,建议压缩为单行。可在Github/Gitlab的CI变量中配置。
示例JSON:
json{"certificates":{"root_ca":"-----BEGIN CERTIFICATE-----\n...","signing_ca":"-----BEGIN CERTIFICATE-----\n..."}}
更多详情参见container-entrypoint.sh和container-entrypoint.d。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务