GitLab-CI基础使用总结

article/2025/9/30 10:31:08

思路梳理

下图是GitLab-ci的实现结构图:

(实际结构会有出入,画成这样只是便于理解)

  1. GitLab:是一个基于 Git 的代码托管平台,提供了代码仓库管理、问题跟踪、CI/CD 等功能。它可以用于团队协作开发、版本控制、代码审查等场景。
  2. GitLab-runner:是一个 GitLab 的插件,用于在多个服务器上运行 CI/CD 任务。它可以将 GitLab 中的 CI/CD 任务分配到不同的服务器上执行,从而提高构建速度和可靠性。
  3. Git:是一个分布式版本控制系统,用于管理代码的版本和变更。它支持分支管理、合并、提交等功能,可以帮助开发者协同工作和管理代码库。

一、前期准备

搭建GitLab

1、下载并安装Gitlab社区版软件:gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm

[root@server1 ~]# ls
gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
[root@server1 ~]# yum install gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm -y   
#安装GitLab社区版。ce表示社区版,ee表示企业版

2、编辑配置文件/etc.gitlab/gitlab.rb

[root@server1 ~]# vim /etc/gitlab/gitlab.rb 13 external_url 'http://xx.xx.xx.xx'   #访问gitlab的地址
[root@server1 ~]# gitlab-ctl reconfigure   #重载服务,过程较长耐心等待

下图是一个安装好的GitLab示意图:

建立一个新项目:

点击new Project建立新项目 我这里建立了一个项目叫test-CI/CD

查看项目详情页的Settings->CI/CD->Runners 记录下Runner的配置

这里的Runner分为两种,一种是Specific Runner 另一种是Shared Runner

Specific Runner只能被当前项目使用,在这里就是只能被我刚才创建的test-CICD项目使用

Shared Runner 可以在这个项目所在的GitLab示例上共享。

这里我们主要需要复制下url(标记了GitLab的地址)和token (确定是哪个项目)

搭建GitLab-Runner

首先 GItLab-Runner要依赖Git

我们先 Git -v查看Git的版本号,如果低于2.30.1 建议升级为2.30.1以上的版本,不然执行中可能报错。

确保Git版本号已经达到要求后,可以开始GItlab-Runner的搭建:

现在服务器上安装GitLab-Runner

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner

接下来需要在服务器上注册Runner,Runner将作为CI/CD中流水线的执行节点,下面给出部分配置:

#开始注册runner
gitlab-runner register
# 输入需要注册到的 gitlab URL,即在上一步项目详情页里Runner配置里的url地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://xx.xx.xx.xx/
# 输入 Token,即在上一步项目详情页里Runner配置里的token
Please enter the gitlab-ci token for this runner
your_token
# 输入 tag, tag作为runner的唯一标志,在流水线运行时通过制定tag 决定让哪个runner来执行。
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag
# 选择执行器,有docker选dokcer,没有选shell,这里因为我需要使用服务器的控制台输入指令因此选择了shell 
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell

如果返回success! 回到GitLab,可以看到刚才创建的Runner:

二、流水线的编辑与运行

回到项目的详情页->CI/CD->Editor 可以为项目建立一条流水线。

流水线基本结构:

下面我给一条基本的流水线:

stages:- build- test- deployvariables:GIT_DEPTH: 1CI_JOB_NAME: "${CI_JOB_NAME}"BUILD_DIR: "${CI_PROJECT_DIR}/build"TEST_DIR: "${CI_PROJECT_DIR}/test"APP_URL: "https://your-app-url.com"cache:paths:- "${CI_PROJECT_DIR}/**/*"before_script:- apt-get update && apt-get install -y git curl jqbuild_job:stage: buildscript:- echo "Building the application..."- cd ${BUILD_DIR}- git clone https://github.com/yourusername/your-app.git- cd your-app- npm install- npm run buildartifacts:paths:- ${BUILD_DIR}/dist/*only:- mastertags: test-runnertest_job:stage: testscript:- echo "Testing the application..."- cd ${TEST_DIR}- npm test --coverage=lcov --reporter=html > coverage.htmlonly:- mastertags: test-runnerdeploy_job:stage: deployscript:- echo "Deploying the application..."- cd ${BUILD_DIR}- git add . && git commit -m "Build ${CI_COMMIT_REF_SLUG}" && git push origin master --tags || true # 如果有冲突,使用 git merge --strategy=ours --no-ff 将本地分支合并到远程分支上,然后再次推送。only:- mastertags: test-runner

