Devops

GitLab

GitLab 是一个基于 Git 的 DevOps 平台,提供了代码仓库、CI/CD、Issue 管理等功能

流水线

流水线配置

有哪些预定义变量?

常见的预定义变量有:

  • CI_PROJECT_TITLE:项目名称
  • CI_COMMIT_REF_NAME:当前作业所属的项目分支或标签名称
  • GITLAB_USER_NAME:触发流水线或手动启动任务的用户的名称
  • CI_COMMIT_SHA:当前流水线所属的项目 Git Commit Hash
  • CI:值为真

见:Predefined Variables @Gitlab

如何提高代码复用率?

  • 使用点号加作业名的形式可以隐藏作业
  • 使用 Anchor 建立样板 Script
  • 使用区段引用符号引用整个作业
  • 使用 extends 扩展已有作业
  • 使用 include 引用外部的模板
include:
  - './.gitlab/x.template.yaml'
  - remote: 'https://cdn.com/x.template.yaml'
  - project: 'same-group/ci-template-project'
    file: 'gitlab-yaml/x.template.yaml'

.env: &template_env
  image: nodejs

.script: &template_script
  - echo hello

job:
  <<: *template_env
  script:
    - *template_script
    - echo world

如何使用并行工作?

test:
  image: ${BUILD_OS}
  parallel:
    matrix:
      - BUILD_OS: ['ubuntu:20.04', 'ubuntu:18.04']
        OS_VERSION: ['32bit', '64bit']
      - BUILD_OS: ['windows']
        OS_VERSION: ['10', '11']

如何排查错误?

  • CI_DEBUG_TRACE:将其定义为 true 以便排查流水线错误

流水线实例

相对完整的 .gitlab-ci.yml 实例文件?

## 任务的执行环境
image: node:10.13

## 定义变量
variables:
  MY_DATA: 'This is test message'

## 定义流水线的各个阶段,各阶段会依次执行
stages:
  - test
  - build
  - deploy

## 定义 jobs 之间需要缓存的文件
cache:
  paths:
    - node_modules/

## 任务前置钩子
before_script:
  ## set proxy
  - export http_proxy=http://10.2.3.63:3128/
  - export https_proxy=http://10.2.3.63:3128/

## 任务完成钩子
after_script:
  ## 通知所有用户完成构建
  - /data/bin/emitUsers.sh $CI_PROJECT_NAME $GITLAB_USER_EMAIL

test:
  stage: test
  tags:
    - sams
  script:
    - npm install --no-optional --registry=https://registry.npm.taobao.org
    - npm run lint
  only:
    - master
    - dev

build:
  stage: build
  tags:
    - sams
  script:
    - npm run build
  artifacts:
    paths:
      - $SOURCE_DIR
    expire_in: 2 mins
  only:
    - master

deploy:
  stage: deploy
  tags:
    - sams
  before_script:
    ## Using SSH keys with GitLab CI/CD
    ## https://docs.gitlab.com/ee/ci/ssh_keys/README.html
    - 'which ssh-agent || ( 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 "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - scp -r $SOURCE_DIR $DEPLOY_SERVER_USER@$DEPLOY_SERVER_IP:$TARGET_DIR
  only:
    - master
  environment: test

Copyright © 2024 Lionad - CC-BY-NC-CD-4.0