本文涉及内容较为繁杂,自己也是头一次接触这方面内容,主要也是作为记录以免睡一觉起来忘了。。

一、准备工作

1.在windows控制面板-程序和功能里开启Hyper-V相关功能;
2.在菜单栏管理工具里找到Hyper-V管理器并打开;
3.新建虚拟机,没有特殊配置直接点下一步就好;

主要注意下面几点

centos服务器中如何安装宝塔 centos搭建宝塔_ci


在网上找一个centos的安装镜像,我用的是CentOS-7-x86_64-Minimal-1810.iso

安装完成后再创建一个可以桥接到外网的链接(或者安装之前创建也可以)

centos服务器中如何安装宝塔 centos搭建宝塔_学习_02


建立好之后在控制面板网络链接里面会看到你刚才创建的链接,然后选择以太网和你刚才创建的链接右键选择“桥接”。

桥接之前先查看当前网络链接信息,记住你的ipv4、子网掩码DNS等。

centos服务器中如何安装宝塔 centos搭建宝塔_git_03


桥接好后将物理机的IP子网掩码等信息填入网桥的ipv4信息后点应用,此时网络应该通了,准备工作也到此结束。

二、启动Hyper虚拟机、安装centos镜像、完成一些初始配置以及打通外网。

centos服务器中如何安装宝塔 centos搭建宝塔_centos服务器中如何安装宝塔_04


1.启动、安装

安装是中文的,按照提示操作就行了,就不过多说了。安装好后启动到这个界面那之前的操作都正确了。

接下来输入你安装时候键入的密码。账号默认是“root” (输入密码的时候光标不会动,对于第一次接触linux的我来说卡在这几分钟很白痴。、、)

登录成功后会显示你最后登录的时间。

2.初始配置

首先输入

hostnamectl

查看hostname ,应该是local… 先从改名字开始吧。

hostnamectl set-hostname  "你想取的名字"  --static

centos服务器中如何安装宝塔 centos搭建宝塔_ci_05


完事后再输入hostnamectl ,回车。然后看到的信息应该就是你改的名字了;

接下来设置静态IP,编辑 ifcfg-eth0 文件

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

进入后按Insert开始编辑
修改如下内容

BOOTPROTO="static" #dhcp改为static 
ONBOOT="yes" #开机启用本配置
IPADDR=192.168.7.106 #静态IP
GATEWAY=192.168.7.1 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.7.1 #DNS 配置

修改完成后按照Esc退出,然后输入 :qw 保存并退出;

接下来输入 service network restart 重启网络服务;

然后直接输入 ping -c 3 www.baidu.com

尝试连接外网看是否成功;

centos服务器中如何安装宝塔 centos搭建宝塔_git_06


出现上图代表成功了。

如果失败就先检查下是否和物理机桥接成功,直接用物理机cmd来连接你虚拟机的IP,默认开通22端口 输入

telnet 192.168.41.221 22

centos服务器中如何安装宝塔 centos搭建宝塔_ci_07


出现以下界面代表连接成功。否则可能是防火墙的设置。

最后可以去装一个Xshell终端模拟软件,方便复制命令。

至此初始配置就完成了

三、安装宝塔Linux版

宝塔官网 直接输入命令

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

别人已经集成好了,装完就可以用了。安装完成后直接看命令行上面的信息,物理机访问对应地址后输入他给的账号密码就可以访问进去了。

四、安装配置gitLab并汉化

在CentOS 7(和RedHat / Oracle / Scientific Linux 7)上,以下命令还将在系统防火墙中打开HTTP和SSH访问。

sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service = http
sudo systemctl reload firewalld

添加GitLab软件包存储库。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

接下来,安装GitLab软件包。将http:// gitlab.example.com更改为您想要访问您的GitLab实例的URL。安装将自动在该URL处配置并启动GitLab。安装后HTTPS需要额外的配置。(例如本地未被使用的ip:192.168.22.33)

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee

第一次访问时,您将被重定向到密码重置屏幕。为初始管理员帐户提供密码,您将被重定向回登录屏幕。使用默认帐户的用户名root登录。(默认是你指定地址的80端口)

#安装完成出现一个很帅气的图案

centos服务器中如何安装宝塔 centos搭建宝塔_学习_08


#查看gitlab的版本

[root@localhost ~]# head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 10.4.4

gitlab的配置和命令

