Skip to content

快速使用gitlab-cicd进行前端自动化部署 安装gitlab-runner的自动化脚本

Notifications You must be signed in to change notification settings

kenis1108/centos7-docker-gitlab-runner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gitlab-CI/CD (配置针对大B端前端)

前提: 部署的机器可通外网以及访问内部的gitlab

一、新建.gitlab-ci.yml

第一种: 在项目主分支(main/master)的根目录新建.gitlab-ci.yml并写入下面的内容并提交

Untitled

第二种: 在gitlab的流水线编辑器里写入下面的内容

Untitled

# 定义流水线所有的阶段(默认有三个阶段, build 、test 、deploy 三个阶段,即 构建 、测试 、部署)
stages:
  - build
  - sonar
  
# 作业执行前需要执行的命令
before_script:
  - echo "+++++++++++++++++++++ 开始构建 +++++++++++++++++++++++++++++++++"
  - source ~/.bashrc
  
# 定义一个作业(相当于函数的函数名)
build-job:
  # 定义作业所处流水线的阶段
  stage: build
  # 定义哪些分支运行,限制作业在什么上创建
  only:
    - main
  # 作业使用的Runner运行器的标签
  tags:
    - sit
  # 必须参数,运行器需要执行的脚本
  script:
    # 打印nvm,nodejs,yarn的版本号
    - nvm -v && node -v && yarn -v
    # 安装依赖
    - yarn
    - echo "=============================== 开始打包 ======================================== "
    # 执行package.json里的打包命令
    - yarn build
    # 打印项目根目录
    - ls
    - echo "=============================== 打包完成 ======================================== "
    # 压缩打好的包(需根据实际情况修改)
    - zip -r dist.zip dist
    # 将包上传到服务器(需根据实际情况到gitlab仓库设置页面---CI/CD---变量里面修改)
    - sshpass -p "$SERVER_PASSWD" scp dist.zip $SERVER_USERNAME@$SERVER_IP:/data/web/sxzq
    # 替换服务器上的包(需根据实际情况到gitlab仓库设置页面---CI/CD---变量里面修改)
    - sshpass -p "$SERVER_PASSWD" ssh $SERVER_USERNAME@$SERVER_IP "cd /data/web/sxzq;mv platform platform$(date +%y%m%d%H%M);unzip dist.zip && mv dist platform;"
    - echo “=============================== 发布完成 ======================================== ”
  # 归档文件列表,指定成功后应附加到job的文件和目录的列表(保留打好的包,可在job页面下载)
  artifacts:
    # 打包好的.zip文件名
    name: "dist"
    # 打包的目录(需根据实际情况修改)
    paths: 
      - dist/
  
sonar-job:
  stage: sonar
  only:
    - main
  tags:
    - sit
  script:
    - ls
    - java -version
    - yarn -v
    - yarn
    - yarn sonar

gitlab仓库设置里配置一下几个变量

Untitled

二、配置runner(远程容器)和nodejs(nvm)

在本地拉取代码git clone http://gitlab.chihttnacsci.com/test-gitlab-cicd/centos7-docker-gitlab-runner.git

Untitled

获取gitlab_url和token

Untitled

修改scripts/centos7_install_docker.sh里的变量

Untitled

#! /bin/bash -ex
  
# 注册runner的地址
gitlab_url="http://gitlab1.chinacscs.com/"
# 注册runner的token
token="GR1348941FRE_FVWBKkdG_H8rbmN2"
# 对这个runner的描述
description="XX项目"
# 想要安装nodejs的版本号
nodejs_version="16.13.0"
# 您的名字
your_name="kkb"
# 通过ssh连接linux服务器的用户名
server_username="appadmin"
# linux服务器ip
server_ip="172.18.0.3"
  
# 检查服务器是否已安装docker
docker version
if [ $? -eq 0 ]
then 
    echo "============================ 开始删除旧版本 =============================="
    yum -y remove $(yum list installed | grep docker | awk '{print $1}' | xargs)
    echo "============================ 删除旧版本完成 =============================="
else 
    echo "无旧版本"
fi
  
echo "============================ 开始设置yum下载docker的国内源 =============================="
# 检查服务器是否已安装yum-utils
yum-config-manager --version
if [ $? -eq 0 ]
then
    yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
else
    # yum-config-manager command not found
    yum -y install yum-utils
    yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
fi
  
echo "============================ 已设置国内源(aliyun) =============================="
  
echo "============================ 开始安装docker =============================="
yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
echo "============================ docker已安装 =============================="
  
