GitLab CI : 从零到一 自建仓库、自动构建发布

4,401 阅读1分钟

服务器要求最好是4G或以上的,系统镜像我用的是CentOs 7.6

GitLab

添加镜像

清华开源镜像站

新建文件 /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

gitlab-ce.repo

建立缓存&安装

yum makecache
yum install -y gitlab-ce

安装成功后修改external_url

external_url修改为当前服务器ip地址或域名,如果不修改仓库clone地址不正确

修改 /etc/gitlab/gitlab.rb

external_url

更新配置

gitlab-ctl reconfigure

配置成功&修改初始密码

gitlab自带nginx,默认80端口,配置成功后直接访问服务器ip

第一次登陆使用初始密码,位置在 /etc/gitlab/initial_root_password

初始密码

修改密码

修改密码

只是自建git仓库的话到此就结束了

GitLab-Runner

gitlab-runner配置自动构建发布

添加镜像

清华开源镜像站

新建文件 /etc/yum.repos.d/gitlab-runner.repo

[gitlab-runner]
name=gitlab-runner
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el$releasever-$basearch/
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

gitlab-runner.repo

建立缓存&安装

yum makecache
yum install -y gitlab-runner

注册runner

新建一个项目,在设置-ci中找到runner配置需要的url和token

runner

开始注册
gitlab-runner register

register

初始化一个vite项目,体验完整构建流程

npm init @vitejs/app
添加.gitlab-ci.yml文件
stages:
  - install
  - build
  - deploy

cache:
  paths:
    - node_modules
    - dist

install-job:
  stage: install
  only:
    - main
  script:
    - npm install
    - echo "install success"

build-job:
  stage: build
  only:
    - main
  script:
    - npm run build
    - echo "build success"

deploy-job:
  stage: deploy
  only:
    - main
  before_script:
  script:
    - cp -r ./dist/* /html/individual-project
  after_script:
    - echo "deploy success"

安装node

cd /usr/local/src
wget https://nodejs.org/dist/v12.21.0/node-v12.21.0-linux-x64.tar.xz
解压
tar -xvf node-v12.21.0-linux-x64.tar.xz
重命名
mv node-v12.21.0-linux-x64 node-v12.21.0
建立软链
ln -s /usr/local/src/node-v12.21.0/bin/node /usr/bin/node
node -v
ln -s /usr/local/src/node-v12.21.0/bin/npm /usr/bin/npm
npm -v

部署当前服务器

部署到当前服务器可以用gitlab默认安装的nginx

修改nginx配置

/var/opt/gitlab/nginx/conf/nginx.conf

  server {
    listen       8081;
    server_name  81.70.105.238;
        
    location / {
        root   /html/individual-project;
        index  index.html index.htm;
    }
        
    error_page   500 502 503 504  /50x.html;
        
    location = /50x.html {
        root   html;
    }
  }

重启nginx

gitlab-ctl restart nginx

提交代码&自动部署

部署成功

success

部署到其他服务器

安装sshpass

yum -y install sshpass

目标服务器安装nginx

安装
yum -y install nginx
启动
service nginx start
开机启动
systemctl enable nginx.service
查看状态
systemctl list-dependencies

nginx

修改nginx配置 /etc/nginx/nginx.conf

    server {
        listen       8080;
        server_name  112.124.19.9;
        root         /usr/share/nginx/html/group-runner-project;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

重启nginx

nginx -s reload

runner配置同上

添加几个变量

Variables

.gitlab-ci.yml

stages:
  - preInstall
  - install
  - build
  - deploy

variables:
  TARGETDIR: /usr/share/nginx/html/group-runner-project

cache:
  paths:
    - node_modules
    - dist

preInstall-job:
  stage: preInstall
  only:
    refs:
      - main
    changes:
      - package.json
  script:
    - npm install
    - echo "pre-install success"

install-job:
  stage: install
  only:
    - main
  script:
    - npm install
    - echo "install success"

build-job:
  stage: build
  only:
    - main
  script:
    - npm run build
    - echo "build success"

deploy-job:
  stage: deploy
  only:
    - main
  before_script:
  script:
    - sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no -r ./dist/* $USER@$HOST:$TARGETDIR
  after_script:
    - echo "deploy success"

Success

image.png image.png