#先修改个域名,改成自己的域名解析的地址,没有先不改也可以,我开始没改也没错。
#有说改成自己本机ip的,然后出错的话在external_url和ip直接加等号(没试,用的域名)
vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.8'
#更新配置(这一步相当的耗时☹)
gitlab-ctl reconfigure
#查看状态
gitlab-ctl status
#重启 
gitlab-ctl restart
ok: run: gitaly: (pid 24115) 0s
ok: run: gitlab-monitor: (pid 24131) 1s
ok: run: gitlab-workhorse: (pid 24147) 0s
ok: run: logrotate: (pid 24165) 1s
ok: run: nginx: (pid 24171) 0s
ok: run: node-exporter: (pid 24180) 1s
ok: run: postgres-exporter: (pid 24192) 0s
ok: run: postgresql: (pid 24211) 0s
ok: run: prometheus: (pid 24227) 1s
ok: run: redis: (pid 24279) 0s
ok: run: redis-exporter: (pid 24283) 1s
ok: run: sidekiq: (pid 24298) 0s
ok: run: unicorn: (pid 24303) 1s
#关闭
gitlab-ctl stop
#启动
gitlab-ctl start
#监控
gitlab-ctl tail unicorn 监控unicorn日志
gitlab-ctl tail

汉化
停止gitlab服务

gitlab-ctl stop

git安装

yum install -y git

汉化包下载最新

git clone https://gitlab.com/xhang/gitlab.git                       最新版本下载

切换到gitlab汉化包所在的目录(可以用命令ls查看具体目录)

cd /root/gitlab

查看汉化包的版本

查看改汉化补丁版本

cat gitlab/VERSION
10.7.3

比较汉化标签和原标签,导出 patch 用的 diff 文件到/root下

git diff origin/10-7-stable origin/10-7-stable-zh > /tmp/10.7.diff

回到/root目录

cd /

将10.0.2-zh.diff作为补丁更新到gitlab中

yum install patch -y
cd /tmp/
patch -d/opt/gitlab/embedded/service/gitlab-rails -p1 < 10.7.diff   #不停回车

启动gitlab

gitlab-ctl start

重新配置gitlab

gitlab-ctl reconfigure

最后打开地址登录进去,找到设置选项的偏好设置一栏,将语言改为中文就OK了。

五、安装配置gitLab-Runner

gitlab-runner
gitlab-runner即项目自动化的运行者(驱动),它可以执行一个 .gitlab-ci.yml(YAML文件)的文件,当push代码后,会执行写好的脚本,由脚本再执行进一步的操作,从而实现自动化。
配置流程
下载git并配置ssh key公钥
使用yum下载git:

yum -y install git

配置ssh key公钥

配置ssh公钥是为了在服务器自动获取gitlab上的代码时,可以免输入密码,用https的方式clone的话要手动输入账号密码,这样实现不了想要的自动化效果。

查看有无.ssh文件:

ls -al ~/.ssh

执行以下命令:

cd ~/.ssh/    (如果没有对应的文件夹,则执行  mkdir  ./.ssh)
  git config --global user.name "san.zhang"
  git config --global user.email "san.zhang@demo.com"
  ssh-keygen -t rsa -C "san.zhang@demo.com"

三次回车之后,会在 root/.ssh 目录下生成 id_rsa 、 id_rsa.pub 两个文件

用 cat id_rsa.pub 指令查看该文件 并复制出文件中的ssh公钥,粘贴到gitlab的SSH Keys 中,添加此公钥,即可完成配置。

添加完成之后,我们直接在linux服务器上直接使用git clone [SSH url] 指令,来测试刚刚配置的ssh公钥是否有效。

安装node.js(当前最新8.12.0)和yarn
首先下载node.js我们要借助wget,它是Linux系统下载文件的工具,具有非常强的稳定性

yum -y install wget

使用wget安装node.js

// 下载
wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.gz
 
// 解压
tar -zxvf node-v8.12.0-linux-x64.tar.gz
 
// 全局配置:(设置软链接)
 
// 注意:这里的 /home/node/ 是node解压出来的文件所在的路径。
 
ln -s /home/node/node-v8.12.0-linux-x64/bin/npm /usr/local/bin/npm
 
ln -s /home/node/node-v8.12.0-linux-x64/bin/node /usr/local/bin/node

(若建立了软连接后发现npm和node指令都无法使用,可尝试先用sudo chmod -R 777修改node文件夹权限)

安装yarn ,其目的是 能快速稳定地安装项目依赖——node_modules

// 通过 RPM 包仓库安装 Yarn
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn
// yarn -v 查看yarn版本

若通过 sudo yum install yarn 安装yarn报以下错:

Error : Package: yarn-1-1noarch(yarn)

可以执行以下步骤来解决:

sudo yum install epel-release
sudo yum install nodejs
sudo yum install yarn

安装Gitlab Runner
– 移除旧版本仓库:

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

