持续集成
概念
持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
Gitlab CI/CD运行原理
开发者推送、提交代码到Gitlab,Gitlab通过项目的.gitlab-ci.yml, 文件配置,找到指定的项目gitlab runner,runner运行相关的命令,进行编译、 集成、测试、交付、部署,一切顺利地话会分发到各个服务器(测试服务器、预发布服务器、正式服务器等),此时一个迭代开发上线流程走完。
GitLab Runner
GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。
所以,GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。
Runner类型
GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。
Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。
Gitlab-ci安装步骤
1:在指定服务器安装gitlab-runner 并注册gitlab-runner,其中注册信息包括url token,可以在公司gitlab网站里面setting-ci/cd-runner- Specific Runner里面找到
2:在项目里面添加.gitlab-ci.yml文件,并编写配置文件
配置一个Runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装:
sudo yum install gitlab-runner
注册runner
sudo gitlab-runner register
会提示输入信息:
url 从gitlab网站里拿到
token 从gitlab网站里拿到
描述:
Tags 标签(后面会用到)
选择runner的执行者:shell
配置.gitlab-ci.yml
stages:
- build
job1:
stage: build
script:
- bash gitlab-ci-build.sh
tags:
- teacher-h5
only:
- master
配置遇到的问题:
1:代码提交后 CI/CD—Pipelines 一直pending
因为.gitlab-ci.yml里面没有配置tags,
2:提示构建失败
一般是两个原因:
1:ssh连接失败
原因:以普通用户登录后生成ssh key,并将ssh key保存在/root/.ssh目录下,这里生成的ssh key是root用户的,并不是当前用户的,如果我们将/root/.ssh里面的公钥配置在gitlab后,尝试连接有可能会报错,因为当前用户在连接gitlab的时候会用/home/你的用户名/.ssh里面的公钥去连接,这个时候就会出现连接问题,所以我们需要将/home/你的用户名/.ssh里面的公钥配置在gitlab
2:gitlab-runner程序权限不够,以至于无法执行必要的脚本
可以在/etc/ passwd里面配置gitlab-runer的权限
或者在脚本里面使用sudo –i
3:gitlab-runner安装完成后 需要到/etc/passwd里面设置他的权限把用户权限设置为0,组权限设置为和admin一样
4:使用gitlab-runer角色去git代码的时候总是提示密钥不对,这个时候可以使用 ssh git@ gitlab.zmaxis.com方式手动连接 看看是否可以连接上
5:Linux系统中默认生成的位置是/root/.ssh目录,如果我们是以普通用户登录的我们最好将位置切换成/home/你的用户名/.ssh目录里,就是你生成sshkey的时候不是要选择位置吗,那个时候选择你的home下的位置