GitLab CI/CD 自动部署构建

2020/3/20 11:31:27

本文主要是介绍GitLab CI/CD 自动部署构建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、背景

每次改完需求之后,更新到测试服务器都需要手动打包,并上传到服务器,多次人工干预操作,目前就有这样一个现成的基于 GitLab CI 工具,让我们提交或者合并代码后,就自动帮我们执行一段任务(打包、压缩、上传服务器)。从而实现自动上线。这里记录一下简单的步骤,因为每个人安装会面对不同的问题,后期有值得总结的,再补充。

二、Git Runner 介绍

是什么

它是我们自动构建的主服务

Runner 是一个执行任务的进程。可以根据需要配置任意数量的 Runner。 Runner 可以放在不同的用户服务器,甚至 本地机器上。

怎么配

image.png

它实际就是 .gitlab-ci.yml ,写一下然后交给 Git Runner  去执行。

image.png

怎么安装 Runner

先安装 Docker

强调的是配置ali服务器 Docker 源

  • 购买ali服务器会默认给你分配一个 Docker 源,这样拽 Docker 镜像会比较快。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://[你的私有key].mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
复制代码

三、安装配置 Git Runner

1、拉取 gitlab-runner 镜像

docker 镜像加速器配置好,这块会快一些,没配置的可能会慢一点

Git Runner  它是辅助 Git  构建的一个服务

docker pull gitlab/gitlab-runner
复制代码

安装好之后可以 docker images  测试查看

image.png

2、创建容器并启动

docker run -d --name gitlab-runner --restart always \
   -v ~/gitlab-runner/config:/etc/gitlab-runner \
   -v /var/run/docker.sock:/var/run/docker.sock \
   gitlab/gitlab-runner:latest
复制代码

现在 gitlab-runner  就启动了,可以通过 docker ps  查看,

image.png

3、注册 gitlab-runner

这里容器ID是上一步执行的返回的 ID,只去前几位就行。不用复制完。

docker exec -it [容器ID] gitlab-runner register
复制代码

上面命令执行中会让你一次让你输入 gitlab URL、token、runner-server、tag、docker、docker:stable

2.1、填写 Gitlab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
复制代码
2.2、填写 token
Please enter the gitlab-ci token for this runner:
复制代码
2.3、runner 描述信息

这里起了 runner-server

Please enter the gitlab-ci description for this runner:
[ec66aa43edf6]: runner-server
复制代码
2.4、填写 tag 名字

一个 git 仓库可以对应多个 runnder, 执行 yml 文件可以指定某一个 runner , 所以需要起一个名字标识

Please enter the gitlab-ci tags for this runner (comma separated):
复制代码
2.5、执行器选择 docker
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, custom, docker, shell, ssh, docker+machine, kubernetes:
docker
复制代码
2.6、Docker img

这里输入 docker:stable

Please enter the default Docker image (e.g. ruby:2.6):
docker:stable
复制代码

这几个值怎么找,登陆你的 gitlab -> 设置 -> CI/CD -> Runner 展开

image.png

找到 gitlab URL、token

image.png
image.png
到这里 runner  配置成功 配置成功之后,将会在页面中看到 此项目已激活的运行器
image.png

四、yml 配置

我们需要创建一个 .gitlab-ci.yml  文件,一下有一个例子

例子

# 使用哪个镜像构建
image: node

# 阶段
stages:
  - install
  - build
  - zip
  - deploy

# 每一步骤都需要拉取新的镜像,cache 缓存做一个保留
cache:
    paths:
        - node_modules/
        - dist/
        - front-end-caiwu.tar

# 执行所有 script 之前都会执行的 script 钩子
before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y ) '
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY_DEV")
  # 因为在 node 镜像中执行,若是选择执行器 是 shell 此步会干掉宿主机的ssh
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'


install:
  stage: install
  tags:
   - tagcicd
  script:
    - npm install -g cnpm --registry=https://registry.npm.taobao.org
    - cnpm install

build:
  stage: build
  script:
    - npm run build

zip:
  stage: zip
  script:
   - tar -czvf front-end-caiwu.tar ./dist

deploy:
  stage: deploy
  script:
   - scp ./front-end-caiwu.tar root@XXXXXXXX:/data

复制代码

默认 tags

上面 yml 配置没有指名 tags, 可配置一个默认的

image.png
image.png

变量配置

  • 需要注意  $SSH_PRIVATE_KEY_DEV 是变量,需要在下图中配置 值是 value 需要配置一下

image.png

$SSH_PRIVATE_KEY_DEV value 生成

这一步很容易出现问题,网上版本也多,解决方案也不一样。一下可参考,但不保证按照步骤来就没问题。

1、首先,在任何一台服务器上称A,创建 RSA 无密码的密钥:

ssh-keygen -t rsa -P ''
cat /root/.ssh/id_rsa
复制代码

2、特别注意需要复制完整包含 --- 复制到上图中 value里面

-----BEGIN RSA PRIVATE KEY----- 
xxxxxxx 
-----END RSA PRIVATE KEY-----
复制代码

3、然后在 A 服务器,执行代码 ssh-copy-id root 你需要部署的服务器 B, 期间会让你输入一次密码,后期就不会在输入。

# RSA 密钥对应的公钥,上传到需要连接到的服务器
ssh-copy-id root@你的服务器地址
# 测试
ssh root@你的服务器地址  
复制代码

五、自动运行

当你push 代码的时候,会自动生成一条流水线

image.png

感受一下

image.png

第二阶段 打包 build

image.png

第三阶段 压缩称 zip

image.png

第四阶段 deploy 成功

  • 好长时间 4个job 14分钟

image.png

成功 生成 front-end-caiwu.tar  可以在yml 命令添加 解压缩放置到对应后端指定目录中。

image.png

彩蛋

image.png

完整 yml 分享

image: node

stages:
  - install
  - build
  - zip
  - deploy

cache:
    paths:
        - node_modules/
        - static/
        - front-end-caiwu.tar

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y ) '
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY_DEV")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config '

install:
  stage: install
  tags:
    - tagtym
  only:
    - master
  script:
    - npm install -g cnpm --registry=https://registry.npm.taobao.org
    - cnpm install

build:
  stage: build
  tags:
    - tagtym
  only:
    - master
  script:
    - npm run build

zip:
  stage: zip
  tags:
    - tagtym
  only:
    - master
  script:
   - tar -czvf front-end-caiwu.tar ./static

deploy:
  stage: deploy
  tags:
    - tagtym
  only:
    - master
  script:
   - scp ./front-end-caiwu.tar root@$DEPLOY_SERVER_DEV:/data/frontEnd
   - ssh root@$DEPLOY_SERVER_DEV "cd /data/www/lighttpd/caiwu/public && rm -rf ./static/* && tar zxvf /data/frontEnd/front-end-caiwu.tar -C /data/www/lighttpd/caiwu/public && \cp ./static/index.html ../resources/views/welcome.blade.php"

复制代码

  • npm run build 在 mac 本机打包没问题,node 环境打包就有问题,原因:import 文件名字大小有误
  • ssh 配置一直让输入密码,之前  $SSH_PRIVATE_KEY_DEV value 是从服务器上面 取的id_rsa,最后看底部博客随便找服务器,配置一个新的,然后就可以了。
  • autodevops 可以设置关闭

参考



这篇关于GitLab CI/CD 自动部署构建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程