部署流程步骤
GitLab自动化部署的流程通常包括以下几个步骤:
1. 代码提交
开发人员将代码提交到GitLab的仓库。GitLab可以通过分支来管理不同版本的代码,并确保代码质量在提交时通过了自动化的验证(例如:单元测试、代码检查等)。
2. 触发CI/CD管道
在GitLab中,CI/CD(持续集成/持续部署)管道通常由GitLab CI进行管理。每次代码提交后,GitLab会自动触发CI/CD管道,执行一系列预定义的任务。这些任务可以包括:
- 构建:对代码进行编译、打包或构建应用程序。
- 测试:运行单元测试、集成测试或端到端测试,以确保代码没有引入错误。
- 部署:将代码部署到目标环境(例如开发环境、测试环境、生产环境)。
3. CI/CD配置文件(.gitlab-ci.yml
)
GitLab的CI/CD流程是通过一个配置文件来定义的,该文件名为 .gitlab-ci.yml
。在这个文件中,你可以定义不同的工作流(例如构建、测试、部署等)和它们的执行顺序。这个文件通常位于项目根目录下。示例如下:
yaml
stages:
- build
- test
- deploy
build_job: # 构建阶段
stage: build
script:
- echo "Building the project..."
- npm install
- npm run build
test_job: # 测试阶段
stage: test
script:
- echo "Running tests"
- npm test
deploy_job: # 部署阶段
stage: deploy
script:
- echo "Deploying the application"
- ssh [email protected] 'rm -rf /root/projects/WindowMap/dist' # 将远程服务器文件删除
- scp -r dist <[email protected]>:/root/projects/WindowMap # 将本地项目dist目录复制到远程服务器
only:
- master
这个示例定义了三个阶段:构建(build)、测试(test)和部署(deploy)。每个阶段下的工作都会在对应的"job"中执行。
4. 构建与测试
- 构建阶段 :GitLab CI首先会根据
.gitlab-ci.yml
中的定义执行构建步骤。常见的构建任务包括安装依赖、编译代码、打包应用等。 - 测试阶段:在构建完成后,GitLab CI会运行自动化测试来确保代码的质量。这些测试可以是单元测试、集成测试或端到端测试。
5. 部署
如果测试成功并且没有错误,GitLab CI将执行部署阶段。部署任务通常会根据环境的不同执行不同的脚本,例如将应用程序部署到开发、测试、预生产或生产环境。常见的部署方式包括:
- 使用SSH将代码上传到服务器
- 使用Docker镜像部署到容器中
- 使用Kubernetes部署到集群
6. 持续部署(CD)
在GitLab的自动化部署流程中,一旦代码通过CI步骤(构建和测试),并且没有问题,它可以自动部署到目标环境中。如果是持续部署(Continuous Deployment,CD),每次代码合并到主分支时,代码将会自动部署到生产环境中。
GitLab执行器GitLab Runner
GitLab Runner 是一个开源的工具,它用于执行 GitLab CI/CD 配置文件(.gitlab-ci.yml
)中定义的任务。可以将其理解为 GitLab CI/CD 的执行者,具体负责在你设置的环境中运行构建、测试和部署等任务。
1. GitLab CI/CD 触发任务
当你在 GitLab 上提交代码时,CI/CD 流程会被触发。GitLab 会根据 .gitlab-ci.yml
文件定义的步骤生成任务,并将这些任务分配给 GitLab Runner 来执行。
2. GitLab Runner 执行作业
GitLab Runner 接收到这些任务后,会在你指定的机器上或容器中执行相关的命令或脚本。你可以配置 GitLab Runner 来执行特定的操作,比如构建应用、运行单元测试、打包代码,或进行部署等。
GitLab Runner 的工作原理
-
安装与配置:GitLab Runner 可以安装在本地机器、虚拟机、Docker 容器等多种环境中。安装完成后,你需要注册 GitLab Runner,让它连接到你的 GitLab 实例。
-
Executor:GitLab Runner 支持多种执行器(Executor),这决定了 Runner 执行任务的方式。常见的执行器包括:
- Shell:直接在本地或服务器上运行命令。
- Docker:在 Docker 容器中执行作业,这种方式常用于隔离环境,确保作业在独立的环境中运行。
- Kubernetes:在 Kubernetes 集群中运行作业。
- Docker-SSH:通过 SSH 远程连接到 Docker 容器执行命令。
- 其他执行器(例如:SSH、Parallels 等)根据需求选择。
-
任务执行 :一旦 GitLab Runner 被配置好并与 GitLab 实例连接,它就会开始执行
.gitlab-ci.yml
中定义的每个作业。每个作业通常会在 GitLab Runner 中的不同"作业"或任务上进行并行或顺序执行。
GitLab Runner 的安装
-
安装 GitLab Runner(以 Linux 为例) :
bash# 安装 GitLab Runner sudo apt-get install gitlab-runner # 注册 GitLab Runner sudo gitlab-runner register
-
配置 GitLab Runner: 注册后,你需要提供以下信息:
- GitLab 实例的 URL(例如:gitlab.com)
- GitLab 项目的 Token(可以在 GitLab 的项目设置中找到)
- 选择执行器类型(如 Docker、Shell 等)
GitLab Runner 与 GitLab CI/CD 的区别
- GitLab CI/CD 是 GitLab 中用来执行持续集成和持续交付的工具,它定义了 CI/CD 的流程和工作流(通过
.gitlab-ci.yml
文件来管理)。它负责触发构建、测试、部署等流程。 - GitLab Runner 是一个代理程序,它负责在实际环境中执行这些流程,跑 GitLab CI/CD 任务。
总结
GitLab Runner 是 GitLab CI/CD 的一个重要组成部分。它执行由 GitLab CI 管理的任务,如构建、测试和部署。在 GitLab 中提交代码后,CI/CD 流程会被触发,任务会由 GitLab Runner 执行。因此,GitLab Runner 和 GitLab CI/CD 是密切相关的,前者是后者的实际执行者。
.gitlab-ci.yml配置文件中的各配置项
在 GitLab CI/CD 中,.gitlab-ci.yml
文件是最核心的配置文件,它定义了整个持续集成(CI)和持续部署(CD)的工作流程。所有的 CI/CD 任务、流水线、作业、环境变量等内容都在这个文件中进行配置。下面我将详细介绍 .gitlab-ci.yml
文件中的各个配置项及其作用,并示范如何进行配置。
.gitlab-ci.yml
配置文件的结构
一个 .gitlab-ci.yml
文件通常包含以下几个主要部分:
- 全局配置 (例如
stages
、variables
等) - 阶段 (
stages
) - 作业 (
jobs
) - 环境 (
environment
) - 缓存和工件 (
cache
、artifacts
) - 条件和限制 (
only
、except
、when
等)
1. 全局配置
1.1 stages - 定义流水线中的各个阶段(Stages)
stages
定义了 CI/CD 流水线的执行顺序。默认情况下,GitLab 会自动定义几个常见的阶段:build
、test
、deploy
等,但你也可以根据需要自定义。
示例:
yaml
stages:
- build
- test
- deploy
在这个例子中,流水线会按照 build
-> test
-> deploy
的顺序执行作业。
1.2 variables - 定义全局环境变量
你可以在 .gitlab-ci.yml
文件中为整个 CI/CD 流程定义变量。这样,你可以在不同的作业中使用这些变量。
示例:
yaml
variables:
IMAGE: "node:14"
DATABASE_URL: "postgres://user:password@localhost/dbname"
在任何作业中,你都可以引用这些变量,像这样:
yaml
build:
script:
- echo "Using $IMAGE"
1.3 before_script / after_script - 在所有作业之前/之后执行的脚本
before_script
和 after_script
用于设置在所有作业执行前或执行后需要运行的脚本。如果你需要在所有作业前设置一些全局操作,比如安装依赖项或清理工作环境,可以在这里配置。
示例:
yaml
before_script:
- echo "Starting the CI/CD pipeline"
after_script:
- echo "Pipeline completed"
2. 阶段(Stages)
stages
部分定义了流水线中的各个阶段(步骤),而每个阶段下可以有多个作业(jobs)。这些阶段按顺序执行,直到整个流水线完成。
3. 作业(Jobs)
作业是 .gitlab-ci.yml
文件中的核心部分,它定义了具体的任务或命令。每个作业都属于某个阶段,并定义了要执行的命令和其它配置。
每个作业至少需要以下几个配置项:
- stage :指定该作业所在的阶段(
build
、test
、deploy
等)。 - script:指定要执行的脚本(可以是 Shell 命令)。
示例:
yaml
build:
stage: build
script:
- echo "Building the project..."
- npm install
test:
stage: test
script:
- echo "Running tests..."
- npm test
3.1 作业的其他常见配置项
-
image:指定 Docker 镜像,GitLab CI 会在指定的镜像中执行作业。
yamlimage: node:14
-
services:用于配置作业需要的额外服务,例如数据库或缓存服务。
yamlservices: - postgres:latest
-
only / except :控制作业的触发条件。
only
定义哪些条件下该作业会运行,except
定义作业不执行的条件。yamldeploy: stage: deploy script: - deploy.sh only: - main
-
when :定义作业触发的时机(
on_success
、on_failure
、manual
、delayed
)。yamldeploy: stage: deploy script: - deploy.sh when: manual # 手动触发
-
allow_failure :如果设置为
true
,即使作业失败,CI/CD 流水线也不会中断。yamltest: stage: test script: - run_tests.sh allow_failure: true
4. 环境(Environment)
在 GitLab CI 中,environment
用来指定一个作业部署的目标环境,比如开发环境、测试环境、生产环境等。你还可以指定环境的 URL,GitLab 会在 UI 中显示这些信息,帮助你查看每个环境的状态。
示例:
yaml
deploy:
stage: deploy
script:
- deploy.sh
environment:
name: production
url: https://www.production.com
5. 缓存(Cache)和工件(Artifacts)
-
cache :缓存可以加速作业执行,通常用于保存依赖项(如 Node.js 的
node_modules
或 Ruby 的gem
)。yamlcache: paths: - node_modules/
-
artifacts:工件指的是在作业执行过程中生成的文件,它们可以被后续作业使用,或者保留以供下载。通常用于存储测试结果或构建产物。
yamltest: stage: test script: - npm test artifacts: paths: - test-reports/ expire_in: 1 week # 设置工件过期时间
6. 条件和限制
6.1 only / except
-
only:限制作业仅在特定条件下运行,比如特定的分支、标签等。
yamldeploy: stage: deploy script: - deploy.sh only: - main # 仅在 main 分支上执行
-
except :与
only
相对,表示排除的条件。yamldeploy: stage: deploy script: - deploy.sh except: - feature/*
6.2 when
when
控制作业的执行时机。
on_success
(默认):仅当前面的作业成功时执行。on_failure
:仅当前面的作业失败时执行。manual
:手动触发作业。delayed
:延迟执行作业。
示例:
yaml
deploy:
stage: deploy
script:
- deploy.sh
when: manual # 需要手动触发
7. 多个作业和并行执行
GitLab CI 支持作业的并行执行,只要它们属于不同的阶段或者没有依赖关系,作业会同时进行。例如:
yaml
build:
stage: build
script:
- echo "Building the project..."
test:
stage: test
script:
- echo "Running tests..."
deploy:
stage: deploy
script:
- echo "Deploying the application..."
总结
.gitlab-ci.yml
文件配置了 GitLab CI/CD 流水线的整个流程,以下是常见配置项的作用:
- stages:定义流水线阶段。
- jobs:定义每个阶段中的具体作业。
- variables:设置全局环境变量。
- before_script / after_script:在所有作业前后执行的脚本。
- image 、services:配置 Docker 镜像和服务。
- cache 、artifacts:缓存依赖和存储工件。
- environment:定义部署环境。
- only / except 、when:控制作业的触发条件和执行时机。
通过灵活配置这些选项,你可以根据项目需求定制 CI/CD 流程,优化代码的构建、测试和部署过程。