Gitlab
Gitlab
版本介绍
gitlab分社区版和企业版,与其他企业版软件不同的是,社区版和企业版都不收费,都可以免费使用
官方文档:https://docs.gitlab.com/
授权模式
GitLab基于开源核心模型 (open core model)。即以为着Gitlab有两个版本:社区版Community Edition
和 企业版Enterprise Edition
。
GitLab 社区版是MIT许可的open source。 GitLab 企业版基于社区版:使用了同样的内核,但是添加了额外的功能、特性。 这是在所有权授权下。
对于所有的版本:Gitlab 所有的 javascript 源码 都是 open source 的。Gtilab 开发的所有的 javascript code 都是 MIT 授权许可。
企业版虽然是免费使用,但免费但功能跟社区版一致。
一、部署
1、包部署
1)下载安装包
清华源:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce
南京大学镜像:https://mirrors.nju.edu.cn/gitlab-ce/
gitlab安装包比较大,建议先下载到本地再安装
[root@gitlab3 ~]# ls
anaconda-ks.cfg gitlab-ce-12.9.7-ce.0.el7.x86_64.rpm
[root@gitlab3 ~]# yum -y localinstall gitlab-ce-12.9.7-ce.0.el7.x86_64.rpm
2)配置gitlab
gitlab使用chef进行安装,配置文件为/etc/gitlab/gitlab.rb
# 配置访问地址
[root@gitlab3 ~]# vim /etc/gitlab/gitlab.rb
29 external_url 'http://gitlab.example.com'
# 配置通知邮箱
# 官方邮箱配置示例:https://docs.gitlab.com/omnibus/settings/smtp.html
[root@gitlab1 ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtphz.qiye.163.com"
gitlab_rails['smtp_port'] = 994
gitlab_rails['smtp_user_name'] = "cccccc@163.com"
gitlab_rails['smtp_password'] = "xxxxxxxxxx"
gitlab_rails['smtp_domain'] = "qiye.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
user['git_user_email'] = "cccc@163.com"
gitlab_rails['gitlab_email_from'] = 'cccc@163.com'
gitlab_rails['gitlab_email_reply_to'] = 'cccc@163.com'
# 配置重启服务
[root@gitlab1 ~]# gitlab-ctl stop
[root@gitlab1 ~]# gitlab-ctl reconfigure
[root@gitlab1 ~]# gitlab-ctl restart
# 测试邮件发送
[root@gitlab1 ~]# gitlab-rails console
Notify.test_email('t@local.com','gitlab','this is test').deliver_now
邮箱 主题 内容
2、docker部署
使用docker部署时建议先修改ssh端口,预留22给gitlab
docker run \
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:13.12.9-ce.0
docker-compose
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:13.12.9-ce.0
container_name: gitlab
restart: always
privileged: true
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url = "http://git.local.com"
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- '/dataDisk/gitlab/config:/etc/gitlab'
- '/dataDisk/gitlab/logs:/var/log/gitlab'
- '/dataDisk/gitlab/data:/var/opt/gitlab'
二、配置
1、gitlab修改url
(如果是迁移或者重新配置)
1)修改gitlab的配置文件
[root@gitlab1 ~]# vim /etc/gitlab/gitlab.rb
30 external_url 'http://192.168.100.103' #修改为域名或者IP
2)修改git clone的路径 查看gitlab.yml软连接的路径
[root@gitlab1 ~]# cd /opt/gitlab/embedded/service/gitlab-rails/config
lrwxrwxrwx 1 root root 43 Jun 19 15:23 gitlab.yml -> /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
[root@gitlab1 config]# vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
10 ## GitLab settings
11 gitlab:
12 ## Web server settings (note: host is the FQDN, do not include http://)
13 host: 192.168.100.103 #gitlab登陆后访问的路径
14 port: 80
15 https: false
3)邮箱配置
官方邮箱配置示例:https://docs.gitlab.com/omnibus/settings/smtp.html
停止服务
[root@gitlab1 ~]# gitlab-ctl stop
重新配置
[root@gitlab1 ~]# gitlab-ctl reconfigure
重启服务
[root@gitlab1 ~]# gitlab-ctl restart
测试邮件发送
[root@gitlab1 ~]# gitlab-rails console
Notify.test_email('t@local.com','gitlab','this is test').deliver_now
邮箱 主题 内容
三、gitlab-runner
1、包安装
1)下载和安装
[root@gitlab1 ~]# yum -y install https://mirror.nju.edu.cn/gitlab-runner/yum/el8-x86_64/gitlab-runner-14.8.3-1.x86_64.rpm
[root@gitlab1 ~]# yum -y install git
2)注册gitlab-runner
[root@gitlab1 ~]# gitlab-runner register \
--non-interactive \
--executor "shell" \
--url "http://192.168.23.100/" \
--registration-token "JRzzw2j1Ji6aBjwvkxAv" \
--description "xxxxx-devops-runner" \
--tag-list "build,deploy,runner-shell,runner" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
会要求输入gitlab的url和Token. 查找过程如下: 进入仓库->settings->CI/CD,找到Runner Settings这一项,点击Expend,即可在Setup a specific Runner manually这项中找到。
注册完后查看runner状态
进入仓库->settings->CI/CD,找到Runner Settings这一项,点击Expend,即可看到Gitlab-Runenr的运行状态
2、docker安装
version: "3"
services:
gitrunner:
image: 'gitlab/gitlab-runner:ubuntu-v15.8.3'
container_name: "gitlab-runner"
restart: always
command: "run --user=root --working-directory=/home/gitlab-runner"
volumes:
- '/data/gitlab-runner/config:/etc/gitlab-runner'
- '/data/gitlab-runner/cache:/tmp/cache'
# - '/data/gitlab-runner/ssl:/etc/gitlab-runner/certs/'
- '/usr/bin/docker:/usr/bin/docker'
- '/var/run/docker.sock:/var/run/docker.sock'
注册
docker exec -it gitlab-runner gitlab-runner register --non-interactive --executor "shell" --url "http://local.com" --registration-token "XmWa6cccc-ccccccc" --description "runner" --tag-list "docker-runner,gitlab-runner-shell,runner" --run-untagged="true" --locked="false" --access-level="not_protected"
runner in docker
docker exec -it gitlab-runner gitlab-runner register --non-interactive --executor "docker" --docker-image=debian:11 --url "http://local.com" --registration-token "XmWa6cccc-ccccccc" --description "docker-runner" --tag-list "docker-runner,gitlab-runner-docker" --run-untagged="true" --locked="false" --access-level="not_protected"
3、.gitlab-ci.yml 模版
default:
image: 'centos:7'
before_script:
- echo Hello World
after_script:
- echo end
tags: gitlab-runner-shell # 指定gitlab runner 的tag
cache:
paths: [vendor/]
DEPLOY_VARIABLE: "default-deploy"
variables:
IMAGE: name/${CI_PROJECT_NAMESPACE}-${CI_PROJECT_NAME}
workflow:
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables:
DEPLOY_VARIABLE: "deploy-production" # Override globally-defined DEPLOY_VARIABLE
- if: $CI_COMMIT_REF_NAME =~ /feature/
variables:
IS_A_FEATURE: "true" # Define a new variable.
- when: always
stages:
- test
- build
- package
- deploy
- cleanup
test_all:
image: "pymicro"
pull_policy: if-not-present
stage: test
services:
- name: my-postgres:11.7
alias: db-postgres
pull_policy: if-not-present
entrypoint: ["/usr/local/bin/db-postgres"]
command: ["start"]
veriables:
MYSQL_DATABASE: db
MYSQL_ROOT_PASSWORD: password
allow_failure: true # job 允许失败
before_script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- flake8 app
- pytest tests
after_script:
- execute this after my script # 执行命令
build_image:
image:
name docker:17.11
pull_policy: always # if-not-present
#entrypoint: ["echo hellow-world"] #覆盖 entrypoint命令
# command: ["start"] 覆盖command命令
stage: build
services:
- name: my-postgres:11.7
alias: db-postgres
entrypoint: ["/usr/local/bin/db-postgres"]
command: ["start"]
variables:
DOCKER_HOST: tcp://dockerd:2375
# 缓存 binaries 中以 .apk 和 .config 文件结尾的所有文件:
cache:
key: binaries-cache
paths:
- binaries/*.apk
- .config
only:
- master
tags:
- build
script:
- |
docker build -t ${IMAGE_TAG} -f Dockerfile .
docker push ${IMAGE_TAG}
package_app:
stage: build
rules:
- if: $CI_COMMIT_MESSAGE =~ /build-app-a/
variables:
GITLAB_app_NAME: gitea-drone
- if: $CI_COMMIT_MESSAGE =~ /build-app-b/
variables:
GITLAB_app_NAME: gitea-drone-b
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- Dockerfile
when: manual
allow_failure: true
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfile
- exists:
- Dockerfile
before_script:
- hello
script:
- echo "${GITLAB_app_NAME}"
after_script:
- echo "world"
allow_failure:
exit_codes:
- 137
- 255
# 当Gemfile.lock有变化时候,重新生成缓存
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modules
last-job:
stage: .post
script:
- echo "This job runs in the .post stage, after all other stages."
deploy_production:
stage: deploy
variables:
GIT_STRATEGY: none
needs:
- job: test-job2
optional: true
- job: test-job1
# only/except
only: #
- master
- main
- /^issue-.*$/
- merge_requests
- tags
variables:
- $RELEASE == "staging"
refs:
- branches
changes:
- Dockerfile
- docker/scripts/
allow_failure: true
when: manual
tags:
- deploy-production
script:
- kubectl set image deploy/myproject "app=${IMAGE_TAG}" --record
cache:
untracked: true # 来缓存 Git 仓库中所有未跟踪的文件
paths:
- binaries/
cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: always
内置变量,参考地址:https://docs.gitlab.cn/jh/ci/variables/predefined_variables.html
变量 | GitLab | Runner | 描述 |
---|---|---|---|
CHAT_CHANNEL |
10.6 | all | 触发 ChatOps 命令的源聊天频道。 |
CHAT_INPUT |
10.6 | all | 使用 ChatOps 命令传递的附加参数。 |
CHAT_USER_ID |
14.4 | all | 触发 ChatOps 命令的用户的聊天服务用户 ID。 |
CI |
all | 0.4 | 适用于在 CI/CD 中执行的所有作业。可用时为 true 。 |
CI_API_V4_URL |
11.7 | all | GitLab API v4 根 URL。 |
CI_BUILDS_DIR |
all | 11.10 | 执行构建的顶级目录。 |
CI_COMMIT_AUTHOR |
13.11 | all | Name <email> 格式的提交作者。 |
CI_COMMIT_BEFORE_SHA |
11.2 | all | 出现在分支或标签上的上一个最新提交。在合并请求的流水线中总是 0000000000000000000000000000000000000000 。 |
CI_COMMIT_BRANCH |
12.6 | 0.5 | 提交分支名称。在分支流水线中可用,包括默认分支的流水线。在合并请求流水线或标签流水线中不可用。 |
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 | 如果作业正在运行以获取受保护的 ref 为 true 。 |
CI_COMMIT_REF_SLUG |
9.0 | all | CI_COMMIT_REF_NAME 小写,缩短为 63 字节,除了 0-9 和 a-z 之外的所有内容都替换为 - 。没有前导/尾随- 。 在 URL、主机名和域名中使用。 |
CI_COMMIT_SHA |
9.0 | all | 项目为其构建的提交修订。 |
CI_COMMIT_SHORT_SHA |
11.7 | all | CI_COMMIT_SHA 的前八个字符。 |
CI_COMMIT_TAG |
9.0 | 0.5 | 提交标签名称。仅在标签流水线中可用。 |
CI_COMMIT_TAG_MESSAGE |
15.5 | all | 提交标签消息。仅在标签流水线中可用。 |
CI_COMMIT_TIMESTAMP |
13.4 | all | ISO 8601 格式的提交时间戳。 |
CI_COMMIT_TITLE |
10.8 | all | 提交的标题。消息的完整第一行。 |
CI_CONCURRENT_ID |
all | 11.10 | 单个 executor 中构建执行的唯一 ID。 |
CI_CONCURRENT_PROJECT_ID |
all | 11.10 | 单个 executor 和项目中构建执行的唯一 ID。 |
CI_CONFIG_PATH |
9.4 | 0.5 | CI/CD 配置文件的路径。默认为.gitlab-ci.yml 。在正在运行的流水线中只读。 |
CI_DEBUG_TRACE |
all | 1.7 | 如果 debug 日志 (跟踪) 已启用为true 。 |
CI_DEBUG_SERVICES |
15.7 | 15.7 | true 如果启用了服务容器日志,值为 true 。 |
CI_DEFAULT_BRANCH |
12.4 | all | 项目默认分支的名称。 |
CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX |
13.7 | all | 通过 Dependency Proxy 拉取镜像的顶级群组镜像前缀。 |
CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX |
14.3 | all | 通过 Dependency Proxy 拉取镜像的直接群组镜像前缀。 |
CI_DEPENDENCY_PROXY_PASSWORD |
13.7 | all | 通过 Dependency Proxy 拉取镜像的密码。 |
CI_DEPENDENCY_PROXY_SERVER |
13.7 | all | 用于登录 Dependency Proxy 的服务器。相当于 $CI_SERVER_HOST:$CI_SERVER_PORT 。 |
CI_DEPENDENCY_PROXY_USER |
13.7 | all | 通过 Dependency Proxy 拉取镜像的用户名。 |
CI_DEPLOY_FREEZE |
13.2 | all | 仅当流水线在部署冻结窗口期间运行时才可用。可用时为 true 。 |
CI_DEPLOY_PASSWORD |
10.8 | all | GitLab Deploy Token 的认证密码,如果项目有的话。 |
CI_DEPLOY_USER |
10.8 | all | GitLab Deploy Token 的认证用户名,如果项目有的话。 |
CI_DISPOSABLE_ENVIRONMENT |
all | 10.1 | 仅当作业在一次性环境中执行时才可用(仅为该作业创建并在执行后处理/销毁 - 除 shell 和 ssh 之外的所有 executor)。可用时为 true 。 |
CI_ENVIRONMENT_NAME |
8.15 | all | 此作业的环境名称。 如果设置了 environment:name ,则可用。 |
CI_ENVIRONMENT_SLUG |
8.15 | all | 环境名称的简化版本,适合包含在 DNS、URL、Kubernetes labels 等。如果设置了 environment:name ,则可用。Slug 被截断为 24 个字符。 |
CI_ENVIRONMENT_URL |
9.3 | all | 此作业的环境 URL。如果设置了 environment:url ,则可用。 |
CI_ENVIRONMENT_ACTION |
13.11 | all | 为此作业的环境指定的操作注释。如果设置了 environment:action ,则可用。可以是start 、prepare 或 stop 。 |
CI_ENVIRONMENT_TIER |
14.0 | all | 此作业的环境部署级别。 |
CI_RELEASE_DESCRIPTION |
15.5 | all | 发布的描述。仅在标签流水线上可用。描述长度限制为前 1024 个字符。 |
CI_GITLAB_FIPS_MODE |
14.10 | all | 实例中是否启用 FIPS 模式的配置设置。 |
CI_HAS_OPEN_REQUIREMENTS |
13.1 | all | 仅当流水线的项目具有打开的需求 时才可用。可用时为 true 。 |
CI_JOB_ID |
9.0 | all | 作业的内部 ID,在 GitLab 实例中的所有作业中是唯一的。 |
CI_JOB_IMAGE |
12.9 | 12.9 | 运行作业的 Docker 镜像的名称。 |
CI_JOB_JWT |
12.10 | all | 一个 RS256 JSON Web 令牌,用于与支持 JWT 身份验证的第三方系统进行身份验证,例如 HashiCorp’s Vault。 |
CI_JOB_JWT_V1 |
14.6 | all | 与 CI_JOB_JWT 相同的值。 |
CI_JOB_MANUAL |
8.12 | all | 如果作业是手动启动为 true 。 |
CI_JOB_NAME |
9.0 | 0.5 | 作业名称 |
CI_JOB_NAME_SLUG |
15.4 | all | CI_JOB_NAME_SLUG 的小写,缩短为 63 字节,除 0-9 和 a-z 以外的所有内容都替换为 - 。没有前导/尾随的 - 。在路径中使用。 |
CI_JOB_STAGE |
9.0 | 0.5 | 作业阶段名称 |
CI_JOB_STATUS |
all | 13.5 | 执行每个 runner 阶段时的作业状态。与 after_script 一起使用。可以是 success ,failed 或 canceled 。 |
CI_JOB_TIMEOUT |
15.7 | 15.7 | 作业超时的值。 |
CI_JOB_TOKEN |
9.0 | 1.2 | 使用某些 API 端点进行身份验证的令牌。只要作业正在运行,令牌就有效。 |
CI_JOB_URL |
11.1 | 0.5 | 作业详细信息 URL。 |
CI_JOB_STARTED_AT |
13.10 | all | 作业开始时的 UTC 日期时间,采用 ISO 8601 格式。 |
CI_KUBERNETES_ACTIVE |
13.0 | all | 仅当流水线具有可用于部署的 Kubernetes 集群时才可用。可用时为 true 。 |
CI_NODE_INDEX |
11.5 | all | 作业集中的作业 index。仅当作业使用 parallel 时可用。 |
CI_NODE_TOTAL |
11.5 | all | 此作业并行运行的实例总数。如果作业不使用 parallel ,则设置为 1 。 |
CI_OPEN_MERGE_REQUESTS |
13.8 | all | 使用当前分支和项目作为合并请求源的最多四个合并请求的逗号分隔列表。如果分支具有关联的合并请求,则仅在分支和合并请求流水线中可用。例如,gitlab-org/gitlab!333,gitlab-org/gitlab-foss!11 。 |
CI_PAGES_DOMAIN |
11.8 | all | 托管 GitLab Pages 的配置域名。 |
CI_PAGES_URL |
11.8 | all | GitLab Pages 站点的 URL。始终是 CI_PAGES_DOMAIN 的子域名。 |
CI_PIPELINE_ID |
8.10 | all | 当前流水线的实例级 ID。该 ID 在实例上的所有项目中都是唯一的。 |
CI_PIPELINE_IID |
11.0 | all | 当前流水线的项目级 IID(内部 ID)。此 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 。 |
CI_PIPELINE_TRIGGERED |
all | all | 如果作业是触发的为 true。 |
CI_PIPELINE_URL |
11.1 | 0.5 | 流水线详细信息的 URL。 |
CI_PIPELINE_CREATED_AT |
13.10 | all | 创建流水线时的 UTC 日期时间,采用 ISO 8601 格式。 |
CI_PROJECT_DIR |
all | all | 仓库克隆到的完整路径,以及作业从哪里运行。如果设置了 GitLab Runner builds_dir 参数,这个变量是相对于 builds_dir 的值设置的。 |
CI_PROJECT_ID |
all | all | 当前项目的 ID。该 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_NAMESPACE_ID |
15.7 | 0.5 | 作业的项目命名空间 ID。 |
CI_PROJECT_PATH_SLUG |
9.3 | all | $CI_PROJECT_PATH 小写,不是 a-z 或 0-9 的字符替换为 - 并缩短为 63 字节。 在 URL 和域名中使用。 |
CI_PROJECT_PATH |
8.10 | 0.5 | 包含项目名称的项目命名空间。 |
CI_PROJECT_REPOSITORY_LANGUAGES |
12.3 | all | 仓库中使用的语言的逗号分隔的小写列表。例如ruby,javascript,html,css 。 |
CI_PROJECT_ROOT_NAMESPACE |
13.2 | 0.5 | 作业的根项目命名空间(用户名或组名)。例如,如果CI_PROJECT_NAMESPACE 是 root-group/child-group/grandchild-group ,则 CI_PROJECT_ROOT_NAMESPACE 是 root-group 。 |
CI_PROJECT_TITLE |
12.4 | all | Web 界面中显示的人类可读的项目名称。 |
CI_PROJECT_DESCRIPTION |
15.1 | all | Web 界面中显示的项目描述。 |
CI_PROJECT_URL |
8.10 | 0.5 | 项目的 HTTP(S) 地址。 |
CI_PROJECT_VISIBILITY |
10.3 | all | 项目可见性。可以是 internal 、private 或 public 。 |
CI_PROJECT_CLASSIFICATION_LABEL |
14.2 | all | 项目外部授权分类标记。 |
CI_REGISTRY_IMAGE |
8.10 | 0.5 | 项目的 Container Registry 的地址。仅当为项目启用了 Container Registry 时才可用。 |
CI_REGISTRY_PASSWORD |
9.0 | all | 将容器推送到项目的 GitLab Container Registry 的密码。仅当为项目启用了 Container Registry 时才可用。 此密码值与 CI_JOB_TOKEN 相同,并且仅在作业运行时有效。使用 CI_DEPLOY_PASSWORD 长期访问镜像库。 |
CI_REGISTRY_USER |
9.0 | all | 将容器推送到项目的 GitLab Container Registry 的用户名。仅当为项目启用了 Container Registry 时才可用。 |
CI_REGISTRY |
8.10 | 0.5 | GitLab Container Registry 的地址。仅当为项目启用了 Container Registry 时才可用。 如果在镜像库配置中指定了一个值,则此变量包括一个 :port 值。 |
CI_REPOSITORY_URL |
9.0 | all | 克隆 Git 仓库的 URL。 |
CI_RUNNER_DESCRIPTION |
8.10 | 0.5 | runner 的描述。 |
CI_RUNNER_EXECUTABLE_ARCH |
all | 10.6 | GitLab Runner 可执行文件的操作系统/架构。可能和 executor 的环境不一样。 |
CI_RUNNER_ID |
8.10 | 0.5 | 正在使用的 runner 的唯一 ID。 |
CI_RUNNER_REVISION |
all | 10.6 | 运行作业的 runner 的修订版。 |
CI_RUNNER_SHORT_TOKEN |
all | 12.3 | runner 的唯一 ID,用于验证新的作业请求。在 14.9 及更高版本中,令牌包含前缀,并且使用前 17 个字符。在 14.9 版本之前,使用前八个字符。 |
CI_RUNNER_TAGS |
8.10 | 0.5 | 以逗号分隔的 runner 标签列表。 |
CI_RUNNER_VERSION |
all | 10.6 | 运行作业的 GitLab Runner 的版本。 |
CI_SERVER_HOST |
12.1 | all | GitLab 实例 URL 的主机,没有协议或端口。例如gitlab.example.com 。 |
CI_SERVER_NAME |
all | all | 协调作业的 CI/CD 服务器的名称。 |
CI_SERVER_PORT |
12.8 | all | GitLab 实例 URL 的端口,没有主机或协议。例如 8080 。 |
CI_SERVER_PROTOCOL |
12.8 | all | GitLab 实例 URL 的协议,没有主机或端口。例如 https 。 |
CI_SERVER_REVISION |
all | all | 计划作业的 GitLab 修订版。 |
CI_SERVER_TLS_CA_FILE |
all | all | 包含 TLS CA 证书的文件,用于在 runner 设置中设置 tls-ca-file 时验证极狐GitLab 服务器。 |
CI_SERVER_TLS_CERT_FILE |
all | all | 包含 TLS 证书的文件,用于在 runner 设置中设置 tls-ca-file 时验证极狐GitLab 服务器。 |
CI_SERVER_TLS_KEY_FILE |
all | all | 包含 TLS 密钥的文件,用于在 runner 设置中设置 tls-ca-file 时验证极狐GitLab 服务器。 |
CI_SERVER_URL |
12.7 | all | GitLab 实例的基本 URL,包括协议和端口。 例如https://gitlab.example.com:8080 。 |
CI_SERVER_VERSION_MAJOR |
11.4 | all | GitLab 实例的主版本。例如,如果版本为 13.6.1 ,则CI_SERVER_VERSION_MAJOR 为 13 。 |
CI_SERVER_VERSION_MINOR |
11.4 | all | GitLab 实例的小版本。例如,如果版本为 13.6.1 ,则CI_SERVER_VERSION_MINOR 为 6 。 |
CI_SERVER_VERSION_PATCH |
11.4 | all | GitLab 实例的补丁版本。例如,如果版本为 13.6.1 ,则CI_SERVER_VERSION_PATCH 为 1 。 |
CI_SERVER_VERSION |
all | all | GitLab 实例的完整版本。 |
CI_SERVER |
all | all | 适用于在 CI/CD 中执行的所有作业。可用时为 true 。 |
CI_SHARED_ENVIRONMENT |
all | 10.1 | 仅当作业在共享环境中执行时才可用(跨 CI/CD 调用持久化的,如 shell 或 ssh executor)。可用时为 true 。 |
GITLAB_CI |
all | all | 适用于在 CI/CD 中执行的所有作业。可用时为 true 。 |
GITLAB_FEATURES |
10.6 | all | 可用于实例和许可证的许可功能的逗号分隔列表。 |
GITLAB_USER_EMAIL |
8.12 | all | 启动流水线的用户的电子邮件,除非作业是手动作业。在手动作业中,该值是启动作业的用户的电子邮件。 |
GITLAB_USER_ID |
8.12 | all | 启动流水线的用户的 ID,除非作业是手动作业。在手动作业中,该值是启动作业的用户的 ID。 |
GITLAB_USER_LOGIN |
10.0 | all | 启动流水线的用户的用户名,除非作业是手动作业。在手动作业中,该值是启动作业的用户的用户名。 |
GITLAB_USER_NAME |
10.0 | all | 启动流水线的用户的姓名,除非作业是手动作业。在手动作业中,该值是启动作业的用户的姓名。 |
TRIGGER_PAYLOAD |
13.9 | all | webhook 负载。仅当流水线使用 webhook 触发时可用。 |
这些变量在以下情况下可用:
- 流水线是合并请求流水线。
- 合并请求已打开。
变量 | GitLab | Runner | 描述 |
---|---|---|---|
CI_MERGE_REQUEST_APPROVED |
14.1 | all | 合并请求的批准状态。当合并请求批准 可用并且合并请求已被批准时为 true 。 |
CI_MERGE_REQUEST_ASSIGNEES |
11.9 | all | 合并请求的指派人用户名的逗号分隔列表。 |
CI_MERGE_REQUEST_ID |
11.6 | all | 合并请求的实例级 ID。这是 GitLab 上所有项目的唯一 ID。 |
CI_MERGE_REQUEST_IID |
11.6 | all | 合并请求的项目级 IID(内部 ID)。此 ID 对于当前项目是唯一的。 |
CI_MERGE_REQUEST_LABELS |
11.9 | all | 合并请求的逗号分隔标签名称。 |
CI_MERGE_REQUEST_MILESTONE |
11.9 | all | 合并请求的里程碑标题。 |
CI_MERGE_REQUEST_PROJECT_ID |
11.6 | all | 合并请求的项目 ID。 |
CI_MERGE_REQUEST_PROJECT_PATH |
11.6 | all | 合并请求的项目路径。例如 namespace/awesome-project 。 |
CI_MERGE_REQUEST_PROJECT_URL |
11.6 | all | 合并请求的项目的 URL。例如,http://192.168.10.15:3000/namespace/awesome-project 。 |
CI_MERGE_REQUEST_REF_PATH |
11.6 | all | 合并请求的引用路径。例如,refs/merge-requests/1/head 。 |
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME |
11.6 | all | 合并请求的源分支名称。 |
CI_MERGE_REQUEST_SOURCE_BRANCH_SHA |
11.9 | all | 合并请求的源分支的 HEAD SHA。该变量在合并请求流水线中为空。SHA 仅存在于合并结果流水线中。 |
CI_MERGE_REQUEST_SOURCE_PROJECT_ID |
11.6 | all | 合并请求的源项目的 ID。 |
CI_MERGE_REQUEST_SOURCE_PROJECT_PATH |
11.6 | all | 合并请求的源项目路径。 |
CI_MERGE_REQUEST_SOURCE_PROJECT_URL |
11.6 | all | 合并请求的源项目的 URL。 |
CI_MERGE_REQUEST_TARGET_BRANCH_NAME |
11.6 | all | 合并请求的目标分支名称。 |
CI_MERGE_REQUEST_TARGET_BRANCH_PROTECTED |
15.2 | all | 合并请求的目标分支的保护状态。 |
CI_MERGE_REQUEST_TARGET_BRANCH_SHA |
11.9 | all | 合并请求的目标分支的 HEAD SHA。该变量在合并请求流水线中为空。SHA 仅存在于合并结果流水线中。 |
CI_MERGE_REQUEST_TITLE |
11.9 | all | 合并请求的标题。 |
CI_MERGE_REQUEST_EVENT_TYPE |
12.3 | all | 合并请求的事件类型。可以是 detached 、merged_result 或 merge_train 。 |
CI_MERGE_REQUEST_DIFF_ID |
13.7 | all | 合并请求差异的版本。 |
CI_MERGE_REQUEST_DIFF_BASE_SHA |
13.7 | all | 合并请求差异的基本 SHA。 |
四、备份与恢复
1、备份
[root@gitlab1 ~]# gitlab-rake gitlab:backup:create
使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1530156812_2018_06_28_10.8.4_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1530156812_2018_06_28_10.8.4是备份创建的日期
2、数据恢复
[root@gitlab1 ~]# gitlab-ctl stop unicorn
[root@gitlab1 ~]# gitlab-ctl stop sidekiq
备份文件增加777权限,并且文件需要存放在/var/opt/gitlab/backups里
[root@gitlab1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4 # 输入两次yes
启动服务
[root@gitlab1 ~]# gitlab-ctl restart
五、升级
注意:由于升级不能跨越大版本号,因此只能升级到当前大版本号到最高版本,方可升级到下一个大版本号。
gitlab的跨版本升级需要升级中间多个小版本,为了方便升级,可以基于docker升级。
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:12.9.7-ce.0
container_name: gitlab
restart: always
privileged: true
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url = "http://git.local.com"
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- '/dataDisk/gitlab/config:/etc/gitlab'
- '/dataDisk/gitlab/logs:/var/log/gitlab'
- '/dataDisk/gitlab/data:/var/opt/gitlab'
networks:
- gitlab
networks:
gitlab:
数据备份
# 备份产生目录 /var/opt/gitlab/backups/
gitlab-rake gitlab:backup:create
# 容器备份
sudo docker exec -t gitlab gitlab-rake gitlab:backup:create
迁移
### 配置文件说明
# 原本: /etc/gitlab/gitlab.rb
# 容器: /data/gitlab/config/gitlab.rb
# 授权备份文件
scp 1586766848_2020_04_13_10.3.3_gitlab_backup.tar root@10.0.0.2:/var/opt/gitlab/backups/
chown 777 /var/opt/gitlab/backups/1586766848_2020_04_13_10.3.3_gitlab_backup.tar
# 加载备份路径 默认 /var/opt/gitlab/backups
vim /data/gitlab/config/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 864000
# 重载配置
docker exec -t gitlab gitlab-ctl reconfigure
# 停止数据库进程
docker exec -t gitlab gitlab-ctl status
docker exec -t gitlab gitlab-ctl stop puma
docker exec -t gitlab gitlab-ctl stop sidekiq
docker exec -t gitlab gitlab-ctl status
# 恢复备份文件 (输入两次yes)
docker exec -ti gitlab bash
docker exec -t gitlab gitlab-rake gitlab:backup:restore BACKUP=1586766848_2020_04_13_10.3.3
gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
# 重启与检测
docker exec -t gitlab gitlab-ctl restart
docker exec -t gitlab gitlab-rake gitlab:check SANITIZE=true
可能出现的问题:
公钥不受信任,要么按提示需要输入yes,要么把config也进行迁移
ssh -T git@local.com
网页访问502
在重启gitlab后访问出现502 原因是nginx用户无法访问gitlab用户的socket文件。 重启gitlab需要重新授权
[root@gitlab1 ~]# chmod -R o+x /var/opt/gitlab/gitlab-rails
关闭浏览器再重新访问
五、用户密码管理
重置管理员密码
1)gitlab-rails console
2)user = User.where(@root).first
3)user.password=‘imaus’
4)user.save!
root@9e2af9b54092:/# gitlab-rails console
--------------------------------------------------------------------------------
GitLab: 15.1.6 (f1452cd5cf4) FOSS
GitLab Shell: 14.7.4
PostgreSQL: 13.6
------------------------------------------------------------[ booted in 31.01s ]
Loading production environment (Rails 6.1.4.7)
irb(main):001:0> User.all
=> #<ActiveRecord::Relation [#<User id:1 @root>]>
irb(main):002:0> user=User.where(id:1).first
=> #<User id:1 @root>
irb(main):006:0> user.password='sugar123456'
=> "sugar123456"
irb(main):007:0> user.password_confirmation='sugar123456'
=> "sugar123456"
irb(main):008:0> user.save!
=> true
关闭用户注册
Admin Area —>Settings—>General—>Sign-up restrictions