centos7下使用gitlab+shell实现CI/CD持续集成持续部署

                  centos7下使用gitlab+shell实现CI/CD持续集成持续部署

流程解释:第一步ci客户端向gitlab服务器注册自己,建立通信,第二步,当项目分支代码收到变化时,自动触发yml脚本,yml脚本根据注册时带入的runner通知客户端deploy脚本更新代码,同时执行编译和部署过程,deploy脚本写代码集成相关操作,具体见下面的讲解

CI部分

第一步:准备三台虚拟机S,C1,C2,我这里的三台机子都是全新的,除了系统文件没有其他文件

S:内存是4G用于装gitlab服务器 IP:192.168.95.131

C1:内存是1G用于装gitlab-CI客户端1 IP:192.168.95.132

C2:内存是1G用于装gitlab-CI客户端2 IP:192.168.95.133

第二步:S上安装gitlab服务器

安装依赖

sudo yum install curl policycoreutils openssh-server openssh-clients

sudo systemctl enable sshd

sudo systemctl start sshd

sudo yum install postfix

sudo systemctl enable postfix

sudo systemctl start postfix

sudo systemctl start firewalld

sudo firewall-cmd --permanent --add-service=http

sudo systemctl reload firewalld

windows下载安装包,下载地址是:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm

并且上传至linux目录下 如/data/web-download

cd  /data/web-download

安装python依赖 -y的意思是所有问答都使用Y

yum install -y policycoreutils-python

安装 这里安装需要花一点时间,耐心等待一下

rpm -i gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm

出现了这个图案,代表安装完成

安装 vim  

yum install -y vim

更换端口(这里写ip地址或者域名都可以,但是不能写localhost)

vim  /etc/gitlab/gitlab.rb

启动

gitlab-ctl reconfigure (这里可能需要一点时间)

重启:

gitlab-ctl restart(这里也会可能需要一点时间,不是必须项)

直接ip或者域名 +端口访问,如果访问不了,关闭防火墙或者防火墙开放端口

查看防火墙状态

systemctl status firewalld

关闭防火墙

systemctl stop firewalld

再次访问 即可,第一次登陆需要重新设置密码

新建组,新建项目

到这里服务器已经创建好了,项目也创建好了

第二步:C1上安装 gitlab-ci客户端

安装 vim  

yum install -y vim

安装runner

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

如果出现尝试其他镜像提示 可以ctrl+c 终止掉进程,然后更改镜像地址

vim /etc/yum.repos.d/runner_gitlab-ci-multi-runner.repo

将一下内容替换runner_gitlab-ci-multi-runner.repo原有的内容

[gitlab-ci-multi-runner] 

name=gitlab-ci-multi-runner

baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7

repo_gpgcheck=0

gpgcheck=0

enabled=1

gpgkey=https://packages.gitlab.com/gpg.key

执行 yum install -y gitlab-ci-multi-runner 即可

注册runner

gitlab-ci-multi-runner register

其中 urlgitlab 服务器的地址

token是上面新建的项目token

配置好后 刷新一下项目的runners,可以找到我们刚刚注册的runner,并且状态是绿色的

如果不是绿色的 重启runner即可

查看runner状态

gitlab-ci-multi-runner verify

重启所有runner
gitlab-ci-multi-runner run

重启单个runner
gitlab-ci-multi-runner run-single --url http://IP:port/ --token runnerToken --executor shell

编写 deploy文件

gitlab-runner~/.local/bin/目录下新建deploy文件

su gitlab-runner

mkdir ~/.local/bin -p

cd ~/.local/bin

vim deploy

复制以下内容到deploy文件

#!/bin/bash

if [ $# -ne 3 ]

then

      echo "arguments error!"

      exit 1

else

      deploy_path="/data/wwwroot/$3/$1/$2"

      if [ ! -d "$deploy_path" ]

      then

              git clone "[email protected]:${1}/${2}.git" $deploy_path

      cd $deploy_path

              git checkout $3

      else

              cd $deploy_path

              git pull

      fi

fi

以上脚本的意思是如果参数不是三个,打印参数错误

如果目录没建立 git clone 并且git checkout

如果存在 git clone

添加脚本执行权限

chmod +x ~/.local/bin/deploy

切换到root身份 编辑/etc/profile文件 最末尾添加加入 path路径

PATH="$HOME/.local/bin:$PATH"

给gitlab-runner用户创建文件权限

chown -hR gitlab-runner:gitlab-runner /data/wwwroot

配置ssh登录

su gitlab-runner

mkdir  ~/.ssh

cd   ~/.ssh

ssh-keygen

然后一直按enter

查看id_rsa.pub文件 并复制 token

创建一个runner-1用户,并将该用户添加到项目成员中(赋予该成员maintainer角色)

gitlab上,登录runner-1

将刚刚复制的token设置到runner-1用户的ssh-keys

创建文件 .gitlab-ci.yml test.txt ,前者用于CI解析,后者用于触发CI

yml 内容如下

stages:

  - deploy

deploy1:

  stage: deploy

  tags:

    - test-runner-1

  only:

    - master

  script:

    - bash deploy java test-project master

修改test.txt文件,查看CI 功能是否触发

此时任务可能会报以下错误

gitlab-runner身份下 执行以下命令

/etc/profile

deploy java test-project master

第一次访问这个服务器的时候,有个命令行提示是要把sign添加进已知服务器列表,然后手工输入个yes

同样的,在C2上做C1基本一致的的操作(除了基本配置一致,修改一下yml),这里不再一步一步的演示,至于单机版,就是讲CI客户端和gitlab服务端装在同一服务器上,操作基本一致,这里也不再赘述

修改yml 文件(这里是指定两个runner并行部署)  其他均一致

 自行查看c1,cd服务器文件是否都成功修改?如果都修改了,代表CI功能实现

CD部分

c1,c2服务器上安装好jdk,maven,tomcat,mysql,具体可见文章:https://www.cnblogs.com/tjqBlog/p/9573459.html

将一个常规的基于maven的spring web项目上传到gitlab服务器上,(我这里采用spring boot+mybatis的项目),

修改yam文件如下,

增加编译和部署生命周期

设置编译生命周期目标

设置部署生命周期目标

 提交修改,查看CI/CD运行轨迹,所有目标均为绿色代表CI/CD功能成功实现,

 这里的每种周期运行详情都可以点击进入查看,以下分别截图 deploy,build,ops,三个周期的详情

 

猜你喜欢

转载自www.cnblogs.com/tjqBlog/p/9556552.html