Gitlab的自动流水线搭建

服务器规划
192.168.190.100 Master etcd
192.168.190.101 Node1
192.168.190.102 Node2
192.168.190.103 Gitlab runnner
192.168.190.104 Harbor

一、搭建k8s集群

K8s集群创建secret (用于连接harbor镜像仓库)

二、搭建gitlab

1.搭建gitlab

yum localinstall gitlab-ce-11.2.3-ce.0.el7.x86_64.rpm -y
gitlab-ctl reconfigure //重写配置文件
gitlab-ctl status //查看状态
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION //查看版本号
gitlab-ctl start //开启服务
访问http://ip
//默认账号当前登录的账号(超户),密码自己设置最少8位
tar xf gitlab-11-2-stable-zh.tar.gz //中文版补丁,版本必须一致
cat gitlab-11-2-stable-zh/VERSION //查看中文补丁版本
cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak} //备份英文版,防止因为补丁版本不一样后报错而不能返回英文版
/bin/cp -rf gitlab-11-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/ //强制将中文补丁覆盖到英文上
gitlab-ctl reconfigure //重写配置文件
gitlab-ctl restart //重启gitlab
重启后稍等1分钟再在浏览器中输入:http://ip 部分会翻译为中文

2.修改为中文

修改gitlab的连接方式以及仓库名字
vim /etc/gitlab/gitlab.rb
external_url ‘http://192.168.190.103’

vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
host: 192.168.190.103
gitlab-ctl restart

3.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可以分布在不同的主机上,同一个主机上也可以有多个Runner。
Runner类型
GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。
Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。

4.安装gitlab-runner并且安装项目需要的环境

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
yum install gitlab-ci-multi-runner

