1.基础概念
- DevOps
Development 和 Operations 的组合,传统的软件组织讲开发和 IT 运营以及质量保障设为分离的部门,Devops 是在敏捷开发模型上进一步发展而来的。满足了产品研发所要求的持续开发、持续测试、持续集成、持续部署 - CI/CD
Continuous Integration(持续集成)和 Continuous Delivery(持续交付)Continuous Deployment(持续部署)
-pipeline
配置好的 CI/CD 的流程,比如安装依赖包,进行代码 review、构建、编译、发布等一整套的流程 - GitLab Runner
执行流水线的环境,所有 CI/CD 的任务都是在GitLab Runner内部执行的,GitLab Runner和 GitLab 是两个功能不同的软件,GitLab进行代码管理,GitLab Runner是流水线。在CI/CD 的执行环境中,二者搭配工作。
GitLab Runner 可以安装在很多平台上,也可以使用很多工具安装,可以在 GNU/Linux、macOS 和 Windows 上工作。可以在 K8s 环境安装,也可以在 Docker 环境安装。
2.安装gitLab Runner
(1)拉取镜像:如果没有指定版本,则默认pull最新latest版本。
docker pull gitlab/gitlab-runner
(2)启动镜像:542为镜像id
docker run --name gitlab-runner --restart always -v /usr/local/var/docker/gitlab-runner/config:/etc/gitlab-runner -v /usr/local/var/docker/gitlab-runner/docker.sock:/var/run/docker.sock -d 542
注意:mac系统下应该将挂载目录/usr/local/var
改为 /Users/Shared/docker
3.注册GitLab Runner
一个 GitLab Runner 可以注册多个 Runner,每个 Runner 只能服务于一个 GitLab 环境,但可以服务于同一个 GitLab 的多个项目。
注册一个Runner,需要GitLab地址和注册Runner的token,两者缺一不可:
步骤一:查看token、ipAddress
登陆gitlab查看token: 我的gitlab地址为localhost:9999
步骤二:注册
接下来的一系列配置命令,使得GitLab Runner和GitLab产生联系:
docker exec -it d25 /bin/bash #进入容器内部,d25位gitlabrunner的容器id
gitlab-runner register #注册runner
后面根据提示输入url、token、描述、标签、shell执行命令。(标签要和gitlab-ci.yml中自定义的标签一致)
步骤三:重启镜像
docker restart d25
4.遇到问题:
在前几次注册runner时总是报错如下:
ERROR: Registering runner… failed runner=eFn3g8w9 status=couldn’t execute POST against http://localhost:9999/api/v4/runners: Post http://localhost:9999/api/v4/runners: dial tcp 127.0.0.1:9999: connect: connection refused
PANIC: Failed to register the runner. You may be having network problems.
查阅资料说可能是防火墙没关,或者gitlab和gitlab-runner的版本不兼容导致的。但我这里不是这两个问题导致的。
经过几次尝试,我总结经验一个是url不能写localhost,而是用具体的ip。另一个原因是url前的http不能忽略,完整的URL应该是“http://192.168.100.55:9999"。
5.查看注册信息命令:
docker exec gitlab-runner cat /etc/gitlab-runner/config.toml
或在宿主机/Users/Shared/docker/gitlab-runner/config目录下直接打开config.toml查看
4.注册成功
5.实际应用
在开发工程中,使用gitlabrunner进行cicd时发现在build镜像时需要java、maven等环境,导致构建失败。原因是用docker安装的gitlabrunner容器内还需要再安装Java等环境,比较繁琐。所以在实际开发中,最简便的方法是本地安装包安装,而不是使用docker。