本文示例的k8s配置文件路径:
# 这里自定义字段,在后文中使用
variables:
# drone.yml repo: "hbdev.wataru.com/wataru/fe-site-staging"
# DOCKER_IMAGE_NAME是repo的地址中,除去域名的剩下部分
# drone.yml - kubectl apply -f ./k8s/st-mock.yaml -n wataru
# xx_K8S_NAMESPACE 是 -n 后的值,-n指 -namespace
# xx_DEPLOYMENT_NAME 在drone.yml中的 - kubectl rollout restart deployment fe-site-mock -n wataru 查看 “deployment”后的“fe-site-mock”就是 deployment_name
# 在harbor官网建立自己的仓库,比如示例:hbdev.wataru.com,在仓库下建立目录wataru,将本次镜像上传到https://hbdev.wataru.com/wataru/下
# 在这里区分了三种版本:1、标准版(通用版本)2、私有化版(为专门的客户精细功能)3、演示版(数据都是虚拟的,只展示UI和交互)
# 标准版:正式环境、预发环境、测试环境
# 正式:harbor.wataru.com/wataru/fe-site:1.1.1
# 预发:harbor.wataru.com/wataru/fe-site:staging
# 测试:hbdev.wataru.com/wataru/fe-site:testing
# 私有化版:正式环境、预发环境、测试环境
# 正式:harbor.wataru.com/wataru/fe-site-staging:1.1.1-ka
# 预发:hbdev.wataru.com/wataru/fe-site-staging:staging
# 测试:hbdev.wataru.com/wataru/fe-site-ka-testing
# 演示版:正式环境、预发环境、测试环境
# 正式:harbor.wataru.com/wataru/fe-site-demo:1.1.1-demo
# 测试:hbdev.wataru.com/wataru/fe-site-mock:testing
DOCKER_IMAGE_NAME: wataru/fe-site # 通用的 docker 镜像名称地址
STAGING_DOCKER_IMAGE_NAME: wataru/fe-site # 标准版预发环境 docker 镜像名称地址,"hbdev.wataru.com/wataru/fe-site"除去域名的剩下部分
TESTING_DOCKER_IMAGE_NAME: wataru/fe/fe-site # 标准版测试环境 docker 镜像名称地址
MOCK_DOCKER_IMAGE_NAME: wataru/fe-site-mock # 演示版测试环境 docker 镜像名称地址
DEMO_DOCKER_IMAGE_NAME: wataru/fe-site-demo # 演示版正式环境 docker 镜像名称地址
KA_DOCKER_IMAGE_NAME: wataru/fe-site-staging # 私有化交付 docker 镜像名称
KA_DOCKER_IMAGE_NAME_TESTING: wataru/fe/fe-site-ka-testing # 私有化测试 docker 镜像名称
# 在kubernetes中的命名空间namespace可以用来批量部署镜像,如果想有规划地部署,可以创建多个分类的namespace命名空间,在不同namespace部署不同的分类,比如预发环境(所有项目)/测试环境(所有项目),或者某个项目(包括xx环境/xx环境等)。
# 在kubernetes中有多个命名空间namespace,namespace可以当做是某个xx环境,比如测试/预发/正式等。同一个环境的前后端的镜像,放在同一个namespace中。
# 我的namespace命名空间是wataru,我用来做预发环境,deployment就是我要部署的镜像项目名称
# namespace: wataru
# deployment: fe-site (网站),fe-mobile(移动端) 等,deployment下的名称是自己定义的,叫啥都行
STAGING_K8S_NAMESPACE: wataru # 标准版预发环境命名空间,可在drone.yml中的 - kubectl apply -f ./k8s/ka-testing.yaml -n wataru,查看
TESTING_K8S_NAMESPACE: wataru # 标准版测试环境命名空间,
KA_TESTING_K8S_NAMESPACE: ka-testing # 私有化版-测试环境 K8S 命名空间,可在drone.yml中的 - kubectl apply -f ./k8s/ka-testing.yaml -n ka-testing,查看
KA_STAGING_K8S_NAMESPACE: wataru-stable # 私有化版-预发环境 K8S 命名空间,可在drone.yml中的 - kubectl apply -f ./k8s/ka-staging.yaml -n wataru-stable 查看
MOCK_TESTING_DEPLOYMENT_NAME: fe-site-mock # 演示版-测试环境-deployment的名称,跟deployment里要对上,要么yaml里用占位符,在drone.yml中的 - kubectl rollout restart deployment fe-site-mock -n wataru 查看 “deployment”后的“fe-site-mock”就是 deployment_name
TESTING_DEPLOYMENT_NAME: fe-site # 标准版-测试环境-deployment的名称,跟kubernetes的namespace命名空间下的deployment里的名称要对上,要么yaml里用占位符
STAGING_DEPLOYMENT_NAME: fe-site # 标准版-测试环境-deployment的名称,跟kubernetes的namespace命名空间下的deployment里的名称要对上,要么yaml里用占位符
KA_TESTING_DEPLOYMENT_NAME: fe-site # 私有化版-测试环境-deployment名称, 跟kubernetes的namespace命名空间下的deployment里的名称要对上,要么yaml里用占位符
KA_STAGING_DEPLOYMENT_NAME: fe-site # 私有化版-预发环境-deployment名称,跟kubernetes的namespace命名空间下的deployment里的名称要对上,要么yaml里用占位符
# 打docker镜像的Dockerfile配置文件
PRODUCTION_DOCKERFILE: Dockerfile # 正式环境打docker镜像的Dockerfile文件
STAGING_DOCKERFILE: Dockerfile.rel # 预发/测试(开发过程不断更新镜像时用这个)环境打docker镜像的Dockerfile文件,这里没用上
TESTING_DOCKERFILE: Dockerfile.testing # 测试环境打docker镜像的Dockerfile文件
KA_TESTING_DOCKERFILE: Dockerfile.testing # 私有化版-测试环境-dockerfile打包文件
KA_PRODUCTION_DOCKERFILE: Dockerfile # 私有化版-预发/正式环境-dockerfile打包文件
STATIC_PUBLIC_PATH: /wataru/1.0 # 静态资源上传的地址oss
# 下面一般不需要动
stages:
- check
- build
- deploy
- test
# ========================= check =========================
opensca-check:
stage: check
tags:
- "check"
image: hbdev.wataru.com/dev/opensca:1.0.9
script:
- /usr/local/bin/opensca-scan.sh
only:
- merge_requests
- master
# - develop
# - /^testing\/*/
- /^staging.*/
- /^feature\/*/
- /^hotfix\/*/
sonarqube-check:
stage: check
tags:
- "check"
image: sonarsource/sonar-scanner-cli:4.6
allow_failure: true # 能强制的时候把这个干掉
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "SONAR_${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
# 暂时不强求
- |
if [ -f "sonar-project.properties" ];then
sonar-scanner -Dsonar.sources=. -Dsonar.branch.name=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
fi
only:
- merge_requests
- master
- /^staging*/
# ========================= build =========================
docker-build:
# Use the official docker image.
image:
name: docker:20.10.17
#pull_policy: if-not-present
stage: build
tags:
- "frontend" # golang: go后端项目,frontend:前端项目,php: PHP项目
services:
- docker:20.10.17-dind
cache:
key: "BUILD_DOCKER_${CI_JOB_NAME}"
paths:
- .docker/cache
before_script:
# HARBOR_REGISTRY:harbor仓库地址,HARBOR_USERNAME:harbor仓库用户名,HARBOR_PASSWORD:harbor仓库登录密码
# PRODUCTION_HARBOR_REGISTRY
# PRODUCTION_HARBOR_USERNAME
# PRODUCTION_HARBOR_PASSWORD
# TESTING_HARBOR_REGISTRY
# TESTING_HARBOR_USERNAME
# TESTING_HARBOR_PASSWORD
# KA_TESTING_HARBOR_REGISTRY
# KA_TESTING_HARBOR_USERNAME
# KA_TESTING_HARBOR_PASSWORD
# KA_HARBOR_REGISTRY
# KA_HARBOR_USERNAME
# KA_HARBOR_PASSWORD
# CI_COMMIT_BRANCH:提交的分支
- |
HARBOR_REGISTRY=$PRODUCTION_HARBOR_REGISTRY
HARBOR_USERNAME=$PRODUCTION_HARBOR_USERNAME
HARBOR_PASSWORD=$PRODUCTION_HARBOR_PASSWORD
if [[ "$CI_COMMIT_BRANCH" =~ ^testing* ]]; then
echo "image will publish to testing repository!"
HARBOR_REGISTRY=$TESTING_HARBOR_REGISTRY
HARBOR_USERNAME=$TESTING_HARBOR_USERNAME
HARBOR_PASSWORD=$TESTING_HARBOR_PASSWORD
elif [[ "$CI_COMMIT_BRANCH" =~ ^ka-testing* ]]; then
echo "image will publish to ka-testing repository!"
HARBOR_REGISTRY=$KA_TESTING_HARBOR_REGISTRY
HARBOR_USERNAME=$KA_TESTING_HARBOR_USERNAME
HARBOR_PASSWORD=$KA_TESTING_HARBOR_PASSWORD
elif [[ "$CI_COMMIT_BRANCH" =~ ^ka-staging* ]]; then
echo "image will publish to ka-staging repository!"
HARBOR_REGISTRY=$KA_HARBOR_REGISTRY
HARBOR_USERNAME=$KA_HARBOR_USERNAME
HARBOR_PASSWORD=$KA_HARBOR_PASSWORD
fi
- docker login -u "$HARBOR_USERNAME" -p "$HARBOR_PASSWORD" $HARBOR_REGISTRY
script:
# CI_COMMIT_REF_SLUG:当前分支或者tag,格式是:v1-1-1-ka
# CI_COMMIT_TAG:打的tag名称,格式是:v1.1.1-ka
# tagName=${CI_COMMIT_REF_SLUG//-/.},表示用 . 替换掉 - ,v1-1-1-ka变成 v1.1.1.ka
# 使用tagName=${CI_COMMIT_TAG},,然后把v干掉
# tag=":${tagName//v/}",表示空字符替换v,也就是把v删掉
- |
DOCKERFILE_NAME=$PRODUCTION_DOCKERFILE
if [[ "$CI_COMMIT_BRANCH" =~ ^st-testing* ]]; then
tag=":testing" # 标准测试:hbdev.wataru.com/wataru/fe-site:testing,tag是fe-site:testing的“:testing”
DOCKERFILE_NAME=$TESTING_DOCKERFILE
elif [[ "$CI_COMMIT_BRANCH" =~ ^staging* ]]; then
tag=":staging" # 标准预发:hbdev.wataru.com/wataru/fe-site:staging,tag是fe-site:staging的“:staging”
DOCKER_IMAGE_NAME=$STAGING_DOCKER_IMAGE_NAME
elif [[ "$CI_COMMIT_BRANCH" =~ ^ka-testing$ ]]; then # 分支名 ^X:以X开头,X$:以X结束,^ka-testing$,以ka-testing开头和结束,即精确匹配ka-testing
tag="" # 私有化测试:hbdev.wataru.com/wataru/fe-site-ka-testing,没有“:xxx”,tag是"",默认是latest
DOCKER_IMAGE_NAME=$KA_DOCKER_IMAGE_NAME_TESTING
elif [[ "$CI_COMMIT_BRANCH" =~ ^st-mock$ ]]; then
tag=""
DOCKER_IMAGE_NAME=$MOCK_DOCKER_IMAGE_NAME
elif [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
tag=""
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'" # 打印出CI_DEFAULT_BRANCH
else
# 你在gitlab上打的tag标签是v1.1.1-ka
# tagName=${CI_COMMIT_REF_SLUG//-/.},CI_COMMIT_REF_SLUG:当前分支或者tag标签,格式是:v1-1-1-ka
tagName=${CI_COMMIT_TAG} # CI_COMMIT_TAG的格式是:v1.1.1-ka
tag=":${tagName//v/}" # tag=":${tagName//v/}",表示空字符替换v,也就是把v删掉
if [[ "$CI_COMMIT_TAG" =~ .*-demo$ ]]; then
DOCKER_IMAGE_NAME=$DEMO_DOCKER_IMAGE_NAME
fi
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
fi
echo "prepared to build docker image: ${HARBOR_REGISTRY}/${DOCKER_IMAGE_NAME}${tag}"
- docker build . -t "${HARBOR_REGISTRY}/${DOCKER_IMAGE_NAME}${tag}" -f $DOCKERFILE_NAME --build-arg OSS_ACCESS_KEY="${STATIC_OSS_ACCESS_KEY}" --build-arg OSS_ACCESS_SECRET="${STATIC_OSS_ACCESS_SECRET}" --build-arg OSS_ENDPOINT="${STATIC_OSS_ENDPOINT}"
- docker push "${HARBOR_REGISTRY}/${DOCKER_IMAGE_NAME}${tag}"
# Run this job in a branch where a Dockerfile exists
only:
- tags
#- master
- /^st-testing.*/
- /^testing.*/
- /^staging.*/
- /^ka-staging.*/
- /^ka-testing.*/
- /^ka-testing$/
- /^st-mock$/
# ========================= deploy =========================
deploy-k8s:
stage: deploy
tags:
- "public"
image: meltwaterfoundation/drone-kubectl:1.18
script:
# drone.yml - kubectl apply -f ./k8s/st-mock.yaml -n wataru
# 对应这里的 - kubectl apply -f ./k8s/${conf}.yaml -n $ns
# TESTING_K8S_SERVER、TESTING_K8S_TOKEN 等 x_K8S_TOKEN、x_K8S_SERVER 是在gitlab配置的常量,这些常量是 kubernetes 上的服务器地址和登录token
# 目前已知的有:
# TESTING_K8S_SERVER
# TESTING_K8S_TOKEN
# STAGING_K8S_SERVER
# STAGING_K8S_TOKEN
# KA_TESTING_K8S_SERVER
# KA_TESTING_K8S_TOKEN
- |
if [[ "$CI_COMMIT_BRANCH" =~ ^st-testing* ]]; then
conf="st-testing"
ns=$TESTING_K8S_NAMESPACE
svr=$TESTING_K8S_SERVER
token=$TESTING_K8S_TOKEN
deployment=$TESTING_DEPLOYMENT_NAME
elif [[ "$CI_COMMIT_BRANCH" =~ ^staging* ]]; then
conf="staging"
ns=$STAGING_K8S_NAMESPACE
svr=$STAGING_K8S_SERVER
token=$STAGING_K8S_TOKEN
deployment=$STAGING_DEPLOYMENT_NAME
elif [[ "$CI_COMMIT_BRANCH" =~ ^ka-staging* ]]; then
conf="ka-staging"
ns=$KA_STAGING_K8S_NAMESPACE
svr=$KA_STAGING_K8S_SERVER
token=$KA_STAGING_K8S_TOKEN
deployment=$KA_STAGING_DEPLOYMENT_NAME
elif [[ "$CI_COMMIT_BRANCH" =~ ^ka-testing* ]]; then
conf="ka-testing"
ns=$KA_TESTING_K8S_NAMESPACE
svr=$KA_TESTING_K8S_SERVER
token=$KA_TESTING_K8S_TOKEN
deployment=$KA_TESTING_DEPLOYMENT_NAME
elif [[ "$CI_COMMIT_BRANCH" =~ ^st-mock* ]]; then
conf="st-mock"
ns=$TESTING_K8S_NAMESPACE
svr=$TESTING_K8S_SERVER
token=$TESTING_K8S_TOKEN
deployment=$MOCK_TESTING_DEPLOYMENT_NAME
else
echo "not a valid branch deploy by gitlab-ci"
exit -1
fi
echo "enter deploy $deployment -n $ns"
kubectl config set-cluster kubernetes --insecure-skip-tls-verify=true --server=$svr
kubectl config set-credentials admin --token=$token
kubectl config set-context deploy --cluster=kubernetes --user=admin
kubectl config use-context deploy
kubectl apply -f ./k8s/${conf}.yaml -n $ns # 只有这里用的配置文件不一样
kubectl rollout restart deployment $deployment -n $ns
only:
- /^st-testing.*/
- /^staging.*/
- /^testing.*/
- /^ka-staging.*/
- /^ka-testing.*/
- /^ka-testing$/
- /^st-mock$/
# ========================= test =========================
# sql注入扫描
# sqlmap:
# stage: test
# tags:
# - "testing"
# - "security"
# image:
# name: "googlesky/sqlmap:latest"
# #pull_policy: if-not-present
# before_script:
# - |
# # 如果服务需要授权,想办法给sqlmap一个时间足够长的token
# script:
# - sqlmap -r tests/sqlmap/
# only:
# - /^testing*/ # sqlmap只能在测试环境执行
# http接口测试
# httptest:
# stage: test
# tags:
# - "testing"
# image:
# name: "hbdev.wataru.com/dev/apifox-cli:latest"
# #pull_policy: if-not-present
# before_script:
# - |
# # 如果服务需要授权...
# script:
# - apifox-cli -f
# only:
# - /^testing*/
Variable | GitLab | Runner | Description |
---|---|---|---|
CHAT_CHANNEL | 10.6 | all | 触发ChatOps命令的源聊天通道 |
CHAT_INPUT | 10.6 | all | 在ChatOps命令中传递的其他参数 |
CI | all | 0.4 | 标记作业在 CI 环境中执行 |
CI_API_V4_URL | 11.7 | all | GitLab API v4 根 URL |
CI_BUILDS_DIR | all | 11.10 | 执行构建的顶级目录. |
CI_COMMIT_BEFORE_SHA | 11.2 | all | 先前的最新提交存在于分支中. 合并请求的管道中始终为0000000000000000000000000000000000000000 |
CI_COMMIT_DESCRIPTION | 10.8 | all | 提交的描述:如果标题少于 100 个字符,则不带第一行的消息; 在其他情况下为完整消息. |
CI_COMMIT_MESSAGE | 10.8 | all | 完整的提交消息. |
CI_COMMIT_REF_NAME | 9.0 | all | 构建项目的分支或标记名称 |
CI_COMMIT_REF_PROTECTED | 11.11 | all | 如果作业在受保护的引用上运行,则为true否则为false |
CI_COMMIT_REF_SLUG | 9.0 | all | $CI_COMMIT_REF_NAME小写,缩短为 63 个字节,并且将0-9和az以外的所有内容替换为- . 没有前导/尾随- . 在 URL,主机名和域名中使用. |
CI_COMMIT_SHA | 9.0 | all | 为其构建项目的提交修订 |
CI_COMMIT_SHORT_SHA | 11.7 | all | CI_COMMIT_SHA的前八个字符 |
CI_COMMIT_BRANCH | 12.6 | 0.5 | 提交分支名称. 仅在建立分支时显示. |
CI_COMMIT_TAG | 9.0 | 0.5 | 提交标记名称. 仅在构建标签时显示. |
CI_COMMIT_TITLE | 10.8 | all | 提交的标题-消息的第一行 |
CI_CONCURRENT_ID | all | 11.10 | 单个执行程序中生成执行的唯一 ID. |
CI_CONCURRENT_PROJECT_ID | all | 11.10 | 单个执行程序和项目中生成执行的唯一 ID. |
CI_CONFIG_PATH | 9.4 | 0.5 | CI 配置文件的路径. 默认为.gitlab-ci.yml |
CI_DEBUG_TRACE | all | 1.7 | 是否启用调试日志记录(跟踪) |
CI_DEFAULT_BRANCH | 12.4 | all | 项目的默认分支的名称. |
CI_DEPLOY_PASSWORD | 10.8 | all | GitLab Deploy 令牌的身份验证密码,仅在项目具有相关性时才提供. |
CI_DEPLOY_USER | 10.8 | all | GitLab Deploy 令牌的身份验证用户名,仅在项目具有相关性时才存在. |
CI_DISPOSABLE_ENVIRONMENT | all | 10.1 | 标记作业是在一次性环境中执行的(仅为该作业创建并在执行后处置/销毁的东西-除shell和ssh以外的所有执行程序). 如果环境是一次性的,则将其设置为 true,否则将完全未定义. |
CI_ENVIRONMENT_NAME | 8.15 | all | 该作业的环境名称. 仅在设置了environment:name存在. |
CI_ENVIRONMENT_SLUG | 8.15 | all | 环境名称的简化版本,适合包含在 DNS,URL,Kubernetes 标签等中.仅在设置了environment:name存在. |
CI_ENVIRONMENT_URL | 9.3 | all | 该作业的环境的 URL. 仅当设置了environment:url时才存在. |
CI_EXTERNAL_PULL_REQUEST_IID | 12.3 | all | 如果管道用于外部请求,则来自 GitHub 的请求请求 ID. 仅在以下情况only: [external_pull_requests]可用only: [external_pull_requests]或rules语法,并且拉取请求处于打开状态. |
CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_NAME | 12.3 | all | 如果管道用于外部请求,则请求请求的源分支名称. 仅在以下情况only: [external_pull_requests]可用only: [external_pull_requests]或rules语法,并且拉取请求处于打开状态. |
CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_SHA | 12.3 | all | 如果管道用于外部请求,则请求请求的源分支的 HEAD SHA. 仅在以下情况only: [external_pull_requests]可用only: [external_pull_requests]或rules语法,并且拉取请求处于打开状态. |
CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME | 12.3 | all | 如果管道用于外部请求,则请求请求的目标分支名称. 仅在以下情况only: [external_pull_requests]可用only: [external_pull_requests]或rules语法,并且拉取请求处于打开状态. |
CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_SHA | 12.3 | all | 如果管道用于外部请求,则请求请求目标分支的 HEAD SHA. 仅在以下情况only: [external_pull_requests]可用only: [external_pull_requests]或rules语法,并且拉取请求处于打开状态. |
CI_HAS_OPEN_REQUIREMENTS | 13.1 | all | 仅当管道的项目有任何开放要求时,才将值包括为true . 如果管道项目没有开放要求,则不包括在内. |
CI_JOB_ID | 9.0 | all | GitLab CI / CD 在内部使用的当前作业的唯一 ID |
CI_JOB_IMAGE | 12.9 | 12.9 | 运行 CI 作业的图像的名称 |
CI_JOB_MANUAL | 8.12 | all | 指示作业已手动启动的标志 |
CI_JOB_NAME | 9.0 | 0.5 | .gitlab-ci.yml定义的作业名称 |
CI_JOB_STAGE | 9.0 | 0.5 | .gitlab-ci.yml定义的阶段名称 |
CI_JOB_TOKEN | 9.0 | 1.2 | 用于通过GitLab 容器注册表进行身份验证,下载从属存储库以及访问GitLab 管理的 Terraform 状态的令牌. |
CI_JOB_JWT | 12.10 | all | RS256 JSON Web 令牌,可用于与支持 JWT 身份验证的第三方系统进行身份验证,例如HashiCorp 的 Vault . |
CI_JOB_URL | 11.1 | 0.5 | 职位详情网址 |
CI_KUBERNETES_ACTIVE | 13.0 | all | Included with the value true only if the pipeline has a Kubernetes cluster available for deployments. Not included if no cluster is available. Can be used as an alternative to only:kubernetes/except:kubernetes with rules:if |
CI_MERGE_REQUEST_ASSIGNEES | 11.9 | all | 如果管道用于合并请求 ,则该合并请求的受让人的用户名列表用逗号分隔. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_ID | 11.6 | all | 合并请求的项目级别 ID. 仅当管道用于合并请求并且创建合并请求时才可用. |
CI_MERGE_REQUEST_IID | 11.6 | all | 合并请求的实例级 IID. 仅当管道用于合并请求并且创建合并请求时才可用. |
CI_MERGE_REQUEST_LABELS | 11.9 | all | 如果管道用于合并请求 ,则合并请求的逗号分隔标签名称. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_MILESTONE | 11.9 | all | 如果管道用于合并请求 ,则合并请求的里程碑标题. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_PROJECT_ID | 11.6 | all | 如果管道用于合并请求 ,则合并请求的项目的 ID. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_PROJECT_PATH | 11.6 | all | 如果管道用于合并请求 ,则合并请求的项目路径(例如, namespace/awesome-project ). 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_PROJECT_URL | 11.6 | all | 如果管道用于合并请求 ,则合并请求的项目的 URL(例如http://192.168.10.15:3000/namespace/awesome-project ). 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_REF_PATH | 11.6 | all | 如果管道用于合并请求 ,则合并请求的 ref 路径. (例如refs/merge-requests/1/head ). 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME | 11.6 | all | 如果管道用于合并请求 ,则合并请求的源分支名称. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_SOURCE_BRANCH_SHA | 11.9 | all | 如果管道用于合并请求 ,则合并请求的源分支的 HEAD SHA. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法,创建合并请求,并且管道是合并结果管道 . |
CI_MERGE_REQUEST_SOURCE_PROJECT_ID | 11.6 | all | 如果管道用于合并请求 ,则合并请求的源项目的 ID. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_SOURCE_PROJECT_PATH | 11.6 | all | 如果管道用于合并请求 ,则合并请求的源项目的路径. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_SOURCE_PROJECT_URL | 11.6 | all | 如果管道用于合并请求 ,则合并请求的源项目的 URL. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_TARGET_BRANCH_NAME | 11.6 | all | 如果管道用于合并请求 ,则合并请求的目标分支名称. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_TARGET_BRANCH_SHA | 11.9 | all | 如果管道用于合并请求 ,则合并请求的目标分支的 HEAD SHA. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法,创建合并请求,并且管道是合并结果管道 . |
CI_MERGE_REQUEST_TITLE | 11.9 | all | 如果管道用于合并请求 ,则合并请求的标题. 仅在以下情况only: [merge_requests]可用:仅使用only: [merge_requests]或rules语法并创建合并请求. |
CI_MERGE_REQUEST_EVENT_TYPE | 12.3 | all | 合并请求的事件类型(如果管道用于合并请求) . 可以detached , merged_result或merge_train . |
CI_NODE_INDEX | 11.5 | all | 作业在作业集中的索引. 如果作业未并行化,则不会设置此变量. |
CI_NODE_TOTAL | 11.5 | all | Total number of instances of this job running in parallel. If the job is not parallelized, this variable is set to 1. |
CI_PAGES_DOMAIN | 11.8 | all | 托管 GitLab 页面的已配置域. |
CI_PAGES_URL | 11.8 | all | GitLab 页面构建页面的 URL. 始终属于CI_PAGES_DOMAIN的子域. |
CI_PIPELINE_ID | 8.10 | all | GitLab CI / CD 在内部使用的当前管道的唯一 ID |
CI_PIPELINE_IID | 11.0 | all | 当前管道的唯一 ID 范围为项目 |
CI_PIPELINE_SOURCE | 10.0 | all | 指示如何触发管道. 可能的选项是: push , web , schedule , api , external , chat , webide , merge_request_event , external_pull_request_event , parent_pipeline , trigger或pipeline (自 13.0 起改名为cross_project_pipeline ). 对于在 GitLab 9.5 之前创建的管道,这将显示为unknown . |
CI_PIPELINE_TRIGGERED | all | all | 指示已触发作业的标志 |
CI_PIPELINE_URL | 11.1 | 0.5 | 管道详细资料网址 |
CI_PROJECT_DIR | all | all | 克隆存储库以及运行作业的完整路径. 如果设置了 GitLab Runner 的builds_dir参数,则相对于builds_dir的值设置此变量. 有关更多信息,请参见 GitLab Runner 的高级配置 . |
CI_PROJECT_ID | all | all | GitLab CI / CD 在内部使用的当前项目的唯一 ID |
CI_PROJECT_NAME | 8.10 | 0.5 | 当前正在构建的项目的目录名称. 例如,如果项目 URL 为gitlab.example.com/group-name/project-1 ,则CI_PROJECT_NAME将为project-1 . |
CI_PROJECT_NAMESPACE | 8.10 | 0.5 | 当前正在构建的项目名称空间(用户名或组名) |
CI_PROJECT_ROOT_NAMESPACE | 13.2 | 0.5 | 当前正在构建的根项目名称空间(用户名或组名). 例如,如果CI_PROJECT_NAME是root-group/child-group/grandchild-group ,则CI_PROJECT_ROOT_NAMESPACE将是root-group . |
CI_PROJECT_PATH | 8.10 | 0.5 | 具有项目名称的名称空间 |
CI_PROJECT_PATH_SLUG | 9.3 | all | $CI_PROJECT_PATH小写,除0-9和az以外的所有内容都用-代替. 在 URL 和域名中使用. |
CI_PROJECT_REPOSITORY_LANGUAGES | 12.3 | all | 库中使用的语言的逗号分隔,小写列表(例如ruby,javascript,html,css ) |
CI_PROJECT_TITLE | 12.4 | all | 可读的项目名称,显示在 GitLab Web 界面中. |
CI_PROJECT_URL | 8.10 | 0.5 | The HTTP(S) address to access project |
CI_PROJECT_VISIBILITY | 10.3 | all | 项目可见性(内部,私人,公共) |
CI_REGISTRY | 8.10 | 0.5 | 如果启用了 Container Registry,它将返回 GitLab 的 Container Registry 的地址. 如果在注册表配置中指定了一个变量,则该变量将包含:port值. |
CI_REGISTRY_IMAGE | 8.10 | 0.5 | 如果为项目启用了容器注册表,则它将返回绑定到特定项目的注册表地址 |
CI_REGISTRY_PASSWORD | 9.0 | all | The password to use to push containers to the GitLab Container Registry, for the current project. |
CI_REGISTRY_USER | 9.0 | all | 用于将容器推送到当前项目的 GitLab 容器注册表的用户名. |
CI_REPOSITORY_URL | 9.0 | all | 克隆 Git 存储库的 URL |
CI_RUNNER_DESCRIPTION | 8.10 | 0.5 | 保存在 GitLab 中的跑步者的描述 |
CI_RUNNER_EXECUTABLE_ARCH | all | 10.6 | GitLab Runner 可执行文件的操作系统/体系结构(请注意,它不一定与执行程序的环境相同) |
CI_RUNNER_ID | 8.10 | 0.5 | 正在使用的跑步者的唯一 ID |
CI_RUNNER_REVISION | all | 10.6 | 正在执行当前作业的 GitLab Runner 版本 |
CI_RUNNER_SHORT_TOKEN | all | 12.3 | GitLab Runner 令牌的前八个字符用于验证新的作业请求. 用作跑步者的唯一 ID |
CI_RUNNER_TAGS | 8.10 | 0.5 | 定义的运行器标签 |
CI_RUNNER_VERSION | all | 10.6 | 正在执行当前作业的 GitLab Runner 版本 |
CI_SERVER | all | all | 标记作业在CI 环境中执行 |
CI_SERVER_URL | 12.7 | all | GitLab 实例的基本 URL,包括协议和端口(例如https://gitlab.example.com:8080 ) |
CI_SERVER_HOST | 12.1 | all | GitLab 实例 URL 的主机组件,不带协议和端口(例如gitlab.example.com ) |
CI_SERVER_PORT | 12.8 | all | GitLab 实例 URL 的端口组件,不包含主机和协议(例如3000 ) |
CI_SERVER_PROTOCOL | 12.8 | all | GitLab 实例 URL 的协议组件,不带主机和端口(例如https ) |
CI_SERVER_NAME | all | all | 用于协调作业的 CI 服务器的名称 |
CI_SERVER_REVISION | all | all | 用于计划作业的GitLab 修订版 |
CI_SERVER_VERSION | all | all | 用于计划作业的 GitLab 版本 |
CI_SERVER_VERSION_MAJOR | 11.4 | all | GitLab 版本主要组件 |
CI_SERVER_VERSION_MINOR | 11.4 | all | GitLab 版本次要组件 |
CI_SERVER_VERSION_PATCH | 11.4 | all | GitLab 版本补丁组件 |
CI_SHARED_ENVIRONMENT | all | 10.1 | 标记作业是在共享环境中执行的(在诸如shell或ssh执行程序之类的 CI 调用之间持久存在的内容). 如果共享环境,则将其设置为 true,否则将完全未定义. |
GITLAB_CI | all | all | 标记作业在 GitLab CI / CD 环境中执行 |
GITLAB_FEATURES | 10.6 | all | 以逗号分隔的实例和计划可用的许可功能列表 |
GITLAB_USER_EMAIL | 8.12 | all | 开始工作的用户的电子邮件 |
GITLAB_USER_ID | 8.12 | all | 开始工作的用户的 ID |
GITLAB_USER_LOGIN | 10.0 | all | 开始工作的用户的登录用户名 |
GITLAB_USER_NAME | 10.0 | all | 开始工作的用户的真实姓名 |
《GitLab CI/CD 流水线配置 pipeline configuration reference》:https://gitlab.apachecn.org/#/docs/199
《GitLab CI/CD》:https://gitlab.apachecn.org/#/docs/198
《GitLab CI/CD预置变量》:https://gitlab.apachecn.org/#/docs/221
《GitLab CI/CD》英文原文文档:https://docs.gitlab.com/ee/ci/variables/index.html#for-an-instance