前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)

实现思路

1.程序员在本地进行开发
2.程序员将修改后的代码提交到gitlab代码仓库
3.gitlab收到代码后通过webhook通知jenkins进行构建
4.jenkins构建好了以后将构建好以后的代码发布的到线上服务器

优势

gitlab、jenkins、生产服务器这三个服务都可以分布在不同的服务器, 所以大大提高了可配置性也降低了耦合。

环境准备

  • gitlab代码仓库(可以在线上, 也可以在本地)
  • jenkins服务(可以跟gitlab不在同一个服务器上, 但是这里没有必要, 我把gitlab和jenkins都部署在本地服务器)
  • 生产环境
gitlab和jenkins服务我都是通过docker-compose进行安装的, 这个具体我就不多说了, 下面我贴一下docker-compose.yml文件
# gitlab的docker-compose.yml文件
version: "3"
services:
  gitlab:
    image: twang2218/gitlab-ce-zh
    container_name: gitlab
    restart: always
    privileged: true
    hostname: '192.168.4.2'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://192.168.4.2:82"
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        gitlab_rails['gitlab_email_enabled'] = true
        gitlab_rails['gitlab_email_from'] = '[email protected]'
        gitlab_rails['gitlab_email_display_name'] = 'liaoo'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "smtp.aliyun.com"
        gitlab_rails['smtp_port'] = 465
        gitlab_rails['smtp_user_name'] = "[email protected]"
        gitlab_rails['smtp_password'] = "jhudkir123"
        gitlab_rails['smtp_domain'] = "aliyun.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
        gitlab_rails['smtp_tls'] = true
        nginx['listen_port'] = 82
    ports:
      - '82:82'
      - '2222:22'
    volumes:
      - '/mydata/gitlab/config:/etc/gitlab'
      - '/mydata/gitlab/logs:/var/log/gitlab'
      - '/mydata/gitlab/data:/var/opt/gitlab'
    logging:
      driver: "json-file"
      options:
        max-size: "20m"
        max-file: "10"
# jenkins的docker-compose.yml文件
version: '3.1'
services:
  jenkins:
    image: jenkins/jenkins
    restart: always
    container_name: jenkins
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8888:8080"
    user: root
    volumes:
      - ./data:/var/jenkins_home

两个服务跑起来, 不跟你多BB, 撸起袖子就是一行hello world

我们先在本地创建一个vue项目

vue create hello world
# 回车回车回车...
cd cdproject/
npm run serve
# 把项目跑起来, 然后我们就看到了这个

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第1张图片

然后我们再去gitlab上新建一个项目

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第2张图片
接下来我们去本地生产一套rsa格式的ssh-keygen

ssh-keygen -m PEM -t rsa -b 4096 -C "thatsfelix"

公钥放到你gitlab上的个人设置里面, 这样你就可以通过ssh去push你的代码到服务器了, 具体位置在这里:
前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第3张图片

接下来我们试着将本地代码提交到gitlab仓库

cd cdproject/
git init
git remote add origin ssh地址(如果不懂这个地址在哪里看下面的图)
git remote -v (查看仓库添加进去没有)
git add .
git commit -m "first push"
git push -u origin master

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第4张图片
这里我们可以看到我们的代码已经提交上来了

接下来我们去配置jenkins

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第5张图片
这里先暂停一下

由于我们的jenkins要从gitlab拉取代码, 所以我们先去凭据里面添加一个私钥, 就是我们一开始生成的那个

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第6张图片

由于我们代码构建完了以后要通过ssh进行发布, 所以我们这里装一个publish over ssh的插件

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第7张图片

由于我们要使用nodejs进行打包, 所以我们在装一个nodejs的插件

前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第8张图片
至此, 我们的自动构建的配置就完成啦, 然后我们去本地提交一波,

git add .
git commit -m "cd 3"
git push

然后就可以看到我们的代码开始自动构建啦
前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第9张图片
这里测试后我发现第二次构建会有问题, 产生的原因是因为执行cp命令时,如果问价或文件夹已存在, 会提示是否要覆盖, 这里我们使用

\cp -r /mydata/nginx/html/manage/dist/* /mydata/nginx/html/manage/
# 斜杠的意思就是直接覆盖并且不询问

然后我们去本地push一波, 访问线上地址:
前端CI/CD,从零开始,彻底弄懂前端自动化构建和部署(CD篇)_第10张图片


完美~! 历时17天, 终于, 跑通了CD/CD的流程, 如果你想通过2个小时来学习这个流程, 难度应该是比较大的, 建议你动起手来, 遇到文件就多查查资料, 相信你也可以学有所获!

你可能感兴趣的:(docker,jenkins,gitlab)