gitlab-ci的最简最速实践

关联git

获取 gitlab access token 或者是把主机的 ssh key 配置到 gitlab 服务端上

我这里获取 gitlab 的 access token。请根据自己的情况选择

Setting >> Access Tokens

gitlab-ci的最简最速实践_第1张图片

然后勾选所有权限,并一键生成

gitlab-ci的最简最速实践_第2张图片

获得一串序列码,注意保存

配置 git remotes,URL 格式为

https://oauth:${ACCESS_TOKEN}@{GIT_URI}

至此,完成了本地代码和代码库的关联。

同步代码

git pull origin master --allow-unrelated-histories

拉取私仓中的文件

然后通过ide中 add >> push >> commit 将本地代码推送到仓库

配置Runner

实际的使用环境中,会有多个私仓,多个 pipeline,这些任务都需要异步的进行。gitlab 中 gitlab-server 接收到 webhook 或者手动/定时触发的执行 pipeline 的请求,会将这些任务分发到对应的gitlab-runner 中。因此在此步骤中,我们创建 runner 并注册到 server 上去。

点开所对应的代码 reposities  >> Settings >> General >> Visibility, project features, permissions. 开启 pipeline

gitlab-ci的最简最速实践_第3张图片

 Settings >> CI/CD >> Runners 寻找我们所需要的对应的启动 runner 的方法;

因为是测试环境,所以我直接在本机以单机 docker 的方式启动

其中包含了注册 runner 所需要的凭据

gitlab-ci的最简最速实践_第4张图片

在启动 runner 容器之前,需要在我本机执行以下操作

因为 gitlab-ci 也是采取的 dind 的模式,所以需要我们对其进行主机的 docker 注入。

首先不要用 centos 自带的 yum 源装 docker,它的版本太低了,换阿里云的,参考这篇文章

https://www.cnblogs.com/YorkQi/p/14480428.html

在 runner 上运行任务的时候使用的是 gitlab-runner 账户,使用 docker 时会提示权限不足问题:

所以我们需要将其加入到 docker 组

sudo usermod -aG docker gitlab-runner

外部启动的话,需要把 docker-cli docker.sock 以及一个外部关联库挂载进去

docker run -d --name gitlab-runner --restart always \
  -v /root/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /usr/local/bin/kubectl:/usr/local/bin/kubectl \
  -v /root/.kube/config:/kubeconfig \
  -e KUBECONFIG=/kubeconfig \
  gitlab/gitlab-runner:latest

启动之后进入容器并执行注册命令

gitlab-runner register 

根据之前在 gitlab 注册所需凭据依次键入完成 runner 和 server 的关联

可以在 web ui 上看到以下注册成功的信息

gitlab-ci的最简最速实践_第5张图片

至此,runner 的相关配置就完成了

配置流水线

我们需要在项目目录下新建 .gitlab-ci.yml

这里主要将 pipeline 的步骤分为三步:

  • 测试
  • 构建
  • 部署

文件的大致结构如下:

stages:
  - test
  - build
  - deploy
GoTest:
  stage: test
  script: []
  after_script: []
  tags:
    - go

GoBuild:
  stage: build
  script: []
  tags:
    - go

Deploy2K8S:
  stage: deploy
  script: []
  tags:
    - go

test stage 用于通过专用测试的 dockerfile 来构建测试镜像,镜像的入口是 go test 命令,用来执行 IDE 通过 generator 功能生成的 test 文件,在完成测试步骤后会删除测试用镜像,本步骤中只做编译构建,不做镜像推送

build stage 用于构建以 main.go 为入口的 docker image,并且会推送到私有镜像仓库

deploy stage 实现了最简单的交付流程,即通过 kubectl apply 应用新镜像对工作负载进行滚动更新

注意:实际生产环境中的持续交付,还需要对Pod的实际运行状况做一定的跟踪,并且有可能涉及到多集群的分发

至此,gitlab-ci 的最简实践就完成了。

 

 

你可能感兴趣的:(k8s,CI/CD,容器,gitlab,ci)