流水线常见参数:

  1. stages:定义了 CI/CD 流程中的各个阶段,如构建、测试和部署。
  2. variables:定义了一些全局变量,如 GitLab CI/CD 的默认仓库地址、构建目录、测试目录等。这些变量可以在后续的 job 中使用。
  3. cache:配置缓存,用于存储 GitLab CI/CD 在执行过程中生成的临时文件。这里配置了缓存路径为 ${CI_PROJECT_DIR}/**/*,表示缓存所有 CI_PROJECT_DIR 目录下的文件。
  4. before_script:在每个 job 执行前运行的脚本,这里安装了 Git、curl 和 jq。
  5. build_job:定义了一个名为 build 的 job,用于构建应用程序。它会在 build stage 执行,并将构建产物(如 dist 目录下的文件)保存到缓存中。只有当当前分支是 master 时才会执行此 job。
  6. test_job:定义了一个名为 test 的 job,用于测试应用程序。它会在 test stage 执行,并生成一个 HTML 格式的代码覆盖率报告。只有当当前分支是 master 时才会执行此 job。
  7. deploy_job:定义了一个名为 deploy 的 job,用于部署应用程序。它会在 deploy stage 执行,将构建产物推送到远程仓库。只有当当前分支是 master 且没有冲突时才会执行此 job。
  8. tags: 指定使用哪个runner来执行,必须和建立的runner的tag匹配。

流水线的执行:

当流水线编辑完成后,语法校验通过,点击commit changes 会自动进行流水线的执行:

在执行界面可以查看流水线的Stages,点击可以查看执行日志:

三、经验技巧总结及拓展

常用技巧:

1.1 如果某个Stage不需要进行Git操作拉取代码,可以通过variables指定Git_Strategy来skip:

git-strategy默认为fetch 而非clone(复制整个仓库),在每个stage的过程中,默认的操作是:git fetch 来重新初始化gitlab-runner维护的本地仓库(如果.git文件不存在,说明这个仓库之前就么有,会退回执行git clone) 这样做是为了保持仓库始终和gitlab上同步,保证是最新的。

如果我们有一个Stage,只需要对制品文件进行操作,比如一个部署的操作,复制文件的操作,我们可以通过Variable里设置GIT_STRATEGY:none来跳过Git操作:

1.2 通过并行阶段提高执行效率:

假设我们有一个需要进行多个步骤的CI/CD流程,例如构建、测试和部署。如果我们使用串行阶段,那么每个步骤都需要等待前一个步骤完成后才能开始执行下一个步骤,这会导致整个流程变得非常缓慢。

为了提高效率,我们可以使用GitLab CI/CD的并行阶段。并行阶段允许我们在不同的时间点同时运行多个任务,从而加快整个流程的速度。

stages:- build- testbuild:stage: buildscript:- echo "Building the project..."test:stage: testscript:- echo "Running tests..."parallel:count: 2matrix:- TEST_SUITE: unit- TEST_SUITE: integration

在这个示例中,我们定义了两个作业:build 和 test。test 作业使用 parallel 关键字来指定要并行运行的作业数量。count 关键字用于指定要并行运行的作业数量。在这个示例中,我们将同时运行两个测试套件:unit 和 integration。这意味着 test 作业将会运行两次,每次运行一个测试套件。

拓展:

2.1 集成SonarQube

首先,需要一台安装有SonarQube和Sonar-Scanner的主机,以它作为进行SonarQube代码扫描的节点,在上面建立GitLab-Runner,建立过程参考第一部分第四节,注意执行器选择shell,否则还需要去docker里安装Sonar-Scanner

建立完成后,即可在gitlab-ci的.yaml文件中进行配置:

运行流水线:

四.参考资料:

官方文档:Configuring runners | GitLab

stackoverflow关于跳过Git操作的解决方案: yaml - How to skip 'Reinitialized existing Git repository' on Gitlab CICD Stage - Stack Overflow


http://chatgpt.dhexx.cn/article/WdRiQStA.shtml

相关文章

Git --- Git Gui

目录 1. 创建和删除分支(了解即可) 2. Git Gui 3. 什么是ssh key 4. git/gitee生成密钥并通过 第一步:本地电脑配置 第二步:远程gitee仓库配置 第三步:修改你本地的ssh remote url. 不用https协议,改用git 协议 第四步&#x…

git与gerrit基础概念

序 本文记录了 git 与 gerrit 学习所得 重点关注于当前所用到的实际操作部分,其余理论部分以及更复杂用法留待将来用到时继续补充 1 Git 与 Gerrit Git 是当前全世界流行的分布式版本控制工具,但是只适用于纯文本文件,包括markdown、网页、…

Git入门|Git的基本用法(一)

1. Git的安装 首先在安装之前确认一下系统有没有安装Git。在Terminal中输入: git --version若确认系统没有安装git,可通过以下指南安装: Getting Started - Installing Git 2. 创建本地Git库 每次进行新项目时,都需要创建一个…

Gitlab-CI入门配置

Gitlab-CI使用及.gitlab-ci.yml配置 Gitlab-CI/CD 持续集成测试篇 Gitlab-CI/CD使用场景在这里插入代码片 首先,公司使用Gitlab作为工作仓库进行代码发布及版本控制,Gitlab内置了CI/CD的工具,这些工具可以用于代码提交的同时完成镜像构建、…

Gitlab CI/CD:入门指南

