环境变量
Woodpecker 提供了向各个管道步骤传递环境变量的能力。请注意,这些变量不能覆盖任何现有的内置变量。带有自定义环境变量的示例管道步骤:
steps:
- name: build
image: golang
+ environment:
+ CGO: 0
+ GOOS: linux
+ GOARCH: amd64
commands:
- go build
- go test
请注意,环境部分无法展开环境变量。如果您需要展开变量,应该在命令部分中导出它们。
steps:
- name: build
image: golang
- environment:
- - PATH=$PATH:/go
commands:
+ - export PATH=$PATH:/go
- go build
- go test
注意
${variable} 表达式会被预处理。如果您不希望预处理器评估您的表达式,必须对其进行转义:
steps:
- name: build
image: golang
commands:
- - export PATH=${PATH}:/go
+ - export PATH=$${PATH}:/go
- go build
- go test
内置环境变量
这是管道容器可用的所有环境变量的参考列表。这些变量在运行时注入到您的管道步骤和插件容器中。
| 名称 | 描述 | 示例 |
|---|---|---|
CI | CI 环境名称 | woodpecker |
| 仓库 | ||
CI_REPO | 仓库全名 <owner>/<name> | john-doe/my-repo |
CI_REPO_OWNER | 仓库所有者 | john-doe |
CI_REPO_NAME | 仓库名称 | my-repo |
CI_REPO_REMOTE_ID | 仓库远程 ID,是它在代码托管平台中的 UID | 82 |
CI_REPO_URL | 仓库网页 URL | https://git.example.com/john-doe/my-repo |
CI_REPO_CLONE_URL | 仓库克隆 URL | https://git.example.com/john-doe/my-repo.git |
CI_REPO_CLONE_SSH_URL | 仓库 SSH 克隆 URL | git@git.example.com:john-doe/my-repo.git |
CI_REPO_DEFAULT_BRANCH | 仓库默认分支 | main |
CI_REPO_PRIVATE | 仓库是否私有 | true |
CI_REPO_TRUSTED_NETWORK | 仓库是否具有受信任的网络访问权限 | false |
CI_REPO_TRUSTED_VOLUMES | 仓库是否具有受信任的卷访问权限 | false |
CI_REPO_TRUSTED_SECURITY | 仓库是否具有受信任的安全访问权限 | false |
| 当前提交 | ||
CI_COMMIT_SHA | 提交 SHA | eba09b46064473a1d345da7abf28b477468e8dbd |
CI_COMMIT_REF | 提交引用 | refs/heads/main |
CI_COMMIT_REFSPEC | 提交引用规范 | issue-branch:main |
CI_COMMIT_BRANCH | 提交分支(对于拉取请求等于目标分支) | main |
CI_COMMIT_SOURCE_BRANCH | 提交源分支(仅对 pull_request 和 pull_request_closed 事件设置) | issue-branch |
CI_COMMIT_TARGET_BRANCH | 提交目标分支(仅对 pull_request 和 pull_request_closed 事件设置) | main |
CI_COMMIT_TAG | 提交标签名称(如果事件不是 tag 则为空) | v1.10.3 |
CI_COMMIT_PULL_REQUEST | 提交拉取请求编号(仅对 pull_request 和 pull_request_closed 事件设置) | 1 |
CI_COMMIT_PULL_REQUEST_LABELS | 分配给拉取请求的标签(仅对 pull_request 和 pull_request_closed 事件设置) | server |
CI_COMMIT_PULL_REQUEST_MILESTONE | 分配给拉取请求的里程碑(仅对 pull_request 和 pull_request_closed 事件设置) | summer-sprint |
CI_COMMIT_MESSAGE | 提交消息 | Initial commit |
CI_COMMIT_AUTHOR | 提交作者用户名 | john-doe |
CI_COMMIT_AUTHOR_EMAIL | 提交作者邮箱地址 | john-doe@example.com |
CI_COMMIT_PRERELEASE | 发布是否为预发布(如果事件不是 release 则为空) | false |
| 当前管道 | ||
CI_PIPELINE_NUMBER | 管道编号 | 8 |
CI_PIPELINE_PARENT | 父管道编号 | 0 |
CI_PIPELINE_EVENT | 管道事件(参见 event) | push, pull_request, pull_request_closed, tag, release, manual, cron |
CI_PIPELINE_URL | 管道的 Web UI 链接 | https://ci.example.com/repos/7/pipeline/8 |
CI_PIPELINE_FORGE_URL | 触发管道的提交或标签在代码托管平台的 Web UI 链接 | https://git.example.com/john-doe/my-repo/commit/eba09b46064473a1d345da7abf28b477468e8dbd |
CI_PIPELINE_DEPLOY_TARGET | deployment 事件的管道部署目标 | production |
CI_PIPELINE_DEPLOY_TASK | deployment 事件的管道部署任务 | migration |
CI_PIPELINE_CREATED | 管道创建的 UNIX 时间戳 | 1722617519 |
CI_PIPELINE_STARTED | 管道开始的 UNIX 时间戳 | 1722617519 |
CI_PIPELINE_FILES | 更改的文件(如果事件不是 push 或 pull_request 则为空),如果超过 500 个文件被触及则未定义 | [], [".woodpecker.yml","README.md"] |
CI_PIPELINE_AUTHOR | 管道作者用户名 | octocat |
CI_PIPELINE_AVATAR | 管道作者头像 | https://git.example.com/avatars/5dcbcadbce6f87f8abef |
| 当前工作流 | ||
CI_WORKFLOW_NAME | 工作流名称 | release |
| 当前步骤 | ||
CI_STEP_NAME | 步骤名称 | build package |
CI_STEP_NUMBER | 步骤编号 | 0 |
CI_STEP_STARTED | 步骤开始的 UNIX 时间戳 | 1722617519 |
CI_STEP_URL | UI 中步骤的 URL | https://ci.example.com/repos/7/pipeline/8 |
| 上一次提交 | ||
CI_PREV_COMMIT_SHA | 上一次提交 SHA | 15784117e4e103f36cba75a9e29da48046eb82c4 |
CI_PREV_COMMIT_REF | 上一次提交引用 | refs/heads/main |
CI_PREV_COMMIT_REFSPEC | 上一次提交引用规范 | issue-branch:main |
CI_PREV_COMMIT_BRANCH | 上一次提交分支 | main |
CI_PREV_COMMIT_SOURCE_BRANCH | 上一次提交源分支(仅对 pull_request 和 pull_request_closed 事件设置) | issue-branch |
CI_PREV_COMMIT_TARGET_BRANCH | 上一次提交目标分支(仅对 pull_request 和 pull_request_closed 事件设置) | main |
CI_PREV_COMMIT_URL | 上一次提交在代码托管平台的链接 | https://git.example.com/john-doe/my-repo/commit/15784117e4e103f36cba75a9e29da48046eb82c4 |
CI_PREV_COMMIT_MESSAGE | 上一次提交消息 | test |
CI_PREV_COMMIT_AUTHOR | 上一次提交作者用户名 | john-doe |
CI_PREV_COMMIT_AUTHOR_EMAIL | 上一次提交作者邮箱地址 | john-doe@example.com |
| 上一个管道 | ||
CI_PREV_PIPELINE_NUMBER | 上一个管道编号 | 7 |
CI_PREV_PIPELINE_PARENT | 上一个管道的父管道编号 | 0 |
CI_PREV_PIPELINE_EVENT | 上一个管道事件(参见 event) | push, pull_request, pull_request_closed, tag, release, manual, cron |
CI_PREV_PIPELINE_URL | 上一个管道在 CI 中的链接 | https://ci.example.com/repos/7/pipeline/7 |
CI_PREV_PIPELINE_FORGE_URL | 上一个管道在代码托管平台中的事件链接 | https://git.example.com/john-doe/my-repo/commit/15784117e4e103f36cba75a9e29da48046eb82c4 |
CI_PREV_PIPELINE_DEPLOY_TARGET | deployment 事件的上一个管道部署目标 | production |
CI_PREV_PIPELINE_DEPLOY_TASK | deployment 事件的上一个管道部署任务 | migration |
CI_PREV_PIPELINE_STATUS | 上一个管道状态 | success, failure |
CI_PREV_PIPELINE_CREATED | 上一个管道创建的 UNIX 时间戳 | 1722610173 |
CI_PREV_PIPELINE_STARTED | 上一个管道开始的 UNIX 时间戳 | 1722610173 |
CI_PREV_PIPELINE_FINISHED | 上一个管道完成的 UNIX 时间戳 | 1722610383 |
CI_PREV_PIPELINE_AUTHOR | 上一个管道作者用户名 | octocat |
CI_PREV_PIPELINE_AVATAR | 上一个管道作者头像 | https://git.example.com/avatars/5dcbcadbce6f87f8abef |
CI_WORKSPACE | 源代码被克隆到的工作空间路径 | /woodpecker/src/git.example.com/john-doe/my-repo |
| 系统 | ||
CI_SYSTEM_NAME | CI 系统名称 | woodpecker |
CI_SYSTEM_URL | CI 系统链接 | https://ci.example.com |
CI_SYSTEM_HOST | CI 服务器主机名 | ci.example.com |
CI_SYSTEM_VERSION | 服务器版本 | 2.7.0 |
| 代码托管平台 | ||
CI_FORGE_TYPE | 代码托管平台名称 | bitbucket , bitbucket_dc , forgejo , gitea , github , gitlab |
CI_FORGE_URL | 配置的代码托管平台根 URL | https://git.example.com |
| 内部 - 请不要使用! | ||
CI_SCRIPT | 内部脚本路径。用于调用管道步骤命令。 | |
CI_NETRC_USERNAME | 私有仓库的凭据,能够克隆数据。(仅适用于特定镜像) | |
CI_NETRC_PASSWORD | 私有仓库的凭据,能够克隆数据。(仅适用于特定镜像) | |
CI_NETRC_MACHINE | 私有仓库的凭据,能够克隆数据。(仅适用于特定镜像) |
全局环境变量
如果您希望特定环境变量在所有管道中可用,请在 Woodpecker 服务器上使用 WOODPECKER_ENVIRONMENT 设置。请注意,这些变量不能覆盖任何现有的内置变量。
WOODPECKER_ENVIRONMENT=first_var:value1,second_var:value2
例如,这些可以用于管理多个项目使用的镜像标签。
WOODPECKER_ENVIRONMENT=GOLANG_VERSION:1.18
steps:
- name: build
- image: golang:1.18
+ image: golang:${GOLANG_VERSION}
commands:
- [...]
字符串替换
Woodpecker 提供了在运行时替换环境变量的能力。这使我们能够在管道配置中使用动态设置、命令和过滤器。
提交替换示例:
steps:
- name: s3
image: woodpeckerci/plugin-s3
settings:
+ target: /target/${CI_COMMIT_SHA}
标签替换示例:
steps:
- name: s3
image: woodpeckerci/plugin-s3
settings:
+ target: /target/${CI_COMMIT_TAG}
字符串操作
Woodpecker 还模拟 bash 字符串操作。这使我们能够在替换之前操作字符串。示例用例可能包括子字符串以及剥离前缀或后缀值。
| 操作 | 描述 |
|---|---|
${param} | 参数替换 |
${param,} | 参数替换,首字符小写 |
${param,,} | 参数替换为小写 |
${param^} | 参数替换,首字符大写 |
${param^^} | 参数替换为大写 |
${param:pos} | 参数替换为子字符串 |
${param:pos:len} | 参数替换为子字符串和长度 |
${param=default} | 参数替换为默认值 |
${param##prefix} | 参数替换并移除前缀 |
${param%%suffix} | 参数替换并移除后缀 |
${param/old/new} | 参数替换并查找替换 |
带有子字符串的变量替换示例:
steps:
- name: s3
image: woodpeckerci/plugin-s3
settings:
+ target: /target/${CI_COMMIT_SHA:0:8}
变量替换示例,从 v.1.0.0 中去掉 v 前缀:
steps:
- name: s3
image: woodpeckerci/plugin-s3
settings:
+ target: /target/${CI_COMMIT_TAG##v}