
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://github.com/voxpupuli/container-semantic-release/actions/workflows/ci.yaml/badge.svg](https://github.com/voxpupuli/container-semantic-release/actions/workflows/ci.yaml) https://img.shields.io/github/license/voxpupuli/container-semantic-release.svg](https://github.com/voxpupuli/container-semantic-release/blob/main/LICENSE) https://img.shields.io/badge/Sponsored%20by-betadots%20GmbH-blue.svg]([***]
该容器用于创建项目发布,封装了https://semantic-release.gitbook.io/semantic-release%E5%8F%8A%E6%89%80%E6%9C%89%E5%BF%85%E8%A6%81%E6%8F%92%E4%BB%B6%EF%BC%88%E8%AF%A6%E8%A7%81package.json%EF%BC%89%E3%80%82%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E8%BF%90%E8%A1%8C%E5%9C%A8Alpine%E5%AE%B9%E5%99%A8%E4%B8%AD%E7%9A%84npm%E5%BA%94%E7%94%A8%EF%BC%8C%E6%8F%90%E4%BE%9B%E8%87%AA%E5%8A%A8%E5%8C%96%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E3%80%81%E5%8F%98%E6%9B%B4%E6%97%A5%E5%BF%97%E7%94%9F%E6%88%90%E5%92%8C%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B%E3%80%82
更多信息参见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。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务