@ codedependant/ semantic- release- docker (英语)
A 类 语义释放 对嵌入器图像使用语义化版本的插件 .
支持的步骤
校验条件
验证通过用户名和密码进行认证的环境变量. 它使用一个通过配置或环境变量(首选)提供的注册服务器,或者默认在不给出的情况下使用嵌入器中枢. 它还通过登录到特定登记册核实证书正确无误.
准备
使用指定的嵌入器文件和上下文构建图像。 此图像将在后期步骤中用于创建标记
发布
将带有指定标记的图像推到注册处.
标记支持简单的导出 手柄栏. 括号中的数值 {{}} 将替换为发布上下文信息
安装
运行 npm i --save-dev @codedependant/semantic-release-docker 安装此语义释放插件.
配置
Docker 注册认证
认证到 a docker registry 通过环境变量设置。 不需要,如果
中,它被假定在目标注册处已经认证了 docker 守护进程 .
环境变量
| 变量 | 说明 |
|---|---|
| 登记时间: | 在登记处进行认证的用户名. |
| 密码: | 用于登记册认证的密码. |
选项
| 选项 | 说明 | 类型 | 默认 |
|---|---|---|---|
dockerTags | 可选。可以指定用于图像的额外标记的字符串。 支持调制 | 阵列<字符串> 翻译: | [latest, (中文(简体) ), {{major}}-latest, (中文(简体) ), {{version}}[ . ] |
dockerImage | 可选。要释放的图像名称. | 字符串 | 从 package.json 解析 name 属性 |
dockerRegistry | 可选。登记册格式中所使用的主机名和端口 hostname[:port]如果注册使用默认端口,则关闭端口 | 字符串 | null (鸟叫声) |
dockerProject | 可选。将图像发布到 | 字符串 | 对于范围包,将使用范围,否则 null |
dockerPlatform | 可选。列出要建造的目标平板电脑。 如果指定, 构建x 用于生成最终图像 | 阵列<字符串> 翻译: | null (默认嵌入器构建行为) |
dockerFile | 可选路径,相对于 $PWD 创建目标图像 | 字符串 | Dockerfile |
dockerContext | 可选路径,相对于 $PWD 用作建构上下文A | 字符串 | . |
dockerLogin | 可选。如果点球守护进程已经获得授权,则设定通过点球登录来伪造它 | 字符串 | true |
dockerArgs | 可选中包含嵌入器的额外值 build-arg。支持调温 | 对象 | |
dockerPublish | 可选。在发布阶段自动推动图像标记. | 布尔 | true |
dockerVerifyCmd | 可选如果指定,在验证阶段,指定的命令将在构建图像的容器中执行。 如果命令出错,则发布失败. | 字符串 | false |
dockerNetwork | 可选。指定图像构建时要使用的多克网络。 设置此值为 null 明确从构建命令中删除网络旗 | 字符串 | default |
dockerAutoClean | 可选。如果设置为真 | 布尔 | true |
dockerBuildFlags | 可选中添加标记的对象 docker build 命令。 值可以是字符串或一系列字符串 | 对象 | {} |
dockerBuildCacheFrom | 可选。外部缓存来源列表。 见 --cache - from (从) | 字符串 | 阵列<字符串> 翻译: |
构建X 支持
5.X版本包括通过该版本对多平台图像的初步和实验支持 构建x 插件 . 此插件假设已正确设置了 Docker 守护进程和 builtx . 必须为此插件设置和选择平台特定构建器以使用 构建x
[尖叫声]
在通过多克Platform 选项使用 builtx 时, 图像不保存在本地 而针对这些图像的普通道克命令不会成功. 这个
dockerVerifyCmd行为只触发构建, 无法执行本地命令
证明书
当推进注册时, 构建x 附上a 来源证明 (单位:千美元)mode=min改为:
默认图像索引。 这额外 unknown/unknown 显示在指数上,有些
登记册和集装箱运行时间完全拒绝----特别是AWS Lambda集装箱图像.
证明(和SBOM)的证明可以通过 dockerBuildFlags数字 :
{
dockerBuildFlags: {
provenance: false
, sbom: false
}
}
或者设置 BUILDX_NO_DEFAULT_ATTESTATIONS=true 在环境中,释放会进入.
构建参数
默认情况下,在建起嵌入器图像时会包含几个构建参数 .
构建参数可以和道克标记一样被模板. 如果一个值
构建参数是明确的 true中,该值将被省略,该值来自
将取而代之的是相应的环境变量。 这在试图纳入时可能有用
机密和其他敏感信息
| 参数名称 | 说明 | 默认 |
|---|---|---|
SRC_DIRECTORY | 该构建的目录是从 | CWD 的目录名称 |
TARGET_PATH | 相对于执行根的路径 。 用于在单重机中共享单个嵌入器文件 | |
NPM_PACKAGE_NAME | 这个 name 从 package.json - 如果有的话 | |
NPM_PACKAGE_SCOPE | 从 name 属性从 package.json - 萨斯 @ | |
CONFIG_NAME | 嵌入器图像的已配置名称 . | 解析的软件包名称 |
CONFIG_PROJECT | 配置的 Docker Repo 工程名称 | 如果有包范围 |
GIT_SHA | 当前发行的 SHA 承诺 | |
GIT_TAG | 当前发行的 git 标签 |
模板变量
字符串模板将会通过这些
| 可变名称 | 说明 | 类型 |
|---|---|---|
git_sha | 当前发行的 SHA 承诺 | 字符串 |
git_tag | 当前发行的 git 标签 | 字符串 |
release_type | 当前建筑的重度类型(major, (中文(简体) ), minor, (中文(简体) ), patch(中文(简体) ) | 字符串 |
release_notes | 发行笔记与发行相关的blob | 字符串 |
next | 代表下次发行的 semver 对象 | 对象 |
previous | 代表上次发行的 semver 对象 | 对象 |
major | 下次发行的主要版本 | 数目 |
minor | 下次发行的小版本 | 数目 |
patch | 下次发行的补丁版本 | 数目 |
prerelease | 下一次发行的预发版本 | 阵列<数目> 翻译: |
env | 构建时设定的环境变量 | 对象 |
pkg | 从 package.json | 对象 |
build | 代表当前执行背景的随机构建散列 | 字符串 |
now | 当前的时间戳是 ISO 8601 格式 | 字符串 |
模板帮助
以下手柄栏模板帮助器已预先安装
| 帮助者名称 | 说明 | 返回类型 | 示例 |
|---|---|---|---|
endswith | 如果字符串以另一个结尾, 返回正则 | 布尔 | {{#if (endswith myvar 'ing')}}{{ othervar }}{{/if}} |
eq | 如果两个值严格对等,则返回为真 | 布尔 | {{#if (eq var_one var_two)}}{{ var_three }}{{/if}} |
gt | 如果第一个值大于第二个值,则返回正数 | 布尔 | {{#if (gt var_one var_two)}}{{ var_three }}{{/if}} |
gte | 如果第一个值大于或等于第二个值,则返回正数 | 布尔 | {{#if (gte var_one var_two)}}{{ var_three }}{{/if}} |
includes | 如果输入(字符串qq阵列)包含第二个值,则返回正数 | 布尔 | {{#if (includes some_array 'one')}}{{ var_one }}{{/if}} |
lower | 返回输入字符串的下大小写变量 | 字符串 | {{ lower my_var }} |
lt | 如果第一个值小于第二个,则返回正数 | 布尔 | {{#if (lt var_one var_two)}}{{ var_three }}{{/if}} |
lte | 如果第一个值小于或等于第二个值,则返回正数 | 布尔 | {{#if (lte var_one var_two)}}{{ var_three }}{{/if}} |
neq | 如果两个值不相等则返回为正 | 布尔 | {{#if (neq var_one var_two)}}{{ var_three }}{{/if}} |
pick | 返回第一个非无效值。 会请客的 false 作为值 | any | {{#with (pick var_one, var_two) as | value |}}{{ value }}{{/with}} |
split | 将 csv 值分割为 javascript 数组 | 阵列 | {{#each (split csv_value)}}{{ this }}{{/each}} |
startswith | 如果字符串从另一个开始, 返回正则 | 布尔 | {{#if (starts myvar 'foo')}}{{ othervar }}{{/if}} |
upper | 返回输入字符串的上大小写变量 | 字符串 | {{upper my_var}} |
构建旗帜
使用 dockerBuildFlags 选项允许您向构建命令传递任意的旗帜.
如果标准选项不够, dockerBuildFlags 是一个完美的工作
直到可以添加头等舱支持。 这是考虑和先进的功能,你应该
在使用之前,你知道你打算做什么。 没有验证,也没有配置
需要的多克守护进程预计将在手前完成 .
在其中找到密钥 dockerBuildFlags 以下列方式作为命令行旗正常化:
- 如果密钥不是以一个开头
-准备就绪 - 所有意外情况
_将重写为- - 单字母密钥被认为是简指如.
p变成-p - 多字母键被认为是长形式,例如.
foo_bar变成--foo-bar - 如果值是数组,则每次发生时会重现旗子
- A 类
null值可能用于省略值并仅注入旗帜本身
示例
{
plugins: [
['@codedependant/semantic-release-docker', {
dockerImage: 'my-image',
dockerRegistry: 'quay.io',
dockerProject: 'codedependant',
dockerCacheFrom: 'myname/myapp'
dockerBuildFlags: {
pull: null
, target: 'release'
},
dockerArgs: {
GITHUB_TOKEN: null
}
}]
]
}
此配置将生成以下构建命令
> docker build --network=default --quiet --tag quay.io/codedependant/my-image:abc123 --cache-from myname/myapp --build-arg GITHUB_TOKEN --pull --target release -f path/to/repo/Dockerfile /path/to/repo
使用量
完整配置数字 :
// release.config.js
module.exports = {
branches: ['main']
plugins: [
['@codedependant/semantic-release-docker', {
dockerTags: ['latest', '{{version}}', '{{major}}-latest', '{{major}}.{{minor}}'],
dockerImage: 'my-image',
dockerFile: 'Dockerfile',
dockerRegistry: 'quay.io',
dockerProject: 'codedependant',
dockerPlatform: ['linux/amd64', 'linux/arm64']
dockerBuildFlags: {
pull: null
, target: 'release'
},
dockerArgs: {
API_TOKEN: null
, RELEASE_DATE: new Date().toISOString()
, RELEASE_VERSION: '{{next.version}}'
}
}]
]
}
结果 quay.io/codedependant/my-image 带有标签 latest, (中文(简体) ), 1.0.0, (中文(简体) ), 1-latest 编辑 1.0 由 semantic-release。 。 。 .
或者,使用全局选项 w/ 根配置
// package.json
{
"name": "@codedependant/test-project"
"version": "1.0.0"
"release": {
"extends": "@internal/release-config-docker",
"dockerTags": ["latest", "{{version}}", "{{major}}-latest", "{{major}}.{{minor}}"],
"dockerImage": "my-image",
"dockerFile": "Dockerfile",
"dockerRegistry": "quay.io",
"dockerArgs": {
"GITHUB_TOKEN": null
, "SOME_VALUE": '{{git_sha}}'
}
}
}
这将产生以下结果: 1.2.0 构建
$ docker build -t quay.io/codedependant/my-image --build-arg GITHUB_TOKEN --build-arg SOME_VALUE=6eada70 -f Dockerfile .
$ docker tag <SHA1> latest
$ docker tag <SHA1> 1.2.0
$ docker tag <SHA1> 1.2
$ docker tag <SHA1> 1-latest
$ docker push quay.io/codedependant/my-image
最小配置数字 :
{
"release": {
"plugins": [
"@codedependant/semantic-release-docker"
]
}
}
- 一个软件包名称
@codedependant/test-project居克项目名称的结果codedependant图像名称test-project - 一个软件包名称
test-project生成一个嵌入器图像名称test-project
用于 1. 0.0 释放的默认嵌入器图像标记为 1.0.0, (中文(简体) ), 1-latest, (中文(简体) ), latest
示例预释配置数字 :
{
"release": {
"dockerTags": [
"{{#if prerelease.[0]}}{{prerelease.[0]}}{{else}}latest{{/if}}",
"{{major}}-{{#if prerelease.[0]}}{{prerelease.[0]}}{{else}}latest{{/if}}",
"{{major}}.{{minor}}-{{#if prerelease.[0]}}{{prerelease.[0]}}{{else}}latest{{/if}}",
"{{version}}"
]
}
}
版本的嵌入标记 1.2.3 将会是 1.2.3, (中文(简体) ), 1.2-latest, (中文(简体) ), 1-latest 财务报告和审定财务报表 latest
版本的嵌入标记 2.3.4-beta.6 将会是 2.3.4-beta.6, (中文(简体) ), 2.3-beta, (中文(简体) ), 2-beta 财务报告和审定财务报表 beta
GitHub 动作
通过曝光多个输出和环境变量,该插件对 github 动作有一些基本支持 在出版阶段
[尖叫声]
当使用builtx图像 shas时,每个平台都不同,因此直接使用 shas 不支持,并可能导致出乎意料的结果.
产出
| 名称 | 说明 | 实例 |
|---|---|---|
docker_image | 包括注册在内的嵌入器图像的全名,提供任何标签信息 | quay.io/编码依赖者/我的图像 |
docker_image_build_id | 发布时用于初始构建图像的独特构建 ID | |
docker_image_sha_short | 适合引用图像的图像 sha 值的短版本 | b94d27b9934d3e0 |
docker_image_sha_long | 指向发布时所建图像的全sha256值 | b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 |
环境变量
| 名称 | 说明 | 实例 |
|---|---|---|
SEMANTIC_RELEASE_DOCKER_IMAGE | 包括注册在内的嵌入器图像的全名,提供任何标签信息 | quay.io/编码依赖者/我的图像 |
SEMANTIC_RELEASE_DOCKER_IMAGE_BUILD_ID | 发布时用于初始构建图像的独特构建 ID | |
SEMANTIC_RELEASE_DOCKER_IMAGE_SHA_SHORT | 适合引用图像的图像 sha 值的短版本 | b94d27b9934d3e0 |
SEMANTIC_RELEASE_DOCKER_IMAGE_SHA_LONG | 指向发布时所建图像的全sha256值 | b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 |
发展
Docker 书记官处
为了能够将认证证书推入本地登记册,需要sl证书. 此项目使用自签名的证书 。 重新生成证书运行如下:
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout server.key -out server.crt
页:1:当要求国防军时,必须是 registry:5000
页:1: 当地登记册的全权证书为: 用户 : iamweasel, (中文(简体) ), 过: secretsquirrel