前端自动化 Jenkins/TravisCI/CiecleCi
前端自动化
介绍
git push origin master -f
强制覆盖先前提交
CI/CD工具介绍
Jenkins搭建
搭建要点
dockerhub
https://hub.docker.com/
课程架构
docker run --name jenkins_zero -itd -p 11005:8080 -p 50000:50000 jenkins/jenkins:lts
docker logs -f jenkins_zero
firewall-cmd --add-port=11005/tcp --permanent
永久放行端口号
firewall-cmd --reload
重新加载防火墙规则
本地打开jenkins
出现错误重新来几次即可
jekins全局地址 后面与gihub连接
离线安装插件方法(没有选择默认插件)
局域网安装插件
安装常用插件
备份镜像
tmp目录linux重启后数据会重置
备份容器方式2
备份完成
解压
备份容器方式3(最终方案)
搭建小结
Jenkins权限管理
全局安全配置
Role-Based Strategy
安全矩阵
一定要添加否则很麻烦
gilab(gitlab登录jenkins,用户记得密码更少)
部分用户无法登陆
退出jenkins登录
权限管理总结
Role-based Aurthorization Strategy
Jenkins与gitlab对接
创建gitlab项目(私有)
配置jenkins凭据
jenkins设置私钥
gilab设置公钥
配置
集成gitlab
jenkins
模拟
总结
DockerFile
方式一
前端项目配置Dockerfile
# build stage
FROM node:14 as build-stageLABEL maintainer=rollsroycewkk@qq.com# 创建一个工作目录
WORKDIR /app
COPY . .
RUN yarn install --registry=https://registry.npm.taobao.orgRUN npm run build# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
前端项目配置.dockerignore
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
.DS_Store
dist# node-waf configuration
.lock-wscript# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
.dockerignore
Dockerfile
*docker-compose*# Logs
logs
*.log# Runtime data
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
pids
*.pid
*.seed
.git
.hg
.svn
后端项目配置Dockerfile
FROM node:14LABEL maintainer=rollsroycewkk@qq.com# 创建一个工作目录
WORKDIR /app
COPY . .
RUN yarn install --registry=https://registry.npm.taobao.org# 这里产生了dist目录,及server.bundle.js
RUN npm run buildEXPOSE 12005# 上传配置一些静态图片资源
VOLUME ["/app/public"]# 运行node
CMD ["node","dist/server.bundle.js"]
后端项目配置.dockerignore
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
.DS_Store
dist# node-waf configuration
.lock-wscript# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
.dockerignore
Dockerfile
*docker-compose*# Logs
logs
*.log# Runtime data
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
pids
*.pid
*.seed
.git
.hg
.svn
端口号更改/与dockerfile暴露端口一直
前端项目生产地址配置
docker build -t web:1.0 .
打包前端镜像 -t就是 -tag .就是根目录下的dockerfile
Docker Desktop
镜像构建过程
docker images
docker run -itd --name web -p 11000:80 web:1.0
浏览器输入localhost:11000
Jenkins任务配置
前端项目配Deploy keys/Jenkins
gitlab项目配置webhooks
jenkins配置
模拟
后端项目配置jenkins
测试
注意(私钥)
gitlab是管理员配置shh 公钥 启用即可
Shell脚本
简单添加变量
#!/bin/bashCONTAINER=${container_name}
PORT=${port}echo $CONTAINER
echo $PORT
echo "hello imooc-front"
docker build --no-cache -t imagename:{image_name}:imagename:{tag}
docker run -itd --name $CONTAINER -p $PORT:80 imagename:{image_name}:imagename:{tag}
docker run --name jenkins_one -itd -p 11006:8080 -p 50001:50000 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts
jenkins挂载docker
chmod 777 /var/run/docker.sock
授权
docker inspect 容器名称
所有镜像运行状态
正在运行就停止
#!/bin/bashCONTAINER=${container_name}
PORT=${port}# echo $CONTAINER
# echo $PORT# 完成了镜像的构建
# docker build -t web:1.0 .
docker build --no-cache -t ${image_name}:${tag} .# 跑起来我们的服务 -itd 在后台执行
docker run -itd --name $CONTAINER -p $PORT:80 ${image_name}:${tag}# echo "hello imooc-front"RUNNING=${docker inspect --format="{{ .State.Running}}" $CONTAINER 2 > /dev/null}# 条件判断
if[ ! -n $RUNNING ]; thenecho "$CONTTINER does not exit"return 1
fi
最终判断
#!/bin/bashCONTAINER=${container_name}
PORT=${port}# echo $CONTAINER
# echo $PORT# 完成了镜像的构建
# docker build -t web:1.0 .
docker build --no-cache -t ${image_name}:${tag} .# echo "hello imooc-front"RUNNING=`docker inspect --format="{{ .State.Running}}" $CONTAINER `
echo $RUNNING# 条件判断
if [ ! -n $RUNNING ]; thenecho "$CONTAINER does not exit"return 1
fiif [ "$RUNNING" == "false" ]; thenecho "$CONTAINER is not running"return 2
elseecho "$RUNNING is running"# delete same name containermatchingStarted=$(docker ps --filter="name=$CONTAINER" -q | xargs)if [ -n $matchingStarted ]; thendocker stop $matchingStartedfimatching=$(docker ps -a --filter="name=$CONTAINER" -q | xargs )if [ -n $matching ]; thendocker rm $matchingfi
fiecho "RUNNING is ${RUNNING}"# 跑起来我们的服务 -itd 在后台执行
docker run -itd --name $CONTAINER -p $PORT:80 ${image_name}:${tag}
放行
Travis CI
github登录travis并且创建github仓库
创建vue项目关联仓库
根目录配置travis.yml文件
language: node_js
node_js:- "14.15.1"cache:yarn: trueinstall:- yarn intallscript:- npm run build
第一次提交代码
同步travis
手动构建一次
发布到github pages
deploy:provider: pagesskip_cleanup: truelocal_dir: dist/github_token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variablekeep_history: truename: "zeroWk"email: xxxxxxxx@163.comon:branch: master
根目录vue.config.js
module.exports = {publicPath: process.env.NODE_ENV === "production" ? "/travisci-demo" : "/"
}
github申请token
设置travis变量
提交代码
githubPages
总结
Ciecle CI
github登录
github创建仓库
要是公共项目才可以
本地拉取仓库
创建.circleci文件夹/config.yml
version: 2.1
jobs:build:docker:- image: circleci/node:14-browserssteps:- run: echo 'A first hello'- run: npm -v
上传代码
git add .
git commit -m “add”
git remote add origin https://github.com/xxxxx
git branch -M main
git push -u origin main
刷新circleci
set Up Project
vue create circle-demo1
创建一个项目,将demo1中的文件复制到demo中
设置远程拉取代码分支branchs
配置config.yml
version: 2.1
jobs:build:docker:- image: circleci/node:14-browsersonly:- mainsteps:- add_ssh_keys:fingerprintts:- "13:12:94:88:0c:94:ec:70:f0:5e:3a:15:71:e9:d4:a0"- checkout - run:name: Installcommand: yarn install- runname: Buildcommand: yarn build
提交代码
缩进
保存/复用缓存
script文件件/deploy.sh 脚本
sh脚本就相当于一个函数 return不同值
#!/bin/sh
# 构想 https://gist.github.com/motemen/8595451# 基于 https://github.com/eldarlabs/ghpages-deploy-script/blob/master/scripts/deploy-ghpages.sh
# MIT许可 https://github.com/eldarlabs/ghpages-deploy-script/blob/master/LICENSE# abort the script if there is a non-zero error
set -e // 相当与函数回调,如果没有xxx就退出# 打印当前的工作路径
pwd
remote=$(git config remote.origin.url) // 设置远程仓库地址echo 'remote is: '$remote# 新建一个发布的目录
mkdir gh-pages-branch
cd gh-pages-branch
# 创建的一个新的仓库
# 设置发布的用户名与邮箱
git config --global user.email "$GH_EMAIL" >/dev/null 2>&1
git config --global user.name "$GH_NAME" >/dev/null 2>&1
git init
git remote add --fetch origin "$remote"echo 'email is: '$GH_EMAIL
echo 'name is: '$GH_NAME
echo 'sitesource is: '$siteSource# 切换gh-pages分支
if git rev-parse --verify origin/gh-pages >/dev/null 2>&1; thengit checkout gh-pages# 删除掉旧的文件内容git rm -rf .
elsegit checkout --orphan gh-pages
fi# 把构建好的文件目录给拷贝进来
cp -a "../${siteSource}/." .ls -la# 把所有的文件添加到git
git add -A
# 添加一条提交内容
git commit --allow-empty -m "Deploy to GitHub pages [ci skip]"
# 推送文件
git push --force --quiet origin gh-pages
# 资源回收,删除临时分支与目录
cd ..
rm -rf gh-pages-branchecho "Finished Deployment!"
配置脚本
circleci配置环境变量
重新构建
课程完整版config.yml
version: 2
jobs:build:docker:- image: circleci/node:10branches:only:- mastersteps:- add_ssh_keys:fingerprints:- "94:e5:20:73:dd:b1:6a:51:e1:b5:fb:5f:24:82:0d:15"- checkout- restore_cache:keys:- dependencies_imooc- run:name: Installcommand: yarn install- save_cache:paths:- node_moduleskey: dependencies_imooc- run:name: Buildcommand: yarn build- run:name: Prepare shell commands# shell chmod +x 赋予执行权限# 执行shell脚本command: chmod +x scripts/deploy.sh- run:name: Run Deploy to Github pagescommand: ./scripts/deploy.sh
github pages
项目 —> setting -->
上面的ciecle-demo找不到因为webpack配置原因
总结
前端自动化 Jenkins/TravisCI/CiecleCi相关推荐
- 基于docker jenkins nginx gitee实现前端自动化部署
部署对比 手动部署 平时我们在上线一个新项目的时候,可能需要先执行打包指令,然后登录服务器,将dist包丢到服务器nginx/html的文件下,看似很简单,但是当项目频繁迭代,一直重复性的操作也是很浪 ...
- jenkins实现前端自动化打包并部署到nginx服务器
前言 本文为本人实际搭建前端自动化部署过程的详细记录,分享给大家的同时也是自己对知识的巩固,本文中可能存在部分前端平常不怎么接触到的知识点,但是不用怕,只要认真看基本不会有问题. 环境依赖 首先需要在 ...
- centos+jenkins+nginx+gitlab前端自动化部署全记录
0. 前言 我们在开发一个新的项目时,总是需要将前端部署到测试服务器上,给测试或者产品访问.简单的来说,如果想部署前端到服务器,服务器需要提供一个服务来访问前端.如果我们在开发中没有涉及Node.js ...
- python 自动化框架打包_听说很多人都不会打包,教你Python实现前端自动化打包部署!...
作为一名专职前端开发的我,为了帮助解决目前工作中的一些繁琐的工作(主要是处理 excel数据),解放程序员双手,前阵子就刚刚入了 python 的坑,毕竟也算是门工具语言,都已经加入少儿编程了,哈哈哈 ...
- vuecli打包后的dist目录无法访问_听说很多人都不会打包,教你Python实现前端自动化打包部署!...
作为一名专职前端开发的我,为了帮助解决目前工作中的一些繁琐的工作(主要是处理 excel数据),解放程序员双手,前阵子就刚刚入了 python 的坑,毕竟也算是门工具语言,都已经加入少儿编程了,哈哈哈 ...
- 前端自动化集成部署交付实践
前言 随着前后端分离应用模式的推广,前端项目可独立部署维护上线,不再仅仅将前端开发后打包的文件直接丢到一个文件目录下就完事大吉了,现在对前端来说也需要了解运维的相关知识,本文旨在介绍一些相关的运维概念 ...
- thinkphp整合系列之gulp实现前端自动化
这又是一个一次整合终身受益:不止是终身:换个项目同样可以很方便复用:不信你看另一个项目: thinkphp整合系列之gulp实现前端自动化 虽然我等叫php程序猿:但是不可避免的是要跟html打交道的 ...
- 前端自动化工具 grunt 插件 uglify 的简单使用(一)
Grunt 的简介: Grunt 是一套前端自动化工具,是一个基于 node.js 的命令行工具,它一般用于: 1.压缩文件: 2.合并文件: 3.简单的语法检测: 4.监听文件变动: 5.less ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
构建一个基本的前端自动化开发环境 -- 基于 Gulp 的前端集成解决方案(四) 参考文章: (1)构建一个基本的前端自动化开发环境 -- 基于 Gulp 的前端集成解决方案(四) (2)https: ...
最新文章
- 终极方案!解决正确设置LaunchImage后仍然不显示的问题
- MySQL Proxy实现数据库读写分离
- ubuntu系统初始化
- java mysql jsp分页_JSP+MYSQL+Java类优化分页的实例
- Thrift之Protocol源码分析
- html中如何把两行合并单元格,怎么把Excel单元格中多行文字合并为一行(2)
- Boost:bimap双图property地图的测试程序
- 【渝粤题库】广东开放大学 商务合同 形成性考核
- 玩转 SpringBoot 2 之整合 JWT 上篇
- Python编程输出所有的“水仙花数”
- 2019.03.07【APIO2018】【洛谷P4630】【BZOJ5463】铁人两项(圆方树)(树形DP)
- python 高德地图
- Go语言系列——Go语言介绍
- 计算机显示无法打开打印机添加,windows无法打开添加打印机怎么办 无法打开添加打印机解决方法...
- 腾讯cos文件管理系统 web直传和后端上传实现
- 职业学校计算机知识,中等职业学校计算机教学大纲.doc
- 【620】【信息管理学基础】【01信息与信息管理】
- NB-IoT技术实战开发----keil安装和使用
- python电源自动化测试仪器经销商_自动测试系统_电源自动测试系统_ATE自动测试设备_自动化测试系统...
- lua写入mysql_Lua MySQL操作
热门文章
- TI Zigbee Light Link 参考设计
- 如何画出FPN论文中的金字塔结构图
- NS3中“E: package ‘gnuplot‘ has no installation candidate”问题解决方案
- 沐风:小程序固然好!凭什么能自动赚钱?
- 滴水课后作业(6-10)
- EPROCESS+KPCR+ETHREAD部分介绍-学习记录
- 日有所思(5)——校正装置的理解和设计
- 用proteus来玩二极管或门电路
- [转载]java实现word转pdf
- Android 饼图