前提:
纯前端,不涉及后端框架(如 TP,laravel 等)。
单独一个域名,nginx 会解析目录。
服务器配置貌似是 4C8G 还是 8C16G 的。
要求:
不用 ftp 上传,不用 scp 传输
开发文件在 src 目录下,打包文件在 dist 目录下,可参考 vue。
我现在个人能想到的方法有:
用 githook 去实现 在服务器中新建一个空仓库,开发完成后,push 到服务器的仓库中,然后自动拉取,打包。
用 gitlab 的 webhook 实现 在 gitlab 的项目中新建一个 deploy 分支,开发完后打包文件,将打包好的文件 push 到 deploy 分支中,通过 webhook 去触发服务器中某个脚本,脚本 reset --hard 去拉取 deploy 的文件。
第一种方法可以实现。
第二种方法不知道可行不可行。
不知道大家有没有其他更好的方法?
1
AlwaysBehave 2018 年 3 月 13 日
用 CI 打包
|
2
paragon 2018 年 3 月 13 日
CI 走起 还造什么轮子啊~
|
3
XyCinus 2018 年 3 月 13 日 S3 静态托管 + CloudFront 分发 + AWS CM 申请 ssl 证书 + route 53 买域名配 dns
全球 cdn, https 都有了 部署就用 aws 命令行, 写个脚本 ,传 s3 就好了 或者 开个 EC2 跑个 GOCD/Jenkins, 做持续集成部署: 本地 push 到 github, GOCD/Jenkins 直接去 github 拉取代码, 跑测试 -》 跑脚本, 部署 S3 |
4
LeungJZ OP |
5
fatjiong 2018 年 3 月 13 日
持续集成( Continuous integration ) https://baike.baidu.com/item/持续集成 /6250744
|
6
tomczhen 2018 年 3 月 13 日 有 CI 楼主就不会问这个问题了。
git hook 还得建仓库,多麻烦,推荐参考 hexo 的方式,本地 build 完成后通过 ssh 或 api 的方法把 build 结果传输到 服务器目录或静态托管上。 觉得麻烦,写个 deploy shell 脚本做这个也行。 |
7
v2chou 2018 年 3 月 13 日
楼上的 有么有相关文章啊
|
8
chairuosen 2018 年 3 月 13 日
不让直接传还是不让 scp 传?不让 scp 就 rsync 嘛 |
9
LeungJZ OP @chairuosen
不让 scp 传。没有密码,没有密钥。 |
10
wei745359223 2018 年 3 月 13 日
Jenkins 自动构建
|
11
wangxiaoaer 2018 年 3 月 13 日 via Android
之前自己的网站是用放在 coding 上,通过 webhook 通知服务器,然后服务器调用一个脚本 git 下载源码,然后编译打包,拷贝。
|
12
LeungJZ OP @wangxiaoaer 就是还是在服务器中打包咯?
|
13
williamx 2018 年 3 月 13 日
你这不是部署的问题,你这是上传权限的问题。
|
14
charexcalibur 2018 年 3 月 13 日
一直都是手动部署,学习一下大佬们的姿势
|
15
CoderGeek 2018 年 3 月 13 日
。。。我能说我在服务器上写了个脚本 定时执行 git pull QAQ
|
16
jorneyr 2018 年 3 月 13 日
我们是利用 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; """ } } } } |
17
zhaoFinger 2018 年 3 月 13 日
rsync 同步文件
|
18
zenxds 2018 年 3 月 13 日 我司现在用第二种方法,亲测可行,只有特定的分支或者 tag 会触发部署,用 git archive 下载对应提交的代码,解压 build 目录的代码到 cdn 源站目录
|
19
otakustay 2018 年 3 月 13 日
各种都有,做过 jenkins 直接调起 server 上脚本的,做过 paas 平台提供部署的,做过 docker 部署的
|
20
zjsxwc 2018 年 3 月 13 日
写个 python 脚本,提供一个浏览器页面, 点击就无脑 git pull
|
22
hxtheone 2018 年 3 月 13 日
第二种方案感觉已经有 CI 的雏形了, 剩下的就是把这些活儿放到一个持续集成的环境(比如 Jenkins)里, 一套脚本 pipeline 全搞定, 美滋滋
|
23
hasbug 2018 年 3 月 13 日
关注学习
|
24
wbf5431005 2018 年 3 月 13 日
感觉我连半吊子前端都不算了,只会写 div+css
|
25
chooin 2018 年 3 月 13 日
https://github.com/Hema-FE/cdn-cli 直接发布到 cdn 呀
|
27
wengjin456123 2018 年 3 月 13 日
mark
|
29
nowcoder 2018 年 3 月 13 日
自己写了一个脚本,拉文件,合并压缩,改版本号,上传阿里云 oss 一键搞定。
|
32
huangzxx 2018 年 3 月 13 日
gitlab-ci
|
33
mrcotter2013 2018 年 3 月 13 日 前阵子开始使用 Travis CI 自动部署我的 Blog 和另一个网站。Blog 在 GitHub Pages 上,配置很简单,源码在 raw 分支,生成的静态文件在 master ;另一个网站最后使用 rsync 同步数据,需要先配置好 SSH key。现在很方便,只要 push 到 repo,Travis CI 就会自动开始 build 和 deploy。
|
34
codespots 2018 年 3 月 13 日
jenkins
|
35
MinonHeart 2018 年 3 月 13 日 via iPhone
知乎第一条
|
37
zthxxx 2018 年 3 月 13 日 大公司里怎样开发和部署前端代码 - 张云龙
https://www.zhihu.com/question/20790576/answer/32602154 |
40
beginor 2018 年 3 月 13 日 via Android
打包在 docker 里面
|
41
wangxiaoaer 2018 年 3 月 13 日 via Android
@LeungJZ 对,服务器打包防止运行环境导致的编问题。
|
43
lemonlwz 2018 年 3 月 13 日
推荐 gitlab ci
|
44
mars0prince 2018 年 3 月 13 日
后端用啥你就用啥啊,我不信你们后端部署不用 jenkins 之流的 CI 的
|
45
guomuzz 2018 年 3 月 13 日
2 你可以 node 起个服务 每次更新的话 手动触发 node node 调用服务器脚本执行 git pull
跟你的 2 原理一样只是触发方式不一样 |
46
OMGZui 2018 年 3 月 13 日
|
47
Leleoleon 2018 年 3 月 13 日
Jenkins
|
48
LeungJZ OP |
50
notedown 2018 年 3 月 13 日
首先是解决前端缓存的问题.后缀+版本号 接口返回
然后 cdn 加速 然后统一打包成一个文件. 能编写 200kb 左右的 vue 就很多页面了 +cdn 压缩基本很少了. 4g 无压力 |
51
etc 2018 年 3 月 13 日
Jenkins 每 10 分钟监控一次 svn 路径,有文件更新就触发服务器上的脚本拉代码。
|
52
youyoumarco 2018 年 3 月 13 日
jenkins 调用服务器脚本 实现
|
53
AntonChen 2018 年 3 月 13 日 via Android
git tag 拉到临时目录,rsync 排除配置文件和 .git
|
54
ytmsdy 2018 年 3 月 13 日
fabric
|
55
bhaltair 2018 年 3 月 13 日
前端打好 tag 运维拉代码 部署到 nginx 服务器上
|
56
bhaltair 2018 年 3 月 13 日
自己的项目 写个 deploy shell 脚本 rsync 直接把 dits/推到服务器上
|
57
youxiachai 2018 年 3 月 13 日
|
58
youEclipse 2018 年 3 月 13 日 jenkins/gitlab CI + Docker;
Docker 内部有一个 nginx,一个前端项目一个 container。 |
59
guyskk0x0 2018 年 3 月 13 日 Drone CI 了解一下: https://github.com/ncuhome/getdrone
|
60
LeungJZ OP |
62
gxm44 2018 年 3 月 13 日
jenkins + aws s3
|
63
polun 2018 年 3 月 13 日
都用 Gitlab 了, 就用 GitLab CI/CD。
|
64
HowToMakeLove 2018 年 3 月 13 日
最简单的方式
在服务器目录创建一个可 web 方式访问的程序,里面创建子进程 执行 git pull 命令。 每次要上线,就先上传指定分支,然后访问一下写的有钩子的网页 |
65
graysheeep 2018 年 3 月 13 日
@youEclipse 哥们能说下具体方案么 很好奇
|
66
yuanfnadi 2018 年 3 月 13 日 via iPhone
Dockerfile 构建之后把结果放到一个 nginx 镜像里。
然后外部 nginx 指向这个镜像 |
67
Bijiabo 2018 年 3 月 13 日
scottyjs 部署亚马逊 S3
|
68
loveCoding 2018 年 3 月 13 日
交给专业的持续集成工具来做
|
70
LeungJZ OP |
71
tairan2006 2018 年 3 月 13 日
用 CI,或者写部署脚本
|
72
yuanfnadi 2018 年 3 月 13 日
@LeungJZ
@graysheeep 关键词 gitlab-ci. gitlab 的项目可以绑定 gitlab-runner。然后在项目中写一个.gitlab-ci.yml 设定构建发布的流程。 每当项目有变化时候,gitlab-runner 就会自动把代码拉取到镜像 /机器中执行你需要到操作。 例如我自己的博客。我每次提交 commit gitlab 就会把我博客到代码拉到一个构建镜像中执行构建。 构建完成后会把构建出来的结果复制到一个 nginx 的镜像。然后再会把镜像推送到阿里云仓库。 之后 gitlab runner 会执行部署操作。从阿里云拉取镜像。部署前端项目。 在外部还有一个 nginx 指向发布的新 nginx。 写的有点乱。 image: docker:ci stages: - build - deploy build: stage: build script: - build only: - master - tags when: on_success tags: - aliyun-hk-1 deploy: stage: deploy script: - deploy-docker-compose only: - master - tags when: on_success tags: - aliyun-hk-1 |
73
xiadd 2018 年 3 月 13 日 via Android
我比较 low 用的 fabric
|
75
tianakong 2018 年 3 月 14 日
java 版的 Jenkins
php 版的 walle |
76
horizon 2018 年 3 月 14 日
用 docker 拉取 gitlab 仓库代码,执行构建脚本。拿到构建产物上传 CDN。。
|
77
LeungJZ OP |
80
chen90902 2018 年 5 月 23 日
@youEclipse docker+ jenkins,思路不错。小公司也想弄一套出来
|