GitLab CI/CD 是gitlab内置的一个工具,作用和我们的jenkins类似,不过由于是gitlab内置的工具,不需要额外配置外部的jenkins
下图是Gitlab 的基本流程
简单的总结一下就是:
创建一个新的branch -> 把我们的代码修改并Push我们的新branch(PR) ->GitLab CI/CD 会根据我们的新的branch 构架并测试(不断的修改测试)->通过我们review结果达到要求以后->通过pr merge到我们的master->自动部署我们的master 代码
如何编写我们的CI CD代码,其实很简单,只需要在repo根目录下增加一个文件:.gitlab-ci.yml
内容如下:
1 2 3 4 5 6 |
before_script: - apt-get install rubygems ruby-dev -y run-test: script: - ruby --version |
内容非常简单: 先安装一个包,然后打印ruby 的版本
然后,这个时候就有一个问题,这个Pipeline 在哪台机器上运行?
和jenkins的slave 概念类似,GitLab CI/CD需要GitLab Runner 来执行我们的Pipeline ,那么,什么是GitLab Runner ?
GitLab Runner 可以是Docker , 可以是一台linux主机,也可以是一台windows 主机,也可以是一个Kubernetes cluster
前提我们需要将我们安装好gitlab runner的 机器注册到gitlat master机器,这样,master才可以使用这个GitLab Runner 来执行一些Pipeline
如果使用的是常见的系统直接运行如下命令就可以安装:
1 2 3 4 5 6 7 |
# For Debian/Ubuntu/Mint sudo apt-get update sudo apt-get install gitlab-runner # For RHEL/CentOS/Fedora sudo yum update sudo yum install gitlab-runner |
然后注册的步骤如下:
- 执行命令:
1<span class="nb">sudo </span>gitlab-runner register
- 输入你的gitlab master 地址:
12Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )https://gitlab.com
- 输入你从gitlab master获得的token:
12Please enter the gitlab-ci token for this runnerxxx
- 输入对当前runner 的描述信息:
12Please enter the gitlab-ci description for this runner[hostname] my-runner
- 输入当前runner 的tag标签:
12Please enter the gitlab-ci tags for this runner (comma separated):my-tag,another-tag
- 输入 executor 类型Runner executor:
12Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:docker
- 如果你选择的类型是docker,会额外让你输入默认的景象名称(如果Pipeline中未指定的话):
12Please enter the Docker image (eg. ruby:2.6):alpine:latest
此处会因为你在master 某个具体项目中的token还是系统级别的token 觉得当前Runner 是Shared Runner 或者是Specific Runners
更多可以参考官网
然后与Runner 配套的是executor ,eecuutor就是我们的Pipeline 登陆到我们的机器上之后在什么环境中执行:
- Shell.
- Docker.
- Docker Machine and Docker Machine SSH (autoscaling).
- Parallels.
- VirtualBox.
- SSH.
- Kubernetes.
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021