公司的 GitLab 服务部署完了,但是领导出于性能方面的考虑,希望测试和生产环境不用 Docker 来部署,遂搭建了一套不基于Docker 的 GitLab CI/CD 负载均衡测试环境。
注册 GitLab-Runner 安装 GitLab-Runner 这里我没有按照官方教程来直接下载对应系统的包安装,而是使用了清华大学开源镜像站的方法 :
注册启用 GitLab-Runner 转到搭建好的GitLab的具体项目CICD项目设置页https://gitlab.xxx/user/project/settings/ci_cd 然后用GitLab提供的令牌和地址对GitLab进行注册:
1 2 3 4 gitlab-runner register gitlab.xxx xxxxx shell
测试机负载均衡和Daemon 负载均衡 负载均衡方面,国际惯例,还用 nginx 来做
直接用 yum 安装
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 user nginx;worker_processes auto;error_log /var/log/nginx/error .log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf ;events { worker_connections 1024 ; } http { log_format main '$remote_addr - $remote_user [$time_local ] "$request " ' '$status $body_bytes_sent "$http_referer " ' '"$http_user_agent " "$http_x_forwarded_for "' ; access_log /var/log/nginx/access.log main; sendfile on ; tcp_nopush on ; tcp_nodelay on ; keepalive_timeout 65 ; types_hash_max_size 2048 ; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf ; upstream myproject{ server Y.Y.Y.Y:4411 weight=7 ; server X.X.X.X:4411 weight=3 ; } server { listen 80 ; listen [::]:80 ; location / { proxy_pass http://myproject; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate "/etc/nginx/ssl/ssl_certificate.pem" ; ssl_certificate_key "/etc/nginx/ssl/ssl_certificate_key.key" ; ssl_session_cache shared:SSL:1m ; ssl_session_timeout 10m ; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on ; location / { proxy_pass http://myproject; } } }
Daemon Daemon 方面,用过的几个里,个人觉得使用舒适度从低到高是 Systemd < Supervisor < PM2,直接选PM2了,原理一样,可以很方便的更换其他。 在做了负载均衡的两台服务器上做以下相同配置:
安装 NodeJS
1 sudo yum install -y nodejs gcc-c++ make yarn
2. 切换 Registry
1 2 npm install -g nrm nrm use taobao
3. 安装 PM2
4. 配置 PM2 自启
5. 新建 dotnet 守护服务,保存 pm2 守护列表
1 2 pm2 start "dotnet test-ci.dll" --name testCI pm2 save
GitLab CI/CD 配置变量
在项目源码更目录增加 .gitlab-ci.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 stages: - build - deploy_dev build_job: stage: build only: - master script: - cd test-ci - dotnet restore - dotnet build before_script: - export COMMIT_TIME=$(git show -s --format=%ct $CI_COMMIT_SHA) - export COMMIT_TIME_STR=$(date -d @$COMMIT_TIME +%Y%m%d%k%M%S) deploy_master_job: stage: deploy_dev environment: name: development only: - master script: - cd test-ci - echo "version:$COMMIT_TIME_STR" - dotnet publish -c Release --output bin/publish - cd bin/publish - zip -r $COMMIT_TIME_STR.zip ./ - cp $COMMIT_TIME_STR.zip /opt/backup-cd/test-ci/ - lftp sftp://$DEV_URL_1 -e "user $DEV_USER $DEV_PASS; cd /root/test-ci; put $COMMIT_TIME_STR.zip; bye" - sshpass -p "$DEV_PASS" ssh -o StrictHostKeyChecking=no $DEV_USER@$DEV_URL_1 "cd /root/test-ci;unzip -o ./$COMMIT_TIME_STR.zip;rm -Rf ./$COMMIT_TIME_STR.zip;" - sshpass -p "$DEV_PASS" ssh -o StrictHostKeyChecking=no $DEV_USER@$DEV_URL_1 "pm2 restart testCI;pm2 status;" - lftp sftp://$DEV_URL_2 -e "user $DEV_USER $DEV_PASS; cd /root/test-ci; put $COMMIT_TIME_STR.zip; bye" - sshpass -p "$DEV_PASS" ssh -o StrictHostKeyChecking=no $DEV_USER@$DEV_URL_2 "cd /root/test-ci;ls;unzip -o ./$COMMIT_TIME_STR.zip;rm -Rf ./$COMMIT_TIME_STR.zip" - sshpass -p "$DEV_PASS" ssh -o StrictHostKeyChecking=no $DEV_USER@$DEV_URL_2 "pm2 restart testCI;pm2 status;" - rm -Rf ./$COMMIT_TIME_STR.zipx
一些坑 NodeJS 使用 yum 安装的官方提供的 NodeJS 最新版本为6.X,使用nrm会报错,属于低版本NodeJS本身对coffeescript的兼容问题,想要安装新版的NodeJS可以参考这篇文章 ,我用的方法是nodesource/distributions :