你们公司的前端代码如何部署的?

2018-03-13 09:52:22 +08:00
 LeungJZ

前提:

  1. 纯前端,不涉及后端框架(如 TP,laravel 等)。

  2. 单独一个域名,nginx 会解析目录。

  3. 服务器配置貌似是 4C8G 还是 8C16G 的。

要求:

  1. 不用 ftp 上传,不用 scp 传输

  2. 开发文件在 src 目录下,打包文件在 dist 目录下,可参考 vue。

我现在个人能想到的方法有:

  1. 用 githook 去实现 在服务器中新建一个空仓库,开发完成后,push 到服务器的仓库中,然后自动拉取,打包。

  2. 用 gitlab 的 webhook 实现 在 gitlab 的项目中新建一个 deploy 分支,开发完后打包文件,将打包好的文件 push 到 deploy 分支中,通过 webhook 去触发服务器中某个脚本,脚本 reset --hard 去拉取 deploy 的文件。

第一种方法可以实现。

第二种方法不知道可行不可行。

不知道大家有没有其他更好的方法?

10827 次点击
所在节点    程序员
80 条回复
AlwaysBehave
2018-03-13 09:57:56 +08:00
用 CI 打包
paragon
2018-03-13 09:58:13 +08:00
CI 走起 还造什么轮子啊~
XyCinus
2018-03-13 10:00:59 +08:00
S3 静态托管 + CloudFront 分发 + AWS CM 申请 ssl 证书 + route 53 买域名配 dns
全球 cdn, https 都有了
部署就用 aws 命令行, 写个脚本 ,传 s3 就好了
或者 开个 EC2 跑个 GOCD/Jenkins, 做持续集成部署:
本地 push 到 github, GOCD/Jenkins 直接去 github 拉取代码, 跑测试 -》 跑脚本, 部署 S3
LeungJZ
2018-03-13 10:02:43 +08:00
@AlwaysBehave
@paragon
一直搞不懂你们说的 CI 究竟是个啥。渣渣,勿喷。
fatjiong
2018-03-13 10:03:58 +08:00
持续集成( Continuous integration ) https://baike.baidu.com/item/持续集成 /6250744
tomczhen
2018-03-13 10:05:08 +08:00
有 CI 楼主就不会问这个问题了。

git hook 还得建仓库,多麻烦,推荐参考 hexo 的方式,本地 build 完成后通过 ssh 或 api 的方法把 build 结果传输到 服务器目录或静态托管上。

觉得麻烦,写个 deploy shell 脚本做这个也行。
v2chou
2018-03-13 10:17:40 +08:00
楼上的 有么有相关文章啊
chairuosen
2018-03-13 10:21:22 +08:00
不让直接传还是不让 scp 传?不让 scp 就 rsync 嘛
LeungJZ
2018-03-13 10:25:25 +08:00
@chairuosen
不让 scp 传。没有密码,没有密钥。
wei745359223
2018-03-13 10:27:38 +08:00
Jenkins 自动构建
wangxiaoaer
2018-03-13 10:29:53 +08:00
之前自己的网站是用放在 coding 上,通过 webhook 通知服务器,然后服务器调用一个脚本 git 下载源码,然后编译打包,拷贝。
LeungJZ
2018-03-13 10:37:27 +08:00
@wangxiaoaer 就是还是在服务器中打包咯?
williamx
2018-03-13 10:44:11 +08:00
你这不是部署的问题,你这是上传权限的问题。
charexcalibur
2018-03-13 10:46:23 +08:00
一直都是手动部署,学习一下大佬们的姿势
CoderGeek
2018-03-13 10:49:06 +08:00
。。。我能说我在服务器上写了个脚本 定时执行 git pull QAQ
jorneyr
2018-03-13 10:57:02 +08:00
我们是利用 Gradle 的 ssh 脚本部署项目的,虽然是 Java 的工具,但是目的只是为了远程运行个脚本,也可以用在前端部署,不妨参考一下,部署的时候就是执行一条命令就可以了:
task deploy(dependsOn: war) {
def targetDir = '/data/xtuer.com'
doLast {
ssh.run {
session(remotes.server) {
put from: "${buildDir}/libs/${war.archiveName}", into: "${targetDir}"
execute """
source /root/.bash_profile;
/usr/local/tomcat/bin/shutdown.sh;
rm -rf ${targetDir}/ROOT;
unzip -u ${targetDir}/${war.archiveName} -d ${targetDir}/ROOT > /dev/null;
rm -rf ${targetDir}/${war.archiveName};
kill `ps aux | grep -i tomcat | grep -v grep | awk '{print \$2}'`;
/usr/local/tomcat/bin/startup.sh;
"""
}
}
}
}
zhaoFinger
2018-03-13 11:01:29 +08:00
rsync 同步文件
zenxds
2018-03-13 11:19:55 +08:00
我司现在用第二种方法,亲测可行,只有特定的分支或者 tag 会触发部署,用 git archive 下载对应提交的代码,解压 build 目录的代码到 cdn 源站目录
otakustay
2018-03-13 11:24:07 +08:00
各种都有,做过 jenkins 直接调起 server 上脚本的,做过 paas 平台提供部署的,做过 docker 部署的
zjsxwc
2018-03-13 11:24:50 +08:00
写个 python 脚本,提供一个浏览器页面, 点击就无脑 git pull

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/437489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX