• 环境变量

环境变量

悟空平台提供了将环境变量传递给单个流水线步骤的能力.示例流水线步骤与自定义环境变量:

pipeline:
  build:
    image: golang
+   environment:
+     - CGO=0
+     - GOOS=linux
+     - GOARCH=amd64
    commands:
      - go build
      - go test

请注意,环境部分无法扩展环境变量. 如果您需要扩展变量,则应在命令部分导出它们.

pipeline:
  build:
    image: golang
-   environment:
-     - PATH=$PATH:/go
    commands:
+     - export PATH=$PATH:/go
      - go build
      - go test

请注意,${variable}表达式要受到预处理. 如果您不希望预处理器评估表达式,则必须转义:

pipeline:
  build:
    image: golang
    commands:
-     - export PATH=${PATH}:/go
+     - export PATH=$${PATH}:/go
      - go build
      - go test

内置环境变量 这是所有可用于流水线容器的环境变量的参考列表. 这些变量在运行时注入到您的流水线步骤和插件容器中.

名称描述
CI=woodpecker环境是 woodpecker
Repository
CI_REPO存储库全名 <owner>/<name>
CI_REPO_OWNER存储库所有者
CI_REPO_NAME存储库名称
CI_REPO_REMOTE_ID存储库远程ID,它在代码托管服务器上的UID
CI_REPO_SCM存储库SCM(git)
CI_REPO_URL存储库Web URL
CI_REPO_CLONE_URL存储库克隆URL
CI_REPO_DEFAULT_BRANCH存储库默认分支(master)
CI_REPO_PRIVATE存储库是私有的
CI_REPO_TRUSTED存储库是受信任的
Current Commit
CI_COMMIT_SHA提交的SHA值
CI_COMMIT_REF提交的引用
CI_COMMIT_REFSPEC提交的引用规范
CI_COMMIT_BRANCH提交的分支(等于拉取请求的目标分支)
CI_COMMIT_SOURCE_BRANCH提交的源分支
CI_COMMIT_TARGET_BRANCH提交的目标分支
CI_COMMIT_TAG提交的标记名称(如果事件不是标记则为空)
CI_COMMIT_PULL_REQUEST提交的拉取请求编号(如果事件不是拉取请求则为空)
CI_COMMIT_PULL_REQUEST_LABELS分配给拉取请求的标签(如果事件不是拉取请求则为空)
CI_COMMIT_URL存储库中的提交链接
CI_COMMIT_MESSAGE提交消息
CI_COMMIT_AUTHOR提交作者用户名
CI_COMMIT_AUTHOR_EMAIL提交作者电子邮件地址
CI_COMMIT_AUTHOR_AVATAR提交作者头像
Current pipeline
CI_PIPELINE_NUMBER流水线编号
CI_PIPELINE_PARENT父流水线编号
CI_PIPELINE_EVENT流水线事件(推送、拉取请求、标记、部署)
CI_PIPELINE_URL推送或标记触发的流水线的Web UI链接
CI_PIPELINE_DEPLOY_TARGET部署事件的目标(如production)
CI_PIPELINE_STATUS流水线状态(成功、失败)
CI_PIPELINE_CREATED流水线创建的UNIX时间戳
CI_PIPELINE_STARTED流水线开始的UNIX时间戳
CI_PIPELINE_FINISHED流水线完成的UNIX时间戳
Current workflow
CI_WORKFLOW_NAME工作流名称
Current step
CI_STEP_NAME步骤名称
CI_STEP_STATUS步骤状态(成功、失败)
CI_STEP_STARTED步骤开始的UNIX时间戳
CI_STEP_FINISHED步骤完成的UNIX时间戳
Previous commit
CI_PREV_COMMIT_SHA前一个提交的SHA值
CI_PREV_COMMIT_REF前一个提交的引用
CI_PREV_COMMIT_REFSPEC前一个提交的引用规范
CI_PREV_COMMIT_BRANCH前一个提交的分支
CI_PREV_COMMIT_SOURCE_BRANCH前一个提交的源分支
CI_PREV_COMMIT_TARGET_BRANCH前一个提交的目标分支
CI_PREV_COMMIT_URL前一个提交在代码托管服务器的链接
CI_PREV_COMMIT_MESSAGE前一个提交的消息
CI_PREV_COMMIT_AUTHOR前一个提交的作者用户名
CI_PREV_COMMIT_AUTHOR_EMAIL前一个提交的作者电子邮件地址
CI_PREV_COMMIT_AUTHOR_AVATAR前一个提交的作者头像
Previous pipeline
CI_PREV_PIPELINE_NUMBER前一个流水线编号
CI_PREV_PIPELINE_PARENT前一个流水线的父流水线编号
CI_PREV_PIPELINE_EVENT前一个流水线的事件(推送、拉取请求、标记、部署)
CI_PREV_PIPELINE_URL前一个流水线的Web UI链接
CI_PREV_PIPELINE_DEPLOY_TARGET部署事件的前一个流水线的目标(如production)
CI_PREV_PIPELINE_STATUS前一个流水线的状态(成功、失败)
CI_PREV_PIPELINE_CREATED前一个流水线创建的UNIX时间戳
CI_PREV_PIPELINE_STARTED前一个流水线开始的UNIX时间戳
CI_PREV_PIPELINE_FINISHED前一个流水线完成的UNIX时间戳
CI_WORKSPACE源代码被克隆到的工件的路径
System
CI_SYSTEM_NAMECI系统的名称:woodpecker
CI_SYSTEM_URLCI系统的链接
CI_SYSTEM_HOSTCI服务器的主机名
CI_SYSTEM_VERSION服务器版本
Forge
CI_FORGE_TYPEForge(如gitea、github等)的名称
CI_FORGE_URL已配置Forge的根URL
Internal - Please don't use!
CI_SCRIPT内部脚本路径.用于调用流水线步骤命令.
CI_NETRC_USERNAME用于能够克隆数据的私有存储库的凭据. (仅适用于特定镜像)
CI_NETRC_PASSWORD用于能够克隆数据的私有存储库的凭据. (仅适用于特定镜像)
CI_NETRC_MACHINE用于能够克隆数据的私有存储库的凭据. (仅适用于特定镜像)

全局环境变量

如果您希望特定的环境变量在所有流水线中都可用,请在悟空服务器上使用 WOODPECKER_ENVIRONMENT 设置.请注意,这些变量不能覆盖任何现有的内置变量.

services:
  woodpecker-server:
    [...]
    environment:
      - [...]
+     - WOODPECKER_ENVIRONMENT=first_var:value1,second_var:value2

这些变量可以用于管理多个项目使用的镜像标签等场景.

重新生成

pipeline:
  build:
-   image: golang:1.18
+   image: golang:${GOLANG_VERSION}
    commands:
      - [...]
    environment:
      - [...]
+     - WOODPECKER_ENVIRONMENT=GOLANG_VERSION:1.18

字符串替换

悟空平台提供了在运行时替换环境变量的能力.这使我们在流水线配置中使用动态设置、命令和过滤器.

示例提交替换:

pipeline:
  docker:
    image: plugins/docker
    settings:
+     tags: ${CI_COMMIT_SHA}

示例标记替换:

pipeline:
  docker:
    image: plugins/docker
    settings:
+     tags: ${CI_COMMIT_TAG}

字符串操作

悟空平台还模拟了bash字符串操作.这使我们能够在替换之前操作字符串.示例用例可能包括子字符串和剥离前缀或后缀值.

操作(OPERATION)描述(DESCRIPTION)
${param}参数替换
${param,}参数替换,小写首字母
${param,,}参数替换,全小写
${param^}参数替换,大写首字母
${param^^}参数替换,全大写
${param:pos}参数替换,子串
${param:pos:len}参数替换,子串及长度
${param=default}参数替换,指定默认值
${param##prefix}参数替换,去除前缀
${param%%suffix}参数替换,去除后缀
${param/old/new}参数替换,使用查找和替换功能

使用子字符串替换变量的示例:

pipeline:
  docker:
    image: plugins/docker
    settings:
+     tags: ${CI_COMMIT_SHA:0:8}

示例变量替换从v.1.0.0中删除v前缀:

pipeline:
  docker:
    image: plugins/docker
    settings:
+     tags: ${CI_COMMIT_TAG##v}