实现思路
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'] = 'liaoxubao@aliyun.com' 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'] = "liaoxubao@aliyun.com" 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# 把我的项目跑起来, 而后咱们就看到了这个
而后咱们再去gitlab上新建一个我的项目
接下来咱们去本地生产一套rsa格局的ssh-keygen
ssh-keygen -m PEM -t rsa -b 4096 -C "thatsfelix"
公钥放到你gitlab上的集体设置外面, 这样你就能够通过ssh去push你的代码到服务器了, 具体位置在这里:
接下来咱们试着将本地代码提交到gitlab仓库
cd cdproject/git initgit remote add origin ssh地址(如果不懂这个地址在哪里看上面的图)git remote -v (查看仓库增加进去没有)git add .git commit -m "first push"git push -u origin master
操作胜利咱们去gitlab代码仓库看看
这里咱们能够看到咱们的代码曾经提交上来了
接下来咱们去配置jenkins
装置插件的时候因为我是小白, 所以我抉择举荐装置
新建一个我的项目
这里先暂停一下
因为咱们的jenkins要从gitlab拉取代码, 所以咱们先去凭据外面增加一个私钥, 就是咱们一开始生成的那个
另外咱们还须要这三个插件
因为咱们代码构建完了当前要通过ssh进行公布, 所以咱们这里装一个publish over ssh的插件
因为咱们要应用nodejs进行打包, 所以咱们在装一个nodejs的插件
以上装完了当前重启一下jenkins
nodejs这个不是真正的nodejs, 他只是一个相似于容器一样的插件, 所以咱们要装一下nodejs工具, 在这里:
好了, 咱们持续回到刚刚创立我的项目那里:
这里抉择咱们刚刚增加的全局凭据的那个私钥
这个构建的shell是在咱们的jenkins容器外面执行的
点这里, 而后你这边就什么都没有, 这时候你须要增加一下你近程服务器的配置
填完当前点测试(这个公钥记得放到你的线上服务器下面哦)
测试胜利当前咱们点保留
咱们点击立刻构建, 能够看到咱们的我的项目曾经开始构建了
然而要想实现push当前马上就主动构建, 咱们还须要最初一步操作:
咱们先复制一下构建配置外面的这个地址:
而后咱们来到gitlab的我的项目目录下, 而后点这里:
如果你看到了这个谬误提醒:
意思是说不容许对本地发动申请, 这时候咱们去放开一下权限即可, 在这里:
再次增加, 而后胜利了, 而后咱们点这里
开展有个push event, 咱们测试一下
报403谬误,
而后咱们进到jenkins的这里:
这个勾上, 保留
而后再来这里
这个勾去掉, 保留
再回到gitlab, test >>> push events, 而后咱们看到了http: 200的状态码
至此, 咱们的主动构建的配置就实现啦, 而后咱们去本地提交一波,
git add .git commit -m "cd 3"git push
而后就能够看到咱们的代码开始主动构建啦
接下来, 咱们开始书写构建脚本和部署脚本, 持续回到我的项目配置:
构建脚本, 如图:
这个很简略不必解释了哈
构建后操作:
这里测试后我发现第二次构建会有问题, 产生的起因是因为执行cp命令时,如果问价或文件夹已存在, 会提醒是否要笼罩, 这里咱们应用
\cp -r /mydata/nginx/html/manage/dist/* /mydata/nginx/html/manage/# 斜杠的意思就是间接笼罩并且不询问
而后咱们去本地push一波, 拜访线上地址:
而后去本地批改一下, 再去拜访线上地址:
完满~! 历时17天, 终于, 跑通了CD/CD的流程, 如果你想通过2个小时来学习这个流程, 难度应该是比拟大的, 倡议你动起手来, 遇到文件就多查查材料, 置信你也能够学有所获!