– 添加 GitLab’s 官方仓库:

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

– 下载最新版 GitLab Runner:

sudo yum install gitlab-runner

注册gitlab-runner
安装好了gitlab-runner,还要进行注册,执行以下操作:

// 注册 gitlab-runner
sudo gitlab-runner register
 
// 注册 gitlab-ci-multi-runner
sudo gitlab-ci-multi-runner register

之后会为注册输入一系列信息:

Enter your GitLab instance URL:(填写GitLab的url)
Please enter the gitlab-ci coordinator URL (e.g. http://gitlab.com )

// 注:URL和token可在gitlab项目的Setting->CI/CD->Runners Setting->Expand中查看
http://gitlab.example.com/

Enter the token you obtained to register the Runner:(填写GitLab的token信息)
Please enter the gitlab-ci token for this runner

WgdB8849hjQwFAxxxxxx

Enter a description for the Runner, you can change this later in GitLab’s UI:(runner的描述)
Please enter the gitlab-ci description for this runner

my-runner

Enter the tags associated with the Runner, you can change this later in GitLab’s UI:(runner的标签,用逗号分开)
Please enter the gitlab-ci tags for this runner (comma separated):

// 多个tag使用英文逗号隔开
runner-tag,runner-tag2,runner-tagx

Enter the Runner executor: (runner的执行者)
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:

shell

(gitlab-runner的文件夹会在 ~/.local/bin 目录下)

注册完成后,将gitlab-runner文件夹的用户所属修改为gitlab-runner,这样gitlab-runner对其才会有执行权限。

sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner

修改文件读写权限:

sudo chmod -R 777 /home/gitlab-runner

权限不够会导致runner在执行的时候报错 permission denied,即不能对文件进行读写、编辑的操作

注意:gitlab上clone下来的文件在linux环境中可能也会没有读写权限,进而也会报错 permission denied ,此时就要先把clone下来的项目执行 sudo chmod -R 777 /home/project_name ,使项目中的文件都可读写;再进行一个无关的修改,提交到远端分支,这样以后clone或者fetch下来的项目都是可读写的了。

注册好之后如果在gitlab-ci的界面上看到runner的旁边不是绿点,而是黑色三角的感叹号,可以使用 gitlab-runner start 或者 gitlab-runner run 的指令来开启runner的service

centos服务器中如何安装宝塔 centos搭建宝塔_v8_09

点击修改勾选

运行未标记的作业

编写要执行的shell脚本

  1. 从gitlab上git clone/fetch 项目资源;
    2.进入项目中,执行 yarn / npm install ,安装项目依赖
    3.执行npm run build 打包项目
    4.将打包好的dist文件放到服务器指定发布目录下

如果在发布后想要执行回滚的操作,可以在第4个步骤执行完成后将文件名按git的commit id 来重命名,并且每次都把这个文件再拷贝到一个单独的目录下存放;再建立软链接将项目链接到服务器的发布目录下。这样一来,每次提交的文件都会保存在一个地方,发布的版本就取决于软链接所指向的文件,要更改发布版本的话,只要手动修改一下软链接指向的重命名后的dist文件就可以了(或者利用git的机制每次重新跑一次作业,也就是重新拉对应代码编译打包)
5.将之前clone下来的文件删除,避免文件越来越多占据过多内存,同时也方便下次clone

注意:脚本自动执行时,其用户是 gitlab-runner, 会遇到无权操作的问题,这时要把gitlab-runner加入root用户,并使gitlab-runner可以免密使用sudo命令,并在脚本的命令前加上sudo

提交 .gitlab-ci.yml 文件

在gitlab的CI/CD->Pipelines->点击Get start with Pipelines,可看到配置文档。文档告诉我们,在push到gitlab的项目的根目录中添加 .gitlab-ci.yml 文件,就可以开启pipelines。在pipelines中就可以看到我们gitlab监听到事件后执行.gitlab-ci.yml文件的过程,以及执行状态等。

我们参考 #官方文档 的格式,在 .gitlab-ci.yml 文件写入要执行的步骤。
其中在写job要执行的scripts时,就可以执行我们刚刚写好的shell脚本。我们在项目的与.gitlab-ci.yml文件的同级目录下创建一个 /ci 目录,用来存放要执行的.sh文件,这样就可以通过相对路径引入脚本 ,如:

stages:
  - deploy
 
deploy_develop:
  stage: deploy
  script:
    - ci/deploy_develop.sh
  only:
    - develop
 
deploy_stage:
  stage: deploy
  script:
    - ci/deploy_stage.sh
  only:
    - master

保存后push到远程分支。

此时我们再进入 CI/CD->Pipelines 中,可以看到gitlab的界面已经发生了变化:
如果执行顺利的话,status列就会显示 passed 。
点进去检查一下脚本是否也按预期的执行了,如果是的话,通过gitlab-ci实现的前端自动化部署/发布就大功告成了!

附上完整版配置shell脚本

stages:
  - build
  # - cleanup_build
  - deploy
  # - cleanup
cache:
  key: ${CI_COMMIT_REF_NAME}
  paths:
  - node_modules/
  - dist2/
  - distWap/

# before_script:
  #备份目录,每套皮一个文件夹,最多备份5个版本
  # - proTag="vueDemo"
  #创建同步到生产目录,和生产目录同样的名字
  # - devFileName="dist"
  # - if [[ "$CI_COMMIT_MESSAGE" =~ "test" ]]; then
  #   echo '11111111111111';
  #   proTag="vueDemo";
  #   devFileName="dist";
  #   elif [[ "$CI_COMMIT_MESSAGE" =~ "bee-pc" ]]; then
  #   echo "2222222";
  #   proTag="bee-pc";
  #   devFileName="beepc-cgtest06";
  #   else
  #   echo "配置错误";
  #   return;
  #   fi;

build:
  stage: build
  script:
    - node -v
    - npm -v
    - npm install
    - echo "build完成!"
   

# cleanup_build:
#   stage: cleanup_build
#   script:
#     - echo "失败了,清理文件!"
#   when: on_failure
 
deploy:
  stage: deploy
  script:
    - echo "发布中!(手动执行)"
     # 拷贝打包好的文件到备份目录  $proTag对应皮的名字
    # - rm -rf /data/www/helloRsync/$proTag/$CI_COMMIT_MESSAGE
    # - mkdir -p /data/www/helloRsync/$proTag/$CI_COMMIT_MESSAGE
    # - cp -r dist/* /data/www/helloRsync/$proTag/$CI_COMMIT_MESSAGE
    # - echo "backup完成!"

    # - rm -rf /data/www/helloRsync/dep/$devFileName
    # - mkdir -p /data/www/helloRsync/dep/$devFileName
    # #进入到将要被拷贝的目录
    # - cd /data/www/helloRsync/$proTag/$CI_COMMIT_MESSAGE/
    # - echo *
    #拷贝备份目录到和生产同步的目录
    # - cp -r  *  /data/www/helloRsync/dep/$devFileName
    # - rsync -auv --password-file=/etc/rsyncd-test.passwd  /data/www/helloRsync/dep/$devFileName   rsyncuser@192.168.41.221::helloRsync 


    - if [[ "$CI_COMMIT_MESSAGE" =~ "bbt-pc" ]]; then
      echo 'bbt-pc';
      runOrder="build";
      localFileName="dist2/*"
      devFileName="bet365-pc-demo.dbet.bet/";
      elif [[ "$CI_COMMIT_MESSAGE" =~ "bbt-wap" ]]; then
      echo "bbt-wap";
      runOrder="build_wap";
      localFileName="distWap/*"
      devFileName="bet365-pc-demo.dbet.bet/m/";
      elif [[ "$CI_COMMIT_MESSAGE" =~ "bbt-app" ]]; then
      echo "bbt-wap";
      runOrder="build_app";
      localFileName="distWap/*"
      devFileName="bet365-app-demo.dbet.bet/";
      else
      echo "配置错误";
      return;
      fi;

    # - npm run build
    # - echo dist2/*
    # - cp -r  dist2/*  /www/wwwroot/bet365-app-demo.dbet.bet/
    - npm run $runOrder
    - echo $localFileName
    - cp -r  $localFileName  /www/wwwroot/$devFileName
    - echo "挖槽!!!OK了";
  allow_failure: false
  # only:
  #   # - master
  #   variables:
  #   - $CI_COMMIT_MESSAGE =~ /testPc/
  # # when: manual

# cleanup:
#   stage: cleanup
#   script:
#     - echo "全部执行成功,多余备份文件!"
#     - cd /data/www/helloRsync/$proTag
#     #保留5个,删除多余的最后时间的
#     - rm -rf `ls -t|awk 'NR>5'`

#   when: on_success

如果你的runner和代码托管在同一台服务器下直接用命令将打包好的文件复制到指定位置即可

- cp -r  $localFileName  /www/wwwroot/$devFileName

如果不在同一台服务器需要使用rsync来同步代码到指定服务器

- rsync -auv --password-file=/etc/rsyncd-test.passwd  /data/www/helloRsync/dep/$devFileName   rsyncuser@192.168.41.221::helloRsync