跳到主要内容

环境变量

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

内置环境变量

这是管道容器可用的所有环境变量的参考列表。这些变量在运行时注入到您的管道步骤和插件容器中。

名称描述示例
CICI 环境名称woodpecker
仓库
CI_REPO仓库全名 <owner>/<name>john-doe/my-repo
CI_REPO_OWNER仓库所有者john-doe
CI_REPO_NAME仓库名称my-repo
CI_REPO_REMOTE_ID仓库远程 ID,是它在代码托管平台中的 UID82
CI_REPO_URL仓库网页 URLhttps://git.example.com/john-doe/my-repo
CI_REPO_CLONE_URL仓库克隆 URLhttps://git.example.com/john-doe/my-repo.git
CI_REPO_CLONE_SSH_URL仓库 SSH 克隆 URLgit@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提交 SHAeba09b46064473a1d345da7abf28b477468e8dbd
CI_COMMIT_REF提交引用refs/heads/main
CI_COMMIT_REFSPEC提交引用规范issue-branch:main
CI_COMMIT_BRANCH提交分支(对于拉取请求等于目标分支)main
CI_COMMIT_SOURCE_BRANCH提交源分支(仅对 pull_requestpull_request_closed 事件设置)issue-branch
CI_COMMIT_TARGET_BRANCH提交目标分支(仅对 pull_requestpull_request_closed 事件设置)main
CI_COMMIT_TAG提交标签名称(如果事件不是 tag 则为空)v1.10.3
CI_COMMIT_PULL_REQUEST提交拉取请求编号(仅对 pull_requestpull_request_closed 事件设置)1
CI_COMMIT_PULL_REQUEST_LABELS分配给拉取请求的标签(仅对 pull_requestpull_request_closed 事件设置)server
CI_COMMIT_PULL_REQUEST_MILESTONE分配给拉取请求的里程碑(仅对 pull_requestpull_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管道事件(参见 eventpush, 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_TARGETdeployment 事件的管道部署目标production
CI_PIPELINE_DEPLOY_TASKdeployment 事件的管道部署任务migration
CI_PIPELINE_CREATED管道创建的 UNIX 时间戳1722617519
CI_PIPELINE_STARTED管道开始的 UNIX 时间戳1722617519
CI_PIPELINE_FILES更改的文件(如果事件不是 pushpull_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_URLUI 中步骤的 URLhttps://ci.example.com/repos/7/pipeline/8
上一次提交
CI_PREV_COMMIT_SHA上一次提交 SHA15784117e4e103f36cba75a9e29da48046eb82c4
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_requestpull_request_closed 事件设置)issue-branch
CI_PREV_COMMIT_TARGET_BRANCH上一次提交目标分支(仅对 pull_requestpull_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上一个管道事件(参见 eventpush, 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_TARGETdeployment 事件的上一个管道部署目标production
CI_PREV_PIPELINE_DEPLOY_TASKdeployment 事件的上一个管道部署任务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_NAMECI 系统名称woodpecker
CI_SYSTEM_URLCI 系统链接https://ci.example.com
CI_SYSTEM_HOSTCI 服务器主机名ci.example.com
CI_SYSTEM_VERSION服务器版本2.7.0
代码托管平台
CI_FORGE_TYPE代码托管平台名称bitbucket , bitbucket_dc , forgejo , gitea , github , gitlab
CI_FORGE_URL配置的代码托管平台根 URLhttps://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}