echo "============================ 启动docker服务 =============================="
systemctl start docker
echo "============================ docker服务已启动 =============================="
  
echo "============================ 开始拉取gitlab/gitlab-runner镜像 =============================="
docker pull gitlab/gitlab-runner
echo "============================ 拉取镜像完成 =============================="
  
echo "============================ 运行容器 =============================="
docker run -itd --restart=always --name gitlab-runner \
-v /root/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner
echo "============================ 容器已运行 =============================="
  
echo "============================ 开始注册runner =============================="
docker exec gitlab-runner /bin/bash -c "gitlab-runner register --non-interactive --url ${gitlab_url} --registration-token ${token} --executor 'shell' --description ${description}"
echo "============================ 注册runner完成 =============================="
  
echo "============================ 给用户gitlab-runner安装jdk-17 =============================="
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "cd && wget https://mirrors.huaweicloud.com/openjdk/17/openjdk-17_linux-x64_bin.tar.gz"
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "cd && tar -zxvf openjdk-17_linux-x64_bin.tar.gz"
echo "============================ 给用户gitlab-runner安装jdk-17 =============================="
  
echo "============================ 给用户gitlab-runner安装nvm(nodejs) =============================="
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "git clone https://gitee.com/mirrors/nvm ~/.nvm"
docker cp ../assets/.bashrc gitlab-runner:/home/gitlab-runner/.bashrc
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "source ~/.bashrc && nvm install ${nodejs_version} && nvm use ${nodejs_version} && npm i -g yarn"
echo "============================ nvm(nodejs)安装完成 =============================="
  
echo "============================ gitlab-runner用户生成ssh密钥以便连接部署的服务器 =============================="
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "ssh-keygen -t rsa -C '${your_name}' -f '/home/gitlab-runner/.ssh/${your_name}_rsa'"
# docker exec -u gitlab-runner gitlab-runner /bin/bash -c "ssh-copy-id -i /home/gitlab-runner/.ssh/${your_name}_rsa.pub ${server_username}@${server_ip}"
docker exec -u gitlab-runner gitlab-runner /bin/bash -c "cat /home/gitlab-runner/.ssh/${your_name}_rsa.pub" > ../authorized_keys
scp ../authorized_keys ${server_username}@${server_ip}:/home/${server_username}/.ssh/
echo "============================ gitlab-runner用户配置免密登录部署服务器完成 =============================="

centos7-docker-gitlab-runner 文件夹的上一级将该目录上传到服务器上

# scp 要上传的目录 用户名@ip:目标地址
scp -r centos7-docker-gitlab-runner [email protected]:/home/appadmin

Untitled

输入密码后成功的截图

Untitled

登录服务器后切换到root用户

# ssh命令: ssh 用户名@ip
# 切换到root命令: sudo -i

Untitled

cd到centos7-docker-gitlab-runner/scripts执行安装脚本

cd /home/appadmin/centos7-docker-gitlab-runner/scripts && bash ./centos7_install_docker.sh

三、新增runner

(登录服务器进行下面的操作)

  1. 同一台服务器的同一个容器里新增runner的情况
# 变量替换成实际值
docker exec gitlab-runner /bin/bash -c "gitlab-runner register --non-interactive --url ${gitlab_url} --registration-token ${token} --executor 'shell' --description ${description}"
# 开发环境(nodejs和ssh)就不需要重新配置
  1. 同一台服务器不同容器的情况
# 新开一个容器--name需要换成跟已经存在的容器名不一样的
docker run -itd --restart=always --name gitlab-runner1 \
-v /root/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner
# 后续注册和配置环境
docker exec gitlab-runner1 /bin/bash -c "gitlab-runner register --non-interactive --url ${gitlab_url} --registration-token ${token} --executor 'shell' --description ${description}"
docker exec -u gitlab-runner gitlab-runner1 /bin/bash -c "git clone https://gitee.com/mirrors/nvm ~/.nvm"
docker cp ../assets/.bashrc gitlab-runner1:/home/gitlab-runner/.bashrc
docker exec -u gitlab-runner gitlab-runner1 /bin/bash -c "source ~/.bashrc && nvm install ${nodejs_version} && nvm use ${nodejs_version} && npm i -g yarn"
  1. 不同服务器重新跑脚本
  2. 根据公司提供的服务器性能,个人建议不要在同一台服务器配太多个runner,因为当同时有多个runner在执行作业时服务器内存不够会自动把后端java服务干掉

About

快速使用gitlab-cicd进行前端自动化部署 安装gitlab-runner的自动化脚本

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages