- 前端运维篇之gitlab-ci 自动构建部署
前言 目前大多数的前端的上线流程依然是:开发人员本地开发完成后执行npm run build。随后将编译完成的目录copy之对应的线上服务器。最后提交本地代码至git。那么问题来了,当有多个开发人员对同一版本进行开发的时候,会不会出现前一秒我刚刚将我开发好的代码部署到测试环境,下一秒B同学又发了一次覆盖了我的呢?答案是肯定的。另外整个过程本地执行等待时间稍长或多或少会影响开发效率。那么怎样有效的规避这些问题,是我今天要分享给大家的。 准备工作 如文章标题,我们利用的是gitlab 提供的CI/CD 功能实现前端构建部署自动化,所以我们需要将代码用gitlab进行管理,我相信现在大多数公司应该都是用的它来管理的。其次我们需要准备一台机器(物理机、虚拟机都可以)来安装我们需要的环境。 开工 安装gitlab runner gitlab官方有提供各个环境的安装文档 注册 打开gitlab 进入某个项目,左侧菜单 => 设置 => CI/CD 展开“RUNNDER",我们将会获得如下图所示的注册令牌 [图片] 终端执行[代码]$ gitlab-runner register [代码] 输入第二步获取到的url [图片] 输入注册令牌 [图片] 输入项目描述 [图片] 输入runner标签(我们用到的是docker) [图片] 输入Runner的executor(继续输入docker) [图片] 输入默认的docker镜像(根据自己的项目选择对应的docker镜像,也可以选择自己的本地docker镜像) [图片] 如果你使用本地docker镜像的话,建议修改runner的配置文件:[代码] vi ~/.gitlab-runner/config.toml 找到刚刚注册好的runner,在当前runner最后一行添加 pull_policy = "never" 意为只拉取本地镜像 [代码] 执行[代码] $ gitlab-runner install 启动runner服务: $ gitlab-runner start [代码] 至此,我们的runner服务就注册好了,接下来我们要将我们的项目做一点点修改 gitlab-ci.yml GitLab CI使用YAML文件(.gitlab-ci.yml)来管理项目配置。该文件存放于项目仓库的根目录,并且包含了你的项目如何被编译的描述语句。YAML文件使用一系列约束叙述定义了Job启动时所要做的事情。我们将下面的YAML文件放入你的项目根目录 [代码]image:nodetest cache: key: 'node_modules' paths: - node_modules/ - package-lock.json before_script: - git checkout "$CI_COMMIT_REF_NAME" - git reset --hard origin/"$CI_COMMIT_REF_NAME" - npm install stages: - build build-project: stage: build cache: key: 'node_modules' policy: pull paths: - node_modules/ - package-lock.json script: - npm run build tags: - docker only: refs: - /^master/ - /^qa/ - /^dev/ variables: - $CI_COMMIT_MESSAGE =~ /^build/ [代码] 上面的YAML文件大致意思为:一旦分支为master 、 qa 、 dev开头有提交信息为build开头的提交会触发build这个job 当然,这个YAML文件所触发的只是一个代码编译的事情,我们还需要将编译好的代码提取出来。大家需要根据自己的实际场景进行YAML文件的修改。 温馨提示与技巧 如果你编译之后的文件需要放到另外一个仓库,请使用自己的docker镜像,该镜像里面可以添加ssh key,编译完成之后将其对应项目clone下来然后执行git的相关操作。 使用自定义docker镜像,在docker中添加一个自己的npm插件,并在job中触发,比如编译部署完成之后给对应的开发人员发送邮件、企业微信群聊机器人通知等人性化操作 如有不足之处还往指出 外附一张我们的成品(现在我们的开发人员真的是爽歪歪) [图片] [图片]
2020-04-27 - 小程序埋点
数据统计作为⽬前⼀种常⽤的分析⽤户⾏为的⽅式,⼩程序端也是必不可少 的。⼩程序采取的曝光,点击数据埋点其实和h5原理是⼀样的。但是埋点作为⼀个和业务逻辑不相关的需求,我们如果在每⼀个点击事件,每⼀个⽣命周期加⼊各种埋点代码,则会⼲扰正常的业务逻辑,和使代码变的臃肿,提供下面方案来解决数据埋点 page = function(params) { let keys = params.keys() keys.forEach(v => { if (v === 'onLoad') { params[v] = function(options) { stat() //埋点代码 params[v].call(this, options) } } else if (v.includes('click')) { params[v] = funciton(event) { let data = event.dataset.config stat(data) // 点击埋点 param[v].call(this) } } }) } 这种思路不光适⽤于埋点,也可以⽤来作全局异常处理等场景 。
2020-06-09 - 小程序审核被拒的情况汇总
常在河边走,哪有不湿鞋,上线了几十个小程序,遇到审核被拒的情况数不胜数,所谓是久病成医说的就是我,😄 从今天开始立贴,具体举例审核被拒的几种情况,以及怎么破解 1、 为避免您的小程序被滥用,请你完善内容审核机制,如调用小程序内容安全API,或使用其他技术、人工审核手段,过滤色情、违法等有害信息,保障发布内容的安全。 解决方式: 增加安全接口校验,具体可以参考下面文档 https://developers.weixin.qq.com/community/develop/doc/00004843288058ed4039d223951401 https://developers.weixin.qq.com/community/develop/doc/000cc03084c67888c97992e4756809 2、 小程序内容不符合规则: 你好,你的小程序涉及金融相关,属个人主体小程序未开放类目,建议申请企业主体小程序。请根据上述原因对小程序进行修改,并重新提交代码审核。 [图片] 解决方式: 由于个人主体小程序不能涉及金融,如果确认没有涉及,通过反馈渠道进行沟通。 3、 1:小程序内容不符合规则: (1):你好,你的小程序实际展示为测试商品/内容,请上架正式运营商品/内容后再提交代码审核。 请根据上述原因对小程序进行修改,并重新提交代码审核。 [图片] 解决方案 一般这种情况是由于小程序不完善或者小程序内容不完善,如果小程序内容比较完备,就需要把小程序内容做的正式一些。 4、 1:小程序内容不符合规则: (1):你好,你的小程序提供内容为在线游戏,请注册一个新账号,同时选择游戏类目。 请根据上述原因对小程序进行修改,并重新提交代码审核。 若对上述原因无法理解,可前往反馈页面进行反馈。 [图片] 解决方案 由于是小程序不能提交交互性强的游戏产品,需重新注册小游戏,重新开发。 5、 [图片] 解决方案 个人主体小程序不能涉及视频服务,所以这个无解,如果想继续发布只能走企业主体 6、 1:小程序内容不符合规则: (1):小程序页面内容涉及信息发布平台功能,属于个人主体类型未开放类目,建议申请企业主体类型小程序。 请根据上述原因对小程序进行修改,并重新提交代码审核。 若对上述原因无法理解,可前往反馈页面进行反馈。 [图片] 解决方案: 由于个人主体小程序不能涉及UGC,所以涉及这个功能基本是要被阉割掉的。无解 具体可参考下面文档 https://mp.weixin.qq.com/s/UgMTOwPGr-8GxzrdL-guHQ 8、 1:小程序内容不符合规则: (1):小程序页面内容涉及信息发布平台功能,属于个人主体类型未开放类目,建议申请企业主体类型小程序。 2:小程序功能不符合规则: (1):你好,小程序帐号登录功能暂未符合登录规范要求,包含但不限于存在:尚未体验完整服务功能即要求用户授权个人信息登录,帐号登录环节未能给用户清晰提供可取消/拒绝的选择权利等,请整改后再重新提交审核。参考文档 请根据上述原因对小程序进行修改,并重新提交代码审核。 若对上述原因无法理解,可前往反馈页面进行反馈。 [图片] 解决方案 由于小程序用户授权审核规范在9月1号改变,具体请参考相关文档,主旨就是在用户体验完小程序之前不要授权 具体文档请参考 https://mp.weixin.qq.com/s/X3XSEKRYmSFv7kM5sxr09A 9. 小程序广告审核驳回原因,这个一般是由于广告被遮挡造成的,可以通过样式布局修改来完成。 [图片] 10. 您的小程序实际展示位测试商品/内容,请商家正式运营商品后再提交代码审核 [图片] 11. 1: 你好,你的小程序涉及提供用户自行生成内容(文字、图片、音/视频)的记录、分享,需补充:社交-笔记类目。或自查代码,确保包括前端展示、小程序代码等整体均移除上述内容,再提交代码审核。 12 [图片]
2020-03-30 - 这是什么鬼啊,审核人员不能认真点么?审核不通过,截图也不发一张。一头雾水。
你的小程序"海淘达人",提审时间2020-02-19 18:15:53,代码发布审核未通过,原因如下: 1:小程序内容不符合规则: (1):你好,个人主体小程序暂不支持使用社交-社区/论坛插件,请修改后再提交审核。 请根据上述原因对小程序进行修改,并重新提交代码审核。 若对上述原因无法理解,可前往反馈页面进行反馈。
2020-02-20 - 安卓手机微信7.0.13、7.0.14版本 jssdk调用wx.getlocation报无效签名
(微信公众号)安卓手机微信7.0.13、7.0.14版本 jssdk调用wx.getlocation报无效签名,wx.scanQRCode没有问题。 当前项目代码已经正常使用几年,最近才大规模用户反馈这两个安卓微信版本有问题
2020-05-13 - 如何自定义弹窗或loading窗,且不依赖于具体页面?
现在wx.showModal可以提供弹窗对话框,这很好,但是UI可以自定义么?如果不能,有什么好办法,可以实现调用上类似于wx.showModal 这个方法,考虑过用组件实现,但是组件需要在每个用到的页面上添加不说,还要每个页面单独控制,有一些公用的js方法,不依赖于具体页面就没发用或者很不方便用这类组件。 有没有什么好办法,既方便调用又可以自定义样式?
2019-12-26