CI/CD是什么
CI全名Continuous Integration,啥意思?就是我们经常听到的持续集成概念。
当开发每天会提交多次代码到主干上,会做一些重复性的动作时,就可以用持续集成环境来操作。
有集成了,就肯定少不了它的好基友,没错就是CD。
CD全名是Continuous Deployment,是持续部署。
CD还有个小号,交持续交付,英文全称是Continuous delivery,缩写也是CD。
CI/CD优点是,重复的工作用自动化来代替、减少时间成本、版本发布时间减短了。
CD图
有什么类型的CI
jenkins
gitlab
GitLab
1、安装gitlab
gitlab是一款项目软件管理工具。
2、什么是gitlabrunner
GitLab-Runner是配合GitLab-CI进行使用的。一般地,GitLab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本。
所以,GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。如下图所示:
3、安装gitlab runner
添加官方库
# For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # For RHEL/CentOS/Fedora curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
命令安装
# MacOS sudo brew install gitlab-ci-multi-runner # For Debian/Ubuntu/Mint sudo apt-get install gitlab-ci-multi-runner # For RHEL/CentOS/Fedora sudo yum install gitlab-ci-multi-runner
或
建议找国内镜像源安装(清华大学开源镜像源)
https://mirrors4.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-12.4.1-1.x86_64.rpm
wget https://mirrors4.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-12.4.1-1.x86_64.rpm yum localinstall -y gitlab-runner-12.4.1-1.x86_64.rpm
注册
gitlab-runner register
输入此命令后会提示一下操纵
输入你的gitlaburl
lease enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
XXX
输入你的gitlab注册令牌
Please enter the gitlab-ci token for this runner
XXX
输入说明
Please enter the gitlab-ci description for this runner
XXX
输入runner的tags(给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner)
是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
Please enter the gitlab-ci tags for this runner (comma separated)
输入 Runner 执行方式(一般都是shell) 说明https://docs.gitlab.com/runner/executors/README.html
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
(1)、手动设置 具体的 runner, 指定到特定的runner
runner类型
GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。
Shared Runner:这种Runner是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
Specific Runner:这种Runner只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。
点击修改一下 runner
(2)、共享runner 只能root用户创建这个runner
(3)、群组runner 在组上面设置,这个用的比较多。
(4)、k8s runner
4、项目添加 .gitlab-ci.yml 配置文件 。可去官网查看配置文件语法
一般ci文件还会添加docker login的命令,进行命令推送到仓库的操作
(1)ci命令是在gitlab-runner执行的。gitlab-runer 使用的用户是 gitlab-runner 用户。此用户执行docker命令时候有权限问题,一般会有下面提示
解决方法
原因是我用root运行docker,而gitlab的runner是用gitlab-runner这个帐户来运行的,遇到了权限问题。 ls -slh /var/run/docker.sock 0 srw-rw---- 1 root root 0 Dec 7 10:16 /var/run/docker.sock 用su - gitlab-runner切换帐户后,也会报告相同的错 $ docker info Cannot connect to the Docker daemon. Is the docker daemon running on this host? 解决方法是创建一个docker组 groupadd docker 并重启docker进程,这样它会自动用docker这个组在启动 systemctl restart docker ls -slh /var/run/docker.sock 0 srw-rw---- 1 root docker 0 Dec 10 10:30 /var/run/docker.sock 最后把gitlab-runner加入docker组就可以了。 usermod -aG docker gitlab-runner
(2)流水线直接卡住,提示信息 此作业被卡住,因为没有任何该项目指定标签的 runner 在线
当时我用的具体runner, 这个原因就是在创建 .gitlab-ci.yml的时候没有给任务指定标签,或者指定的标签不存在而导致的。 (创建runner时指定的标签要和ci文件里面的标签一样)。或者 用群组runner也可以解决这个问题。
(3) docker login报错Error response from daemon: Get https://10.10.90.105/v2/: dial tcp 10.10.90.105:443: getsockopt: connection refused
解决方案:修改docekr参数
文件:/usr/lib/systemd/system/docker.service
修改完成后 执行:
[root@c7test_master ~]# systemctl daemon-reload
[root@c7test_master ~]# systemctl start docker
dockerfile
dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 COPY . /app/bin WORKDIR /app/bin ENV ASPNETCORE_URLS http://*:5035 ENTRYPOINT ["dotnet", "CoreWebDemon.dll"]
运行镜像
docker run -d -p 9988:5035 76c71065e1ff
推荐文档
https://www.cnblogs.com/fithon/p/6645020.html
https://gitlab.com/gitlab-org/gitlab-runner