实现思路
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 init
git 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个小时来学习这个流程, 难度应该是比拟大的, 倡议你动起手来, 遇到文件就多查查材料, 置信你也能够学有所获!
发表回复