功能概览 CI/CD工作流 上图是基本的CI/CD工作流,与之对应的,gitlab几乎提供了上述流程节点所需的所有相关功能: 阶段功能 1. Verify 通过持续集成自动构建和测试你的应用程序 使用GitLab代码质量(GitLab Code Quality&#xff09…

GitLab-CI 基础介绍

转载自 kubeclub GitLab-CI 工作原理 将代码托管到 git 仓库在项目的根目录下创建 .gitlab-ci.yml 文件,在文件中包含了构建、测试以及部署等脚本,这些脚本被分组为 stage,共同组成了 pipelineGitLab 检测到 ci.yml 文件,使用 G…

GitLab CI Pipeline

GitLab 不单单只是作为一个代码版本控制的仓库,很多场景下使用 GitLab 作为整合 CI 持续集成就 CD 持续发布的工作平台,那么就是 GitLab 的 CI Pipeline 功能了。 CI Pipeline 试想一下,如果开发人员只需要编写代码,而编译、打包…

CICD之 gitlab和gtilab runner

gitlab官网地址 官网文档地址 https://docs.gitlab.com/runner/install/docker.html 一。gitlab 1。gitlab安装 方式一:rpm包安装(centos)1,下载rpm包清华源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/linux命令wget https://mirror…

gitlab-CI入门

gitlab-CI 代码管理自动化部署及消息推送 (1) 通过在项目根目录下配置**.gitlab-ci.yml**文件,可以控制ci流程的不同阶段,gitlab平台会扫描.gitlab-ci.yml文件,并据此处理ci流程。 (2) ci流程在每次团队成员push/merge后之后触发。每当你pu…

Gerrit介绍

谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的 repo,这在之前我们已经详细讨论过。另外一个重要的创新就是 Gerrit —— 代码审核服务器。Gerrit 为 Git 引入的代码审核是强制性的,就是说除非特别的授…

Git--GUI

前言 上一篇文章简单的分享了Git 的 Bash Here的使用,以及一些Git常用的命令等。本篇文章要分享的内容为Git GUI Here 的使用。 一、GUI GIT官方网站为了解决部分用户通过命令行对git工具使用时的怨声载道的现象,因此推出了一个GIT的可视化工具Git Gui …

GitLab CI介绍——入门篇

本文将会对Gitlab CI进行简要介绍,包括Gitlab Runner,Gitlab CI中的相关概念以及.gitlab-ci.yml的常用配置。 那么,GitLab CI 是什么? GitLab CI 是GitLab内置的进行持续集成的工具,只需要在仓库根目录下创建.gitlab-ci.yml 文件,并配置GitLab Runner;每次提交的时候,…

Gerrit

开发、提交、push、入库流程: repo init -u ssh://gerrit帐号[ip:port/platform/manifest -b 分支名 repo sync -c -f --no-tags -j1 git commit git push origin HEAD:refs/for/分支名 有的可能是这样push的: git push ssh://usernameip:port/path…

CICD详解(八)——gitlab安装与配置

今天继续给大家介绍Linux运维相关知识,本文主要内容是gitlab的安装与配置。 一、安装环境准备 首先,我们先来安装一下Gitlab的依赖包,执行命令: yum install curl policycoreutils openssh-server openssh-clients postfix -y然…

CICD详解(九)——gitlab简单使用

今天继续给大家介绍Linux运维相关知识,本文主要内容是Gitlab简单使用。 一、Gitlab关闭自动注册 在企业生产环境中,我们一般由项目负责人负责创建用户并分配权限,一般禁止员工私自注册用户,以防给项目开发工作带来安全性上的风险…

GitLab -- 简单使用CICD功能

前提: 新建GitLab 项目,可参考我另一篇博客 GitLab -- 创建项目_DGH2430284817的博客-CSDN博客 安装配置好Runner,可参考我另一篇博客: GitLab -- 安装和配置Runner_DGH2430284817的博客-CSDN博客 创建.gitlab-ci.yml 文件&…

Git Gui

目录 1.什么是Git Gui 2. 什么是ssh key 3. git/github生成密钥并通过 第一步:本地电脑配置 1.配置用户名和邮箱(如果已经配置,就跳过) 2.检查下自己之前有没有已经生成ssh 3.生成(或删除)秘钥 第二步:远程git…

GitLab CI/CD artifacts 属性的配置与使用

😀最新最全的 GitLab CI/CD 全部关键词解析 请查阅该专栏 GitLab CI/CD 关键词 artifacts用于指定在job 成功或失败 时应附加到作业的文件和目录的列表。 作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载 如 artifacts:paths 路径是相对于项目目录($CI_PROJECT…

CI环境搭建-创建git

添加如下配置: 上图说的需每次启动的即下面这个文件: 默认用户名、密码是admin/admin 创建代码仓库: 选择版本库: 使用方法: 1,创建一个文件夹 选择版本库地址: 也可以通过cmd命令来拉取代码&am…

CI持续集成环境搭建(3)--git的安装与搭建

https://blog.51cto.com/superleedo/2057841 1. 安装git *Note:不要用yum安装git, yum源安装git最新版本是1.8.3,该版本太老,之后用git commit 有可能会报错:git: ‘interpret-trailers’ is not a git command. See ‘git --he…