yum install -y yum-utils device-mapper-persistent-data lvm2
cd /etc/yum.repos.d/ && wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker && systemctl enable docker
vim /etc/docker/daemon.json
{ “registry-mirrors”: [“https://h5d0mk6d.mirror.aliyuncs.com”] }
systemctl restart docker

yum install -y maven
修改maven的依赖包拉取地址 改为阿里源
因为是yum安装所以配置文件路径为 vim /etc/maven/settings.xml
在mirror标签中添加

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

5.让runner注册到gitlab中

gitlab-ci-multi-runner register
gitlab的uri以及token
在这里插入图片描述
红色部分是需要自己填写的
填写完毕创建完毕之后会生成配置文件
配置文件路径在/etc/gitlab-runner/config.toml
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.190.103/
Please enter the gitlab-ci token for this runner:
goGeV8Z88WYpe2UFdzGh
Please enter the gitlab-ci description for this runner:
[gitlab]: my-runner2
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tagWhether
Whether to run untagged builds [true/false]:
[false]: false
Whether to lock Runner to current project [true/false]:
[false]: false
Registering runner… succeeded runner=goGeV8Z8
Please enter the executor: docker, docker-ssh, kubernetes, parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it’s running already the config should be automatically reloaded!

可以创建多个runner

6.启动runner

前台启动gitlab-ci-multi-runner run -u root --syslog -d /runner/
后台启动 nohup gitlab-ci-multi-runner run -u root --syslog -d /runner/ &> gitlab.log &
gitlab-ci-multi-runner
这个命令总共有5个选项,让我们从选项来理解一下这个命令:
-c, --config选项
这个选项是用来指定配置文件路径的。如果你想同时运行多个Runner,你必须得知道你要运行哪些Runner以及这些Runner运行时所需要的信息。而前面我们说过,配置文件里面就存放着Runner运行时所需要的信息。而且一个配置文件是可以存放多个Runner的信息的。如果不指定这个选项,就会使用默认的配置文件。
-n, --service选项
这个选项是用来指定服务的别名的。为什么要有这个选项呢?指定别名有什么意义呢?我们从上一个选项可以看出来,一次只能运行一批Runner,因为一次只能指定一个配置文件。那如果我有多个配置文件,我要运行多批Runner,那是不是给每一次批量运行服务取不同的别名来区分更好一点呢。
-d, --working-directory选项
这个选项是用来指定此次批量运行服务的工作目录的。如果自己没有指定builds_dir的话,此次运行起来的Runner会把builds_dir放到这个目录里面。
-u, --user选项
这个选项很重要,它指定了该以什么用户权限来运行Runner。为了安全,我认为不应该给运行Runner的用户过高的权限,更不应该以root用户来运行Runner。
–syslog选项
如果指定了这个选项,则把日志记录到系统日志
首先,gitlab-ci-multi-runner run默认是前台运行的,使用体验不好;
其次,当gitlab-ci-multi-runner run在后台运行的时候,要查看其运行状态不方便,而且也没有提供停止gitlab-ci-multi-runner run的命令。
所以,要是能将批量运行Runner这个功能安装为一项服务,就更爽了!
gitlab-ci-multi-runner确实就提供了这样的功能。
install、uninstall、start、stop、restart、status这6个命令就是和服务相关的。
我一开始对gitlab-ci-multi-runner的服务概念感觉比较懵,让我们来看看安装服务install这个命令到底干了一件什么事情。

从选项可以看出,一项服务的信息有4个:服务名、工作目录、配置文件和用户。这个命令的选项和gitlab-ci-multi-runner run的选项基本一样。可见,批量运行Runner和服务之间的关系暧昧。至于是什么关系,往下看gitlab-ci-multi-runner start这个命令。

启动一项服务,只要指定服务的名称就行了(默认服务名称是gitlab-runner)。启动服务后,运行命令ps -aux | grep gitlab-runner查看后台程序,发现启动服务其实就是在后台执行了一个批量运行Runner的任务,所以服务安装命令的选项才会和批量运行Runner命令的选项基本一样。

还有stop命令用于停止服务,restart命令用于重启服务,status用于查看服务状态。这三个命令的使用方法和start类似,就不一一介绍了。

7.其他一些思考

1.什么情况下需要注册Shared Runner?
比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。
2.什么情况下需要注册Specific Runner?
比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。
3.什么情况下需要在同一台机器上注册多个Runner?
比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。

三、搭建harbor镜像仓库

1.修改harbor的配置文件

搭建harbor需要有docker环境
vi harbor.cfg
hostname = 192.168.190.104 #登陆IP
ui_url_protocol = http harbor_admin_password = 123456789
./prepare
./install.s --with-chartmuseum (这个参数可以让harbor开启chart功能)

四、将代码提交并且把yaml文件封装为chart

为k8s集群配置helm环境

1.配置gitlab连接k8s

这里配置的是单个项目连接k8s集群 也可以在全局配置下配置
CA证书的获取方式
kubectl get secret kubectl get secrets | grep default-token | awk '{print $1}' -o jsonpath="{[‘data’][‘ca.crt’]}" | base64 --decode
Token这里需要创建一个凭证 也就是权限管控问题
vim gitlab-admin-service-account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-admin
  namespace: test
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: gitlab-admin
  namespace: test

kubectl apply -f gitlab-admin-service-account.yaml
因为我这里demo部署在test命名空间所以这里我就只给test命名空间的管理员权限
kubectl -n test describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk ‘{print $1}’)

五、.gitlab-ci.yml

cache:                           
  paths:
  - target/
#表示需要缓存某个目录因为没执行一个步骤会重新拉仓库 不然会导致重新拉仓库就没有war包或者jar包
stages:
  - build
  - package
  - deploy
#一共3个步骤
build:
  stage: build
  script:
    - mvn clean package -Dmaven.test.skip=true
  tags: 
    - shell 
#tags匹配执行runner
package: 
  stage: package
  script: 
    - docker login -u admin -p 123456789  http://192.168.190.104 
    - docker  build -t  192.168.190.104/test/tomcat:v1 .
    - echo "Push image ...."
    - docker push 192.168.190.104/test/tomcat:v1
  tags:
    - shell

deploy:
  stage: deploy 
  only:
    refs:
      - dev
#only表示匹配贼执行 这里指的是如果是dev那么就执行这个步骤,如果不是就不触发
#这里还有个相反意思的 except表示如果符合这个条件就排除这个步骤

  script: 
    - kubectl create deploy tomcat --image=192.168.190.104/test/tomcat:v1 
    - kubectl get pods,deploy
  tags:
    - shell

还有很多用法未使用
语法详情https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic

六、总结

Gitlab用来存放代码
Gitlab-runner 类似于jenkins-slave的架构 用来处理gitlab-ci自动化的pipeline流水线管道
每个runner可以针对所有项目共享也可以针对某一个项目独特使用,如果项目非常多那么每个项目可以配备一个专属的runner服务器并且可以在gitlab-runner的用户加目录下放置.kube/config文件 也可以根据分支判断是否那个集群
在config多配置几个集群信息然后且换不同的用户部署至不同的集群中去
总的来说还是非常好用的 无插件对接

发布了92 篇原创文章 · 获赞 12 · 访问量 5705

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104605558
今日推荐