本文是关于GItlab CI/CD的自动部署方案
GitLabCI/CD工作原理
- 将代码托管到Git存储库
- 在项目根目录创建ci文件.gitlab-ci.yml,在文件中指定构建、测试和部署脚本
- GitLab将检测到它并使用名为GitLab Runner的工具运行脚本
- 脚本被分组为作业,它们共同组成一个管道
运行效果:
首先什么我们要知道Gitlab是什么
是一种类似github的服务,组织可以使用它来提供git存储库的内部管理。 它是一个自我托管的Git-repository管理系统,可以保持用户代码的私密性,并且可以轻松地部署代码的更改。
GitLab安装
- 检查配置
1
2
3
4
5
6
7
8
9
10
11 The following is the recommended minimum CPU hardware guidance for a handful of example GitLab user base sizes.
4 cores is the recommended minimum number of cores and supports up to 500 users
8 cores supports up to 1000 users
The following is the recommended minimum Memory hardware guidance for a handful of example GitLab user base sizes.
4GB RAM is the required minimum memory size and supports up to 500 users
8GB RAM supports up to 1000 users
一般来说,两核八GB就够用了
1
2
3
4
5
6
7 查询cpu指令
cat /proc/cpuinfo
查询内存指令
cat /proc/meminfo
查询Linux内核版本
cat /proc/version
友情提示:如果是一核两G不用试了
- 使用rpm包安装
1
2
3
4
5
6
7 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/e17/gitlab-ce-15.3.2-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-15.3.2-ce.0.el7.x86_64.rpm
vim /etc/gitlab.rb #编辑站点地址
gitlab-ctl reconfigure #配置
1
2
3
4
5
6
7
8 启动
gitlab-ctl start
状态
gitlab-ctl status
停止
gitlab-ctl stop
重启
gitlab-ctl restart另外docker安装和kubernetes安装就不赘述了
GitLab Runner介绍相关
GitLab Runner简介:
- GitLab Runner是一个开源项目,用于运行作业并将结果发送GitLab
- 与GitLabCI结合使用,GitLabCI是GitLab随附的用于协调作业的开源持续集成服务
- GitLab Runner是用Go编写的,可以在Linux,macOS和Windos操作系统上运行
- 容器部署需使用最新Docker版本。
- 可以根据配置需要配置任意数量的Runner
Runner特点:
作业运行控制:同时执行多个作业
作业运行环境:
- 在本地、使用Docker容器、使用Docker容器并通过SSH执行作业
- 使用Docker容器在不同的云和虚拟化管理程序上自动缩放
- 连接到远程SSH服务器
自动重新加载配置,无需重启
易于安装,可作为Linux,macOS和Windos的服务
GitLab Runner类型与状态
- 类型:
- shared 共享类型,运行整个平台项目的作业
- group项目组类型,运行特定group下所有项目的作业
- specific项目类型,运行指定的项目作业
- 状态
- locked:锁定状态,无法运行项目作业
- paused:暂停状态,暂时不会接受新的作业
GitLab Runner安装相关
包管理工具
1
2
3
4
5
6
7
8
9
10
11
12
13 Add the official GitLab repository 添加官方仓库
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
Install the latest version of GitLab Runner, or skip to the next step to install a specific version 安装最新版本或者下一步
sudo yum install gitlab-runner
To install a specific version of GitLab Runner:安装指定版本
yum list gitlab-runner --showduplicates | sort -r
sudo yum install gitlab-runner-10.0.0-1
更新runner
sudo yum update
sudo yum install gitlab-runner
GitLab Runner注册
获取shared类型runnertoken
进入系统设置->Runners
同理也可以找到对应得group CI/CD Runner和单项目得CI/CD Runner
1
2
3
4 /usr/local/bin/gitlab-runner register --locked="false"
向GitLab-CI注册一个Runner需要两样东西:
GitLab-CI的url和注册token。 其中,token是为了确定你这个Runner是所有工程都能够使用的Shared Runner还是具体某一个工程才能使用的Specific Runner。 如果要注册Shared Runner,你需要到管理界面的Runners页面里面去找注册token。如下图所示GitLab CI/CD支持的执行器有很多种,最常用的是Docker, shell,Kubernets三种。
Shell 是最易于配置的执行器。构建中所需的依赖得你手工装在 Runner 所在机器上。
更好的方式是使用 Docker,它让你拥有干净的构建环境,以及简易的依赖管理——所有的编译项目所需的依赖都可以放进 Docker 镜像中。Docker 执行器很容易就能创建带有依赖服务的编译环境,比如 MySQL。
1
2
3
4
5
6
7
8
9
10
11 docker run --rm -v v/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \
--url "url" \ # 网页端域名
--registration-token "token" \ # gitlab提供的token
--description "first-register-runner" \
--tag-list "test-cicd1,dockercicd1" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
.gitlab-ci.yml文件
如何检查你的yml文件是否符合,可以用CI Lint
Pipeline语法
1.Job
在.gitlab-ci.yml的文件中,可以定义一个或多个作业(job)。每个作业必须具有唯一的名称(不能使用关键字),每个作业是独立执行。作业定义了在约束条件下进行相关操作,每一个作业至少要包含至少一个script
1
2 job1:
script: "execute-script-for-job1"
2.script
1
2
3
4 job:
script:
- uname -a
- bundle exec rspec有时,script命令将需要用单引号或双引号引起来。例如,包含冒号命令(:)需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个”键:值”对.使用特殊字符时要小心
:
,{
,}
,[
,]
,,
等等
3.before_script
跟script差不多,只不过在作业之前运行,如果失败则整个任务失败,作业失败不会影响after_sciprt
4.stages
用于定义作业可以使用的阶段,并且是全局定义的。同一阶段的作业并行运行,不同阶段按顺序执行
1
2
3
4
5 stages:
- build
- test
- codescan
- deploy
5. .pre&.post
.pre始终是整个管道的第一个运行阶段, .post始终是整个管道的最后一个运行阶段。用户定义的阶段都在两者之间运行。.pre和.post的顺序无法更改。如果管道仅包含.pre或.post阶段的作业,则不会创建管道
1
2
3
4
5
6
7
8 codescan:
stage: .pre
tags:
- build
only:
- master
script:
- echo "codescan"
6.tags(指定runner)
用于从允许运行该项目的所有Runner列表中选择特定的Runner,在Runner注册期间,您可以指定Runner标签
7.allow_failure允许失败
allow_failure允许作业失败,默认值为false。启用后,如果作业失败,将会在用户界面中显示橙色警告。但是,管道的逻辑流程将认为作业成功/通过,并且不会阻塞。假设所有其他作业均成功,则该作业的阶段及其管道将显示相同的橙色警告。但是,关联的提交将被标记”通过”,而不会发出警告。
1
2
3
4
5 job:
stage: test
script:
- execute
allow_failure: true
1 | variables: |