Gitlab的CI/CD学习(三) —— gitlab-runner

本文介绍了GitLab中的CI/CD功能,强调其相对于Jenkins的简便性和可排查性。重点讲解了gitlab-runner的概念,它是如何在代码提交后执行.gitlab-ci.yml文件中的指令,实现自动化部署。配置gitlab-runner涉及仓库URL、token和executor的选择。此外,文章还提到了gitlab-runner的常用命令和一些注意事项,如runner用户的权限管理和更新runner列表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

背景

目前市面上常用的自动化部署的工具比较常见的是Jenkins,但是使用过程中,总会遇到各种奇奇怪怪的错误,很难定位问题所在;今天我要介绍的gitlab中的CI/CD功能,个人觉得部署起来更加简单,有效,易排查,可视化界面也更加整洁~

gitlab-runner

gitlab-runner就是在gitlab仓库配置了.gitlab-ci.yml文件后,需要到服务器上安装配置gitlab-runner,并监听对象仓库,当项目仓库发生提交合并操作后,服务器上的runner用户则会根据配置文件的命令进行对应的执行步骤,最终实现代码的打包-部署-运行一系列流程。

配置gitlab-runner

参考gitlab的官方文档

  1. 添加官方gitlab官方仓库
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2.安装

yum install gitlab-runner

3.配置

gitlab-runner register

进入到配置流程后,核心需要配置的是仓库的地址url和token,还有执行

### 配置和部署 GitLab CI/CD 到 Kubernetes 要在 Kubernetes (k8s) 上配置和部署 GitLab CI/CD,需要完成以下几个方面的操作: #### 1. 安装并注册 GitLab Runner 为了使 GitLab 能够在 Kubernetes 环境中执行 CI/CD 流程,首先需要安装 GitLab Runner 并将其注册到 Kubernetes 集群。以下是具体步骤: - **获取 GitLab Token**: 登录到您的 GitLab 实例,在目标项目的设置页面找到 `Runners` -> `Settings`,复制用于注册 Runner 的令牌(即 GITLAB_CI_TOKEN)[^1]。 - **创建 Kubernetes Secret**: 使用此令牌来创建一个 Kubernetes Secret 对象以便安全存储敏感数据。可以按照如下命令生成 Base64 编码后的字符串作为输入的一部分: ```bash echo -n 'rcVZF-mdHt9qCyyrCDgS' | base64 ``` 输出结果类似于:`cmNWWkYtbWRIdDlxQ3l5ckNEZ1NK`。接着利用这个编码值定义一个新的 Secret 文件并通过 kubectl 应用它。 创建名为 `gitlab-runner-secret.yaml` 的 YAML 文件内容如下所示: ```yaml apiVersion: v1 kind: Secret metadata: name: gitlab-runner-secret type: Opaque data: registration-token: cmNWWkYtbWRIdDpxQ3l5ckNEZ1NK # 替换为您自己的base64编码token ``` 执行以下命令应用该配置文件至集群当中去: ```bash kubectl apply -f gitlab-runner-secret.yaml ``` - **启动 Helm Chart 或手动部署 Runner Pod**: 推荐的方式之一就是借助官方提供的 Helm chart 自动化整个过程。如果选择这种方式,则需先初始化 helm repo 同时拉取最新版本图表资料库;另一种方法则是编写自定义 Deployment manifest 来描述所需资源规格详情再提交给 API Server 处理即可实现自动化管理生命周期的目的。 #### 2. 设置 .gitlab-ci.yml 文件 一旦成功设置了 Runners,下一步就是在源代码根目录下添加 `.gitlab-ci.yml` 文件用来指定流水线行为逻辑规则集。下面给出了一种简单的例子展示如何构建 Java Spring Boot 应用程序并将产物推送到容器镜像仓库里保存起来供后续阶段调用加载使用: ```yaml stages: - build - deploy variables: DOCKER_DRIVER: overlay2 IMAGE_NAME: my-spring-app build_job: stage: build image: maven:latest script: - mvn clean package -DskipTests=true artifacts: paths: - target/*.jar only: - main docker_build: stage: build services: - docker:dind image: docker:stable before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA" . - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA" after_script: - docker logout $CI_REGISTRY dependencies: - build_job only: - main deploy_to_k8s: stage: deploy image: alpine/helm:latest script: - apk add --no-cache bash - export HELM_EXPERIMENTAL_OCI=1 - helm registry login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - helm pull oci://$CI_REGISTRY/$IMAGE_NAME --version=$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA --untar - helm upgrade --install spring-boot-app ./spring-boot-app-chart \ --set image.repository="$CI_REGISTRY_IMAGE" \ --set image.tag="$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA" environment: name: production url: http://myapp.example.com when: manual only: - main ``` 以上脚本涵盖了个主要部分——编译、制作 Docker 映像以及最后一步向生产环境推送更新的应用实例。值得注意的是这里假设已经存在了一个预先准备好的 Helm Chart (`spring-boot-app-chart`) 来简化实际发布流程的操作复杂度[^4]。 #### 3. 整合 Jenkins 和其他工具(可选) 对于更复杂的场景可能还需要引入额外的服务组件比如持续集成引擎 Jenkins 来增强整体能力范围内的灵活性选项。此时可以通过调整现有架构设计模式或者重新规划新的交互方式达成预期效果。例如通过 Webhook 触发机制让每次有新 commit 提交进来的时候自动通知 Jenkins 开启新一轮的任务处理周期等等[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值