简介

Gitlab CI/CD Runner 搭建学习笔记。

Gitlab

创建容器

# 拉取镜像
docker pull gitlab/gitlab-ce:latest

# 创建容器
docker run --detach \
  --name gitlab \
  --hostname ip \
  --restart always \
  --publish 443:443 --publish 80:80 --publish 222:22 \
  --volume /opt/gitlab/config:/etc/gitlab \
  --volume /opt/gitlab/logs:/var/log/gitlab \
  --volume /opt/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

# detach                   后台运行
# name                     容器名称
# hostname                 域名或ip
# restart                  重启方式
# publish                  端口映射
# volume                   目录映射
# gitlab/gitlab-ce:latest  镜像名称

修改密码

# 进入容器
docker exec -it gitlab /bin/bash

# 进入修改
gitlab-rails console

# 查询root用户
user = User.where(id: 1).first

# 修改 root 账号密码
user.password="12345678"

# 确认密码
user.password_confirmation="12345678"

# 保存操作
user.save!

# 退出
quit

Gitlab Runner

创建容器

# 拉取镜像
docker pull gitlab/gitlab-runner:latest

# 创建容器
docker run -d \
  --name gitlab-runner \
  --restart always \
  -p 8093:8093 \
  -v /opt/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

# detach                       后台运行
# name                         容器名称
# restart                      重启方式
# publish                      端口映射
# volume                       目录映射
# gitlab/gitlab-runner:latest  镜像名称

注册runner

docker run \
  --rm \
  -v /opt/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "http://ip" \
  --registration-token "token" \
  --description "first-register-runner" \
  --tag-list "osscicd,dockercicd" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

# register               gitlab runner 与 gitlab 关联上,可以注册多个 runner。
#                        通过 gitlab/gitlab-runner:latest 镜像注册,会在 /opt/gitlab-runner/config 目录生成 config.tom runner 的配置文件
# --rm                   等价于在容器退出后,执行 docker rm -v。                      
# --executor             runner 执行器
# --docker-image         使用基础的 docker 镜像
# --url                  Gitlab 地址
# --registration-token   Runner 的 token
# --description          runner 的描述,在 Gitlab 后台可以看到
# --tag-list             指定在哪个 runner 下跑 pipeline

修改配置

1、配置文件位置
/opt/gitlab-runner/config/config.toml

2、volumes 字段添加(可以在 docker 中使用 docker)
["/usr/bin/docker:/usr/bin/docker", "/var/run/docker.sock:/var/run/docker.sock"]

3、禁止每次pipeline都会拉取docker镜像
pull_policy = "if-not-present"

.gitlab-ci.yml

基本概念

pipeline         CI/CD流水线
stages           CI/CD流水线自定义的所有阶段,为数组
stage            CI/CD流水线从全局阶段中选择的某个阶段,非数组
job              CI/CD流水线某个阶段下的某个任务,换行输入

常用关键字

script           某一个阶段 Runner 执行的脚本,当前行输入或者数组
retry            如果任务失败,重试的次数,当前行输入
image            指定一个基础 Docker 镜像作为基础运行环境,经常用到的镜像有 node、java、python、docker,当前行输入
tags             关键词用于指定 Runner,tags的取值范围是在该项目可见的 Runner tags 中
cache            将当前工作环境的一些文件或文件夹缓存起来,用于在各个 Job 初始化的时候恢复,当前行输入
when             指定条件下(分支)才会运行 Job
only/except      限定当前任务执行的条件

预定义变量

# 1、在.gitlab-ci.yml中定义
variables:
  MY_VAR: 'test variables'
job_log_var:
  script:
    - echo $MY_VAR

# 2、pipeline中预定义的变量
# https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
job_get_all:
  script:
    - export

# 3、项目中定义的变量
# Settings -> CI/CD -> Variables

流水线类型

1、基本流水线

2、DAG流水线

3、多项目流水线

4、父子流水线

5、合并请求流水线

流水线触发

1、推送代码、合并分支

2、手动触发

3、定时触发

4、url请求触发

流水线安全设置

# 1、自动取消旧的流水线:Settings -> CI/CD -> Auto-cancel redundant pipelines
interruptible: true

# 2、设置超时时间
timeout: 3 hour 30 minutes
timeout: 3h 30m

# 3、限定并发任务:保证安全部署,一个分支只能有一个部署任务
resource_group: prd

# 4、流水线调试:创建GitLab Runner映射端口 8093,/opt/gitlab-runner/config/config.toml
# [session_server]
#   session_timeout = 1800
#   listen_address = "[::]:8093"
#   advertise_address = "ip:8093"

# 5、设置部署冻结:Settings -> CI/CD -> Deploy freezes -> 分 时 日 月
rules:
  - if: '$CI_DEPLOY_FREEZE == null'

参考资料

GitLab CI/CD 相关

Jenkins CI/CD 相关

powered by Gitbook该文件修订时间: 2023-05-16 18:08:03

results matching ""

    No results matching ""