-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.json
1 lines (1 loc) · 142 KB
/
db.json
1
{"meta":{"version":1,"warehouse":"2.2.0"},"models":{"Asset":[{"_id":"source/images/gitlab-config-cicd.png","path":"images/gitlab-config-cicd.png","modified":1,"renderable":0},{"_id":"source/images/gitlab-config-sshkey.png","path":"images/gitlab-config-sshkey.png","modified":1,"renderable":0},{"_id":"source/images/gitlab-runner.png","path":"images/gitlab-runner.png","modified":1,"renderable":0},{"_id":"themes/next/source/css/main.styl","path":"css/main.styl","modified":1,"renderable":1},{"_id":"themes/next/source/images/algolia_logo.svg","path":"images/algolia_logo.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/apple-touch-icon-next.png","path":"images/apple-touch-icon-next.png","modified":1,"renderable":1},{"_id":"themes/next/source/images/avatar.gif","path":"images/avatar.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc-nd.svg","path":"images/cc-by-nc-nd.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc-sa.svg","path":"images/cc-by-nc-sa.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nc.svg","path":"images/cc-by-nc.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-nd.svg","path":"images/cc-by-nd.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by-sa.svg","path":"images/cc-by-sa.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-by.svg","path":"images/cc-by.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/cc-zero.svg","path":"images/cc-zero.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/favicon-16x16-next.png","path":"images/favicon-16x16-next.png","modified":1,"renderable":1},{"_id":"themes/next/source/images/favicon-32x32-next.png","path":"images/favicon-32x32-next.png","modified":1,"renderable":1},{"_id":"themes/next/source/images/loading.gif","path":"images/loading.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/logo.svg","path":"images/logo.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/placeholder.gif","path":"images/placeholder.gif","modified":1,"renderable":1},{"_id":"themes/next/source/images/quote-l.svg","path":"images/quote-l.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/quote-r.svg","path":"images/quote-r.svg","modified":1,"renderable":1},{"_id":"themes/next/source/images/searchicon.png","path":"images/searchicon.png","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/affix.js","path":"js/src/affix.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/algolia-search.js","path":"js/src/algolia-search.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/bootstrap.js","path":"js/src/bootstrap.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/exturl.js","path":"js/src/exturl.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/hook-duoshuo.js","path":"js/src/hook-duoshuo.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/js.cookie.js","path":"js/src/js.cookie.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/motion.js","path":"js/src/motion.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/post-details.js","path":"js/src/post-details.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/scroll-cookie.js","path":"js/src/scroll-cookie.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/scrollspy.js","path":"js/src/scrollspy.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/utils.js","path":"js/src/utils.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.css","path":"lib/algolia-instant-search/instantsearch.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/canvas-nest/canvas-nest.min.js","path":"lib/canvas-nest/canvas-nest.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/canvas-ribbon/canvas-ribbon.js","path":"lib/canvas-ribbon/canvas-ribbon.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/LICENSE","path":"lib/fastclick/LICENSE","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/README.md","path":"lib/fastclick/README.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/bower.json","path":"lib/fastclick/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/HELP-US-OUT.txt","path":"lib/font-awesome/HELP-US-OUT.txt","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/bower.json","path":"lib/font-awesome/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/CONTRIBUTING.md","path":"lib/jquery_lazyload/CONTRIBUTING.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/README.md","path":"lib/jquery_lazyload/README.md","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/bower.json","path":"lib/jquery_lazyload/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.lazyload.js","path":"lib/jquery_lazyload/jquery.lazyload.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.scrollstop.js","path":"lib/jquery_lazyload/jquery.scrollstop.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/needsharebutton/font-embedded.css","path":"lib/needsharebutton/font-embedded.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/needsharebutton/needsharebutton.css","path":"lib/needsharebutton/needsharebutton.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/needsharebutton/needsharebutton.js","path":"lib/needsharebutton/needsharebutton.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-barber-shop.min.css","path":"lib/pace/pace-theme-barber-shop.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-big-counter.min.css","path":"lib/pace/pace-theme-big-counter.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-bounce.min.css","path":"lib/pace/pace-theme-bounce.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-center-atom.min.css","path":"lib/pace/pace-theme-center-atom.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-center-circle.min.css","path":"lib/pace/pace-theme-center-circle.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-center-radar.min.css","path":"lib/pace/pace-theme-center-radar.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-center-simple.min.css","path":"lib/pace/pace-theme-center-simple.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-corner-indicator.min.css","path":"lib/pace/pace-theme-corner-indicator.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-fill-left.min.css","path":"lib/pace/pace-theme-fill-left.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-flash.min.css","path":"lib/pace/pace-theme-flash.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-loading-bar.min.css","path":"lib/pace/pace-theme-loading-bar.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-mac-osx.min.css","path":"lib/pace/pace-theme-mac-osx.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace-theme-minimal.min.css","path":"lib/pace/pace-theme-minimal.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/pace/pace.min.js","path":"lib/pace/pace.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/canvas_lines.min.js","path":"lib/three/canvas_lines.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/canvas_sphere.min.js","path":"lib/three/canvas_sphere.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/three-waves.min.js","path":"lib/three/three-waves.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/bower.json","path":"lib/velocity/bower.json","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.min.js","path":"lib/velocity/velocity.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.ui.js","path":"lib/velocity/velocity.ui.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.ui.min.js","path":"lib/velocity/velocity.ui.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/jquery/index.js","path":"lib/jquery/index.js","modified":1,"renderable":1},{"_id":"themes/next/source/js/src/schemes/pisces.js","path":"js/src/schemes/pisces.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/han.min.css","path":"lib/Han/dist/han.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/han.min.js","path":"lib/Han/dist/han.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/blank.gif","path":"lib/fancybox/source/blank.gif","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading.gif","path":"lib/fancybox/source/fancybox_loading.gif","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/[email protected]","path":"lib/fancybox/source/[email protected]","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_overlay.png","path":"lib/fancybox/source/fancybox_overlay.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite.png","path":"lib/fancybox/source/fancybox_sprite.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/[email protected]","path":"lib/fancybox/source/[email protected]","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.css","path":"lib/fancybox/source/jquery.fancybox.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.js","path":"lib/fancybox/source/jquery.fancybox.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js","path":"lib/fancybox/source/jquery.fancybox.pack.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.js","path":"lib/fastclick/lib/fastclick.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.min.js","path":"lib/fastclick/lib/fastclick.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css","path":"lib/font-awesome/css/font-awesome.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css.map","path":"lib/font-awesome/css/font-awesome.css.map","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.min.css","path":"lib/font-awesome/css/font-awesome.min.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js","path":"lib/ua-parser-js/dist/ua-parser.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js","path":"lib/ua-parser-js/dist/ua-parser.pack.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/han.js","path":"lib/Han/dist/han.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/han.css","path":"lib/Han/dist/han.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff","path":"lib/font-awesome/fonts/fontawesome-webfont.woff","modified":1,"renderable":1},{"_id":"themes/next/source/lib/velocity/velocity.js","path":"lib/velocity/velocity.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/font/han-space.otf","path":"lib/Han/dist/font/han-space.otf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/font/han-space.woff","path":"lib/Han/dist/font/han-space.woff","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/font/han.otf","path":"lib/Han/dist/font/han.otf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/font/han.woff","path":"lib/Han/dist/font/han.woff","modified":1,"renderable":1},{"_id":"themes/next/source/lib/Han/dist/font/han.woff2","path":"lib/Han/dist/font/han.woff2","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","path":"lib/fancybox/source/helpers/jquery.fancybox-buttons.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/fancybox_buttons.png","path":"lib/fancybox/source/helpers/fancybox_buttons.png","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","path":"lib/fancybox/source/helpers/jquery.fancybox-buttons.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-media.js","path":"lib/fancybox/source/helpers/jquery.fancybox-media.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","path":"lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","modified":1,"renderable":1},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","path":"lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.ttf","path":"lib/font-awesome/fonts/fontawesome-webfont.ttf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2","path":"lib/font-awesome/fonts/fontawesome-webfont.woff2","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/FontAwesome.otf","path":"lib/font-awesome/fonts/FontAwesome.otf","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot","path":"lib/font-awesome/fonts/fontawesome-webfont.eot","modified":1,"renderable":1},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.js","path":"lib/algolia-instant-search/instantsearch.min.js","modified":1,"renderable":1},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.svg","path":"lib/font-awesome/fonts/fontawesome-webfont.svg","modified":1,"renderable":1},{"_id":"themes/next/source/lib/three/three.min.js","path":"lib/three/three.min.js","modified":1,"renderable":1}],"Cache":[{"_id":"themes/next/.bowerrc","hash":"334da94ca6f024d60d012cc26ea655681e724ad8","modified":1625214938523},{"_id":"themes/next/.editorconfig","hash":"211d2c92bfdddb3e81ea946f4ca7a539f150f4da","modified":1625214938524},{"_id":"themes/next/.gitattributes","hash":"8454b9313cb1a97b63fb87e2d29daee497ce6249","modified":1625214938524},{"_id":"themes/next/.gitignore","hash":"b935cc0e5b099ebd343ca1766e02f65138c13dd0","modified":1625214938530},{"_id":"themes/next/.hound.yml","hash":"289dcf5bfe92dbd680d54d6e0668f41c9c9c0c78","modified":1625214938530},{"_id":"themes/next/.javascript_ignore","hash":"cd250ad74ca22bd2c054476456a73d9687f05f87","modified":1625214938531},{"_id":"themes/next/.jshintrc","hash":"b7d23f2ce8d99fa073f22f9960605f318acd7710","modified":1625214938531},{"_id":"themes/next/.stylintrc","hash":"3b7f9785e9ad0dab764e1c535b40df02f4ff5fd6","modified":1625214938532},{"_id":"themes/next/.travis.yml","hash":"6674fbdfe0d0c03b8a04527ffb8ab66a94253acd","modified":1625214938533},{"_id":"themes/next/LICENSE","hash":"ec44503d7e617144909e54533754f0147845f0c5","modified":1625214938533},{"_id":"themes/next/README.cn.md","hash":"59e323ce21535d561507c9ecc984b7c4dcb61514","modified":1625214938534},{"_id":"themes/next/README.md","hash":"7423256d6e7622434bbfe20c467819687e8e1b27","modified":1625214938535},{"_id":"themes/next/_config.yml","hash":"2eb953f60818bb0883b014fdae668a9b456675ff","modified":1625214938536},{"_id":"themes/next/bower.json","hash":"47471a8f13528dc4052b746db5b4be2375682173","modified":1625214938537},{"_id":"themes/next/gulpfile.coffee","hash":"412defab3d93d404b7c26aaa0279e2e586e97454","modified":1625214938537},{"_id":"themes/next/package.json","hash":"39370e2aadf1f9a7c105edff064c6e47682b3932","modified":1625214938596},{"_id":"themes/next/package-lock.json","hash":"cc3e9b232005f824a73555ad6568d566b8aae554","modified":1625214938596},{"_id":"source/_posts/GIT凭据.md","hash":"1ac4dfc452c2470438cda78e596308622c4a5b49","modified":1625217223291},{"_id":"source/_posts/ali-oss-同步到-minio.md","hash":"d9969f981d8be2c920dd2bdbe1f5207a9f0cfad7","modified":1625214938457},{"_id":"source/_posts/自动化构建.md","hash":"3794e2c14f428dba026734ff42942be058ffb0a4","modified":1625214938458},{"_id":"source/categories/index.md","hash":"7ce6bd3f68e47033b17f7ade8b38146a5a43bb23","modified":1625214938459},{"_id":"source/tags/index.md","hash":"e05d53831c6106b115232a42be15013f8cda32fe","modified":1625214938465},{"_id":"themes/next/.github/CONTRIBUTING.md","hash":"5adfad3ef1b870063e621bc0838268eb2c7c697a","modified":1625214938525},{"_id":"themes/next/.github/ISSUE_TEMPLATE.md","hash":"b1ec000babd42bb7ffd26f5ad8aac9b5bec79ae5","modified":1625214938526},{"_id":"themes/next/.github/PULL_REQUEST_TEMPLATE.md","hash":"1228506a940114288d61812bfe60c045a0abeac1","modified":1625214938527},{"_id":"themes/next/.github/browserstack_logo.png","hash":"a6c43887f64a7f48a2814e3714eaa1215e542037","modified":1625214938529},{"_id":"themes/next/languages/de.yml","hash":"fd02d9c2035798d5dc7c1a96b4c3e24b05b31a47","modified":1625214938538},{"_id":"themes/next/languages/default.yml","hash":"b3bcd8934327448a43d9bfada5dd11b1b8c1402e","modified":1625214938539},{"_id":"themes/next/languages/en.yml","hash":"2f4b4776ca1a08cc266a19afb0d1350a3926f42c","modified":1625214938539},{"_id":"themes/next/languages/fr-FR.yml","hash":"efeeb55d5c4add54ad59a612fc0630ee1300388c","modified":1625214938540},{"_id":"themes/next/languages/id.yml","hash":"dccae33e2a5b3c9f11c0e05ec4a7201af1b25745","modified":1625214938541},{"_id":"themes/next/languages/it.yml","hash":"a215d016146b1bd92cef046042081cbe0c7f976f","modified":1625214938541},{"_id":"themes/next/languages/ja.yml","hash":"37f954e47a3bc669620ca559e3edb3b0072a4be5","modified":1625214938542},{"_id":"themes/next/languages/ko.yml","hash":"dc8f3e8c64eb7c4bb2385025b3006b8efec8b31d","modified":1625214938543},{"_id":"themes/next/languages/nl-NL.yml","hash":"213e7a002b82fb265f69dabafbbc382cfd460030","modified":1625214938543},{"_id":"themes/next/languages/pt-BR.yml","hash":"568d494a1f37726a5375b11452a45c71c3e2852d","modified":1625214938544},{"_id":"themes/next/languages/pt.yml","hash":"2efcd240c66ab1a122f061505ca0fb1e8819877b","modified":1625214938545},{"_id":"themes/next/languages/ru.yml","hash":"e33ee44e80f82e329900fc41eb0bb6823397a4d6","modified":1625214938546},{"_id":"themes/next/languages/zh-Hans.yml","hash":"66b9b42f143c3cb2f782a94abd4c4cbd5fd7f55f","modified":1625214938546},{"_id":"themes/next/languages/zh-hk.yml","hash":"fe0d45807d015082049f05b54714988c244888da","modified":1625214938547},{"_id":"themes/next/languages/zh-tw.yml","hash":"432463b481e105073accda16c3e590e54c8e7b74","modified":1625214938547},{"_id":"themes/next/layout/_layout.swig","hash":"7d91c9ca571067a3548d0f3c132b480cd3beb823","modified":1625214938549},{"_id":"themes/next/layout/archive.swig","hash":"9a2c14874a75c7085d2bada5e39201d3fc4fd2b4","modified":1625214938592},{"_id":"themes/next/layout/category.swig","hash":"3cbb3f72429647411f9e85f2544bdf0e3ad2e6b2","modified":1625214938592},{"_id":"themes/next/layout/index.swig","hash":"555a357ecf17128db4e29346c92bb6298e66547a","modified":1625214938593},{"_id":"themes/next/layout/page.swig","hash":"e8fcaa641d46930237675d2ad4b56964d9e262e9","modified":1625214938593},{"_id":"themes/next/layout/post.swig","hash":"7a6ce102ca82c3a80f776e555dddae1a9981e1ed","modified":1625214938594},{"_id":"themes/next/layout/schedule.swig","hash":"87ad6055df01fa2e63e51887d34a2d8f0fbd2f5a","modified":1625214938594},{"_id":"themes/next/layout/tag.swig","hash":"34e1c016cbdf94a31f9c5d494854ff46b2a182e9","modified":1625214938595},{"_id":"themes/next/scripts/merge-configs.js","hash":"5758f8f3f12d17bc80da65bb808a20b3a8aae186","modified":1625214938597},{"_id":"themes/next/scripts/merge.js","hash":"39b84b937b2a9608b94e5872349a47200e1800ff","modified":1625214938598},{"_id":"themes/next/test/.jshintrc","hash":"c9fca43ae0d99718e45a6f5ce736a18ba5fc8fb6","modified":1625214938786},{"_id":"themes/next/test/helpers.js","hash":"f25e7f3265eb5a6e1ccbb5e5012fa9bebf134105","modified":1625214938787},{"_id":"themes/next/test/intern.js","hash":"db90b1063356727d72be0d77054fdc32fa882a66","modified":1625214938788},{"_id":"source/images/gitlab-config-cicd.png","hash":"e2226cabc7faa2e905bead82ae2406fffbaa2a8d","modified":1625214938460},{"_id":"source/images/gitlab-config-sshkey.png","hash":"ec9d640f5adb6612e5daf23bec1eb98d76cf1daa","modified":1625214938462},{"_id":"themes/next/source/fonts/.gitkeep","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938677},{"_id":"source/images/gitlab-runner.png","hash":"31265443957e9e2167d0974969c4676d03dbe63c","modified":1625214938464},{"_id":"themes/next/layout/_custom/header.swig","hash":"ba8ab5a0280b953aa97435ff8946cbcbb2755a27","modified":1625214938548},{"_id":"themes/next/layout/_custom/sidebar.swig","hash":"ba8ab5a0280b953aa97435ff8946cbcbb2755a27","modified":1625214938549},{"_id":"themes/next/layout/_macro/post-collapse.swig","hash":"8c56dd26157cbc580ae41d97ac34b90ab48ced3f","modified":1625214938550},{"_id":"themes/next/layout/_macro/post-copyright.swig","hash":"f83befdc740beb8dc88805efd7fbb0fef9ed19be","modified":1625214938550},{"_id":"themes/next/layout/_macro/post.swig","hash":"18365c242e07bd4fd622f9cf8abc8f74c24072b6","modified":1625214938551},{"_id":"themes/next/layout/_macro/reward.swig","hash":"357d86ec9586705bfbb2c40a8c7d247a407db21a","modified":1625214938552},{"_id":"themes/next/layout/_macro/sidebar.swig","hash":"b9f9959225876fb56fb3fba96306d19396e704d4","modified":1625214938552},{"_id":"themes/next/layout/_macro/wechat-subscriber.swig","hash":"e2e4eae391476da994045ed4c7faf5e05aca2cd7","modified":1625214938553},{"_id":"themes/next/layout/_partials/comments.swig","hash":"de45e77e7d52cf317129b7d21415a3002b95b94e","modified":1625214938554},{"_id":"themes/next/layout/_partials/footer.swig","hash":"58d292083e3e6aff473f1b5c1f02cc02b4881e46","modified":1625214938554},{"_id":"themes/next/layout/_partials/head.swig","hash":"f14a39dad1ddd98e6d3ceb25dda092ba80d391b5","modified":1625214938555},{"_id":"themes/next/layout/_partials/header.swig","hash":"c54b32263bc8d75918688fb21f795103b3f57f03","modified":1625214938557},{"_id":"themes/next/layout/_partials/page-header.swig","hash":"77c61e0baea3544df361b7338c3cd13dc84dde22","modified":1625214938558},{"_id":"themes/next/layout/_partials/pagination.swig","hash":"1634fb887842698e01ff6e632597fe03c75d2d01","modified":1625214938558},{"_id":"themes/next/layout/_partials/search.swig","hash":"b4ebe4a52a3b51efe549dd1cdee846103664f5eb","modified":1625214938559},{"_id":"themes/next/layout/_scripts/boostrap.swig","hash":"c0f5a0955f69ca4ed9ee64a2d5f8aa75064935ad","modified":1625214938565},{"_id":"themes/next/layout/_scripts/commons.swig","hash":"931808ad9b8d8390c0dcf9bdeb0954eeb9185d68","modified":1625214938565},{"_id":"themes/next/layout/_scripts/vendors.swig","hash":"9be624634703be496a5d2535228bc568a8373af9","modified":1625214938571},{"_id":"themes/next/layout/_third-party/duoshuo-hot-articles.swig","hash":"ba75672183d94f1de7c8bd0eeee497a58c70e889","modified":1625214938583},{"_id":"themes/next/layout/_third-party/exturl.swig","hash":"8301c9600bb3e47f7fb98b0e0332ef3c51bb1688","modified":1625214938584},{"_id":"themes/next/layout/_third-party/mathjax.swig","hash":"a0bd3388587fd943baae0d84ca779a707fbcad89","modified":1625214938584},{"_id":"themes/next/layout/_third-party/needsharebutton.swig","hash":"fa882641da3bd83d9a58a8a97f9d4c62a9ee7b5c","modified":1625214938585},{"_id":"themes/next/layout/_third-party/rating.swig","hash":"554ec568e9d2c71e4a624a8de3cb5929050811d6","modified":1625214938585},{"_id":"themes/next/layout/_third-party/schedule.swig","hash":"db15d7e1552aa2d2386a6b8a33b3b3a40bf9e43d","modified":1625214938586},{"_id":"themes/next/layout/_third-party/scroll-cookie.swig","hash":"9a188938d46931d5f3882a140aa1c48b3a893f0c","modified":1625214938587},{"_id":"themes/next/scripts/tags/button.js","hash":"eddbb612c15ac27faf11c59c019ce188f33dec2c","modified":1625214938600},{"_id":"themes/next/scripts/tags/center-quote.js","hash":"99b66949f18398689b904907af23c013be1b978f","modified":1625214938600},{"_id":"themes/next/scripts/tags/exturl.js","hash":"5022c0ba9f1d13192677cf1fd66005c57c3d0f53","modified":1625214938601},{"_id":"themes/next/scripts/tags/full-image.js","hash":"c9f833158c66bd72f627a0559cf96550e867aa72","modified":1625214938602},{"_id":"themes/next/scripts/tags/group-pictures.js","hash":"ac681b0d0d8d39ba3817336c0270c6787c2b6b70","modified":1625214938602},{"_id":"themes/next/scripts/tags/label.js","hash":"6f00952d70aadece844ce7fd27adc52816cc7374","modified":1625214938603},{"_id":"themes/next/scripts/tags/lazy-image.js","hash":"bcba2ff25cd7850ce6da322d8bd85a8dd00b5ceb","modified":1625214938603},{"_id":"themes/next/scripts/tags/note.js","hash":"f7eae135f35cdab23728e9d0d88b76e00715faa0","modified":1625214938604},{"_id":"themes/next/scripts/tags/tabs.js","hash":"aa7fc94a5ec27737458d9fe1a75c0db7593352fd","modified":1625214938604},{"_id":"themes/next/source/css/main.styl","hash":"a91dbb7ef799f0a171b5e726c801139efe545176","modified":1625214938677},{"_id":"themes/next/source/images/algolia_logo.svg","hash":"45eeea0b5fba833e21e38ea10ed5ab385ceb4f01","modified":1625214938678},{"_id":"themes/next/source/images/apple-touch-icon-next.png","hash":"2959dbc97f31c80283e67104fe0854e2369e40aa","modified":1625214938679},{"_id":"themes/next/source/images/avatar.gif","hash":"264082bb3a1af70d5499c7d22b0902cb454b6d12","modified":1625214938679},{"_id":"themes/next/source/images/cc-by-nc-nd.svg","hash":"bc3588c9b2d7c68830524783120ff6cf957cf668","modified":1625214938681},{"_id":"themes/next/source/images/cc-by-nc-sa.svg","hash":"6f55543d1fb9cbc436c101d24f802dec7b41efc3","modified":1625214938682},{"_id":"themes/next/source/images/cc-by-nc.svg","hash":"6f076713fb9bf934aa2c1046bdf2cf2e37bc1eab","modified":1625214938682},{"_id":"themes/next/source/images/cc-by-nd.svg","hash":"42cd73da328077ccc92f859bb8f3cf621b3484f8","modified":1625214938683},{"_id":"themes/next/source/images/cc-by-sa.svg","hash":"70c1535f43e54e5ff35ca81419e77e4c0c301398","modified":1625214938684},{"_id":"themes/next/source/images/cc-by.svg","hash":"e92a33c32d1dac8ed94849b2b4e6456e887efe70","modified":1625214938684},{"_id":"themes/next/source/images/cc-zero.svg","hash":"9bfb52b2f63527a7049247bf00d44e6dc1170e7d","modified":1625214938685},{"_id":"themes/next/source/images/favicon-16x16-next.png","hash":"943a0d67a9cdf8c198109b28f9dbd42f761d11c3","modified":1625214938685},{"_id":"themes/next/source/images/favicon-32x32-next.png","hash":"0749d7b24b0d2fae1c8eb7f671ad4646ee1894b1","modified":1625214938686},{"_id":"themes/next/source/images/loading.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1625214938686},{"_id":"themes/next/source/images/logo.svg","hash":"169f56fd82941591dad3abd734a50ec7259be950","modified":1625214938686},{"_id":"themes/next/source/images/placeholder.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1625214938687},{"_id":"themes/next/source/images/quote-l.svg","hash":"cd108d6f44351cadf8e6742565217f88818a0458","modified":1625214938687},{"_id":"themes/next/source/images/quote-r.svg","hash":"2a2a250b32a87c69dcc1b1976c74b747bedbfb41","modified":1625214938688},{"_id":"themes/next/source/images/searchicon.png","hash":"67727a6a969be0b2659b908518fa6706eed307b8","modified":1625214938688},{"_id":"themes/next/layout/_scripts/schemes/mist.swig","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938568},{"_id":"themes/next/layout/_scripts/schemes/muse.swig","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938569},{"_id":"themes/next/source/css/_mixins/Muse.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938655},{"_id":"themes/next/source/css/_mixins/Mist.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938654},{"_id":"themes/next/source/css/_mixins/custom.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938656},{"_id":"themes/next/source/css/_variables/Muse.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938674},{"_id":"themes/next/source/css/_variables/custom.styl","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1625214938676},{"_id":"themes/next/layout/_partials/head/custom-head.swig","hash":"a223919d2e1bf17ca4d6abb2c86f2efca9883dc1","modified":1625214938556},{"_id":"themes/next/layout/_partials/head/external-fonts.swig","hash":"f5e487b0d213ca0bd94aa30bc23b240d65081627","modified":1625214938556},{"_id":"themes/next/layout/_partials/search/localsearch.swig","hash":"b2f0d247b213e4cf8de47af6a304d98070cc7256","modified":1625214938560},{"_id":"themes/next/layout/_partials/search/swiftype.swig","hash":"a8c7f9ca7c605d039a1f3bf4e4d3183700a3dd62","modified":1625214938561},{"_id":"themes/next/layout/_partials/search/tinysou.swig","hash":"b25002a83cbd2ca0c4a5df87ad5bff26477c0457","modified":1625214938561},{"_id":"themes/next/layout/_partials/share/add-this.swig","hash":"9e3d133ac5bcc6cb51702c83b2611a49811abad1","modified":1625214938562},{"_id":"themes/next/layout/_partials/share/baidushare.swig","hash":"d9e2d9282f9be6e04eae105964abb81e512bffed","modified":1625214938563},{"_id":"themes/next/layout/_partials/share/duoshuo_share.swig","hash":"d4fbffd7fa8f2090eb32a871872665d90a885fac","modified":1625214938563},{"_id":"themes/next/layout/_partials/share/jiathis.swig","hash":"0a9cdd6958395fcdffc80ab60f0c6301b63664a5","modified":1625214938564},{"_id":"themes/next/layout/_scripts/pages/post-details.swig","hash":"9b84ab576982b2c3bb0291da49143bc77fba3cc6","modified":1625214938567},{"_id":"themes/next/layout/_scripts/schemes/gemini.swig","hash":"a9a3995b9615adfb8d6b127c78c6771627bee19a","modified":1625214938568},{"_id":"themes/next/layout/_scripts/schemes/pisces.swig","hash":"a9a3995b9615adfb8d6b127c78c6771627bee19a","modified":1625214938570},{"_id":"themes/next/layout/_third-party/analytics/analytics-with-widget.swig","hash":"ff947f3561b229bc528cb1837d4ca19612219411","modified":1625214938572},{"_id":"themes/next/layout/_third-party/analytics/application-insights.swig","hash":"71397a5823e8ec8aad3b68aace13150623b3e19d","modified":1625214938572},{"_id":"themes/next/layout/_third-party/analytics/baidu-analytics.swig","hash":"753d262911c27baf663fcaf199267133528656af","modified":1625214938573},{"_id":"themes/next/layout/_third-party/analytics/busuanzi-counter.swig","hash":"f2391fbe33abddff32ee42d01c99b6b572e977cc","modified":1625214938574},{"_id":"themes/next/layout/_third-party/analytics/cnzz-analytics.swig","hash":"a10b7f19d7b5725527514622899df413a34a89db","modified":1625214938574},{"_id":"themes/next/layout/_third-party/analytics/facebook-sdk.swig","hash":"7d94845f96197d9d84a405fa5d4ede75fb81b225","modified":1625214938575},{"_id":"themes/next/layout/_third-party/analytics/google-analytics.swig","hash":"b1e13df83fb2b1d5d513b30b7aa6158b0837daab","modified":1625214938575},{"_id":"themes/next/layout/_third-party/analytics/index.swig","hash":"45f3f629c2aacc381095750e1c8649041a71a84b","modified":1625214938576},{"_id":"themes/next/layout/_third-party/analytics/lean-analytics.swig","hash":"e6d10ee4fb70b3ae1cd37e9e36e000306734aa2e","modified":1625214938576},{"_id":"themes/next/layout/_third-party/analytics/tencent-analytics.swig","hash":"8a399df90dadba5ad4e781445b58f4765aeb701e","modified":1625214938577},{"_id":"themes/next/layout/_third-party/analytics/tencent-mta.swig","hash":"5a8027328f060f965b3014060bebec1d7cf149c1","modified":1625214938577},{"_id":"themes/next/layout/_third-party/analytics/vkontakte-api.swig","hash":"f9a1647a8f1866deeb94052d1f87a5df99cb1e70","modified":1625214938578},{"_id":"themes/next/layout/_third-party/comments/changyan.swig","hash":"4c501ea0b9c494181eb3c607c5526a5754e7fbd8","modified":1625214938578},{"_id":"themes/next/layout/_third-party/comments/disqus.swig","hash":"b83a51bbe0f1e2ded9819070840b0ea145f003a6","modified":1625214938579},{"_id":"themes/next/layout/_third-party/comments/duoshuo.swig","hash":"1600f340e0225361580c44890568dc07dbcf2c89","modified":1625214938580},{"_id":"themes/next/layout/_third-party/comments/gitment.swig","hash":"4dcc3213c033994d342d02b800b6229295433d30","modified":1625214938580},{"_id":"themes/next/layout/_third-party/comments/hypercomments.swig","hash":"af7f3e43cbdc4f88c13f101f0f341af96ace3383","modified":1625214938581},{"_id":"themes/next/layout/_third-party/comments/index.swig","hash":"493bd5999a1061b981922be92d8277a0f9152447","modified":1625214938581},{"_id":"themes/next/layout/_third-party/comments/livere.swig","hash":"9246162d4bc7e949ce1d12d135cbbaf5dc3024ec","modified":1625214938582},{"_id":"themes/next/layout/_third-party/comments/valine.swig","hash":"1b492d528a7d48216d4548011000fced2f4a538d","modified":1625214938582},{"_id":"themes/next/layout/_third-party/comments/youyan.swig","hash":"7e65ff8fe586cd655b0e9d1ad2912663ff9bd36c","modified":1625214938583},{"_id":"themes/next/layout/_third-party/search/index.swig","hash":"34599633658f3b0ffb487728b7766e1c7b551f5a","modified":1625214938589},{"_id":"themes/next/layout/_third-party/search/localsearch.swig","hash":"93479642fd076a1257fecc25fcf5d20ccdefe509","modified":1625214938589},{"_id":"themes/next/layout/_third-party/search/tinysou.swig","hash":"fe95dd3d166634c466e19aa756e65ad6e8254d3e","modified":1625214938590},{"_id":"themes/next/layout/_third-party/seo/baidu-push.swig","hash":"d8c98938719284fa06492c114d99a1904652a555","modified":1625214938591},{"_id":"themes/next/source/css/_custom/custom.styl","hash":"3403fdd8efde1a0afd11ae8a5a97673f5903087f","modified":1625214938653},{"_id":"themes/next/source/css/_mixins/Gemini.styl","hash":"07f7da320689f828f6e36a6123807964a45157a0","modified":1625214938654},{"_id":"themes/next/source/css/_mixins/Pisces.styl","hash":"7896c3ee107e1a8b9108b6019f1c070600a1e8cc","modified":1625214938655},{"_id":"themes/next/source/css/_mixins/base.styl","hash":"0e55cbd93852dc3f8ccb44df74d35d9918f847e0","modified":1625214938656},{"_id":"themes/next/source/css/_variables/Gemini.styl","hash":"58e7dd5947817d9fc30770712fc39b2f52230d1e","modified":1625214938673},{"_id":"themes/next/source/css/_variables/Mist.styl","hash":"a25408534f8fe6e321db4bbf9dd03335d648fe17","modified":1625214938674},{"_id":"themes/next/source/css/_variables/Pisces.styl","hash":"4069f918ccc312da86db6c51205fc6c6eaabb116","modified":1625214938675},{"_id":"themes/next/source/css/_variables/base.styl","hash":"b1f6ea881a4938a54603d68282b0f8efb4d7915d","modified":1625214938676},{"_id":"themes/next/source/js/src/affix.js","hash":"1b509c3b5b290a6f4607f0f06461a0c33acb69b1","modified":1625214938690},{"_id":"themes/next/source/js/src/algolia-search.js","hash":"cb431b54ba9c692165a1f5a12e4c564a560f8058","modified":1625214938690},{"_id":"themes/next/source/js/src/bootstrap.js","hash":"0289031200c3d4c2bdd801ee10fff13bb2c353e4","modified":1625214938691},{"_id":"themes/next/source/js/src/exturl.js","hash":"a2a0f0de07e46211f74942a468f42ee270aa555c","modified":1625214938692},{"_id":"themes/next/source/js/src/hook-duoshuo.js","hash":"b35a7dc47b634197b93487cea8671a40a9fdffce","modified":1625214938693},{"_id":"themes/next/source/js/src/js.cookie.js","hash":"1512c751d219577d338ac0780fb2bbd9075d5298","modified":1625214938694},{"_id":"themes/next/source/js/src/motion.js","hash":"885176ed51d468f662fbf0fc09611f45c7e5a3b1","modified":1625214938694},{"_id":"themes/next/source/js/src/post-details.js","hash":"93a18271b4123dd8f94f09d1439b47c3c19a8712","modified":1625214938695},{"_id":"themes/next/source/js/src/scroll-cookie.js","hash":"02cf91514e41200bc9df5d8bdbeb58575ec06074","modified":1625214938696},{"_id":"themes/next/source/js/src/scrollspy.js","hash":"b7657be25fc52ec67c75ab5481bdcb483573338b","modified":1625214938697},{"_id":"themes/next/source/js/src/utils.js","hash":"b7ddc240208d57596a67c78a04a11b0f0bdecc97","modified":1625214938698},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.css","hash":"90ef19edc982645b118b095615838d9c5eaba0de","modified":1625214938709},{"_id":"themes/next/source/lib/canvas-nest/canvas-nest.min.js","hash":"0387e75e23b1db108a755073fe52a0d03eb391a7","modified":1625214938715},{"_id":"themes/next/source/lib/canvas-ribbon/canvas-ribbon.js","hash":"b02737510e9b89aeed6b54f89f602a9c24b06ff2","modified":1625214938716},{"_id":"themes/next/source/lib/fastclick/.bower.json","hash":"bf3eef9d647cd7c9b62feda3bc708c6cdd7c0877","modified":1625214938728},{"_id":"themes/next/source/lib/fastclick/LICENSE","hash":"6f474ea75c42442da7bbcf2e9143ce98258efd8d","modified":1625214938729},{"_id":"themes/next/source/lib/fastclick/README.md","hash":"68a9b9d53126405b0fa5f3324f1fb96dbcc547aa","modified":1625214938729},{"_id":"themes/next/source/lib/fastclick/bower.json","hash":"a9b3ee1e4db71a0e4ea6d5bed292d176dd68b261","modified":1625214938730},{"_id":"themes/next/source/lib/font-awesome/.bower.json","hash":"b4aefc910578d76b267e86dfffdd5121c8db9aec","modified":1625214938733},{"_id":"themes/next/source/lib/font-awesome/.gitignore","hash":"03ddbf76c1dd1afb93eed0b670d2eee747472ef1","modified":1625214938733},{"_id":"themes/next/source/lib/font-awesome/.npmignore","hash":"c31ff06a740955e44edd4403902e653ccabfd4db","modified":1625214938734},{"_id":"themes/next/source/lib/font-awesome/HELP-US-OUT.txt","hash":"ee33b2798b1e714b904d663436c6b3521011d1fa","modified":1625214938734},{"_id":"themes/next/source/lib/font-awesome/bower.json","hash":"71e7183634dc1b9449f590f15ebd7201add22ca7","modified":1625214938735},{"_id":"themes/next/source/lib/jquery/.bower.json","hash":"865d6c1328ab209a4376b9d2b7a7824369565f28","modified":1625214938752},{"_id":"themes/next/source/lib/jquery_lazyload/.bower.json","hash":"90fa628f156d8045357ff11eaf32e61abacf10e8","modified":1625214938755},{"_id":"themes/next/source/lib/jquery_lazyload/CONTRIBUTING.md","hash":"4ded6fee668544778e97e38c2b211fc56c848e77","modified":1625214938756},{"_id":"themes/next/source/lib/jquery_lazyload/README.md","hash":"b930297cb98b8e1dbd5abe9bc1ed9d5935d18ce8","modified":1625214938756},{"_id":"themes/next/source/lib/jquery_lazyload/bower.json","hash":"e0acf1db27b0cc16128a59c46db1db406b5c4c58","modified":1625214938757},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.lazyload.js","hash":"f4a570908f6c89c6edfb1c74959e733eaadea4f2","modified":1625214938757},{"_id":"themes/next/source/lib/jquery_lazyload/jquery.scrollstop.js","hash":"bf773ad48a0b9aa77681a89d7569eefc0f7b7b18","modified":1625214938758},{"_id":"themes/next/source/lib/needsharebutton/font-embedded.css","hash":"14264a210bf94232d58d7599ea2ba93bfa4fb458","modified":1625214938759},{"_id":"themes/next/source/lib/needsharebutton/needsharebutton.css","hash":"e33aa8fa48b6639d8d8b937d13261597dd473b3a","modified":1625214938760},{"_id":"themes/next/source/lib/needsharebutton/needsharebutton.js","hash":"2ce5f3bf15c523b9bfc97720d8884bb22602a454","modified":1625214938761},{"_id":"themes/next/source/lib/pace/pace-theme-barber-shop.min.css","hash":"ee0d51446cb4ffe1bb96bd7bc8c8e046dddfcf46","modified":1625214938762},{"_id":"themes/next/source/lib/pace/pace-theme-big-counter.min.css","hash":"5b561dc328af4c4d512e20a76fe964d113a32ba8","modified":1625214938762},{"_id":"themes/next/source/lib/pace/pace-theme-bounce.min.css","hash":"f6bdb9a785b7979dd8ec5c60e278af955ef1e585","modified":1625214938763},{"_id":"themes/next/source/lib/pace/pace-theme-center-atom.min.css","hash":"dcf79c24fe5350fb73d8038573a104e73639e9d3","modified":1625214938763},{"_id":"themes/next/source/lib/pace/pace-theme-center-circle.min.css","hash":"a4066769c78affbfbc5e30a600e2c7862cd532e0","modified":1625214938764},{"_id":"themes/next/source/lib/pace/pace-theme-center-radar.min.css","hash":"ab7cba998bf4c03b13df342bf43647fa4f419783","modified":1625214938764},{"_id":"themes/next/source/lib/pace/pace-theme-center-simple.min.css","hash":"67f44c947548bd4d77e7590d3f59e236cbf9e98a","modified":1625214938765},{"_id":"themes/next/source/lib/pace/pace-theme-corner-indicator.min.css","hash":"b3c64c973f31884e3d8145989476707333406b9a","modified":1625214938765},{"_id":"themes/next/source/lib/pace/pace-theme-fill-left.min.css","hash":"0bec1e235a4a2cccda3f993b205424e1441a44ae","modified":1625214938766},{"_id":"themes/next/source/lib/pace/pace-theme-flash.min.css","hash":"13ace22c40312d7bbd8d9c1e50eff897a7a497d8","modified":1625214938767},{"_id":"themes/next/source/lib/pace/pace-theme-loading-bar.min.css","hash":"7ee28875dfc1230d76c537f6605766e8d4011e9f","modified":1625214938767},{"_id":"themes/next/source/lib/pace/pace-theme-mac-osx.min.css","hash":"9f2e7b51b084da407863826b25265b31150b3821","modified":1625214938768},{"_id":"themes/next/source/lib/pace/pace-theme-minimal.min.css","hash":"9cd783cceb8a191f3c8b5d81f7a430ecc3e489d3","modified":1625214938768},{"_id":"themes/next/source/lib/pace/pace.min.js","hash":"8aaa675f577d5501f5f22d5ccb07c2b76310b690","modified":1625214938769},{"_id":"themes/next/source/lib/three/canvas_lines.min.js","hash":"2d9a9f38c493fdf7c0b833bb9184b6a1645c11b2","modified":1625214938770},{"_id":"themes/next/source/lib/three/canvas_sphere.min.js","hash":"46a50b91c98b639c9a2b9265c5a1e66a5c656881","modified":1625214938771},{"_id":"themes/next/source/lib/three/three-waves.min.js","hash":"8148492dd49aa876d32bb7d5b728d3f5bf6f5074","modified":1625214938771},{"_id":"themes/next/source/lib/velocity/.bower.json","hash":"63da5e80ebb61bb66a2794d5936315ca44231f0c","modified":1625214938780},{"_id":"themes/next/source/lib/velocity/bower.json","hash":"92d92860418c4216aa59eb4cb4a556290a7ad9c3","modified":1625214938780},{"_id":"themes/next/source/lib/velocity/velocity.min.js","hash":"bf172816a9c57f9040e3d19c24e181a142daf92b","modified":1625214938784},{"_id":"themes/next/source/lib/velocity/velocity.ui.js","hash":"dbbfb50f6502f6b81dcc9fee7b31f1e812da3464","modified":1625214938785},{"_id":"themes/next/source/lib/velocity/velocity.ui.min.js","hash":"dde584994ac13dc601836e86f4cf490e418d9723","modified":1625214938786},{"_id":"themes/next/source/lib/jquery/index.js","hash":"17a740d68a1c330876c198b6a4d9319f379f3af2","modified":1625214938754},{"_id":"themes/next/layout/_third-party/search/algolia-search/assets.swig","hash":"218cc936ba3518a3591b2c9eda46bc701edf7710","modified":1625214938588},{"_id":"themes/next/layout/_third-party/search/algolia-search/dom.swig","hash":"2530de0f3125a912756f6c0e9090cd012134a4c5","modified":1625214938588},{"_id":"themes/next/source/css/_common/components/back-to-top-sidebar.styl","hash":"8f86f694c0749a18ab3ad6f6df75466ca137a4bc","modified":1625214938606},{"_id":"themes/next/source/css/_common/components/back-to-top.styl","hash":"237d185ac62ec9877e300947fa0109c44fb8db19","modified":1625214938607},{"_id":"themes/next/source/css/_common/components/buttons.styl","hash":"8b32928686c327151e13d3ab100157f9a03cd59f","modified":1625214938607},{"_id":"themes/next/source/css/_common/components/comments.styl","hash":"ff4489cd582f518bba6909a301ac1292a38b4e96","modified":1625214938608},{"_id":"themes/next/source/css/_common/components/components.styl","hash":"7ad4081466b397e2a6204141bb7768b7c01bd93c","modified":1625214938608},{"_id":"themes/next/source/css/_common/components/pagination.styl","hash":"4f2801fc4cf3f31bf2069f41db8c6ce0e3da9e39","modified":1625214938619},{"_id":"themes/next/source/css/_common/components/tag-cloud.styl","hash":"6eb4bcc3056bd279d000607e8b4dad50d368ca69","modified":1625214938635},{"_id":"themes/next/source/css/_common/outline/outline.styl","hash":"12662536c7a07fff548abe94171f34b768dd610f","modified":1625214938647},{"_id":"themes/next/source/css/_common/scaffolding/base.styl","hash":"24ee4b356ff55fc6e58f26a929fa07750002cf29","modified":1625214938649},{"_id":"themes/next/source/css/_common/scaffolding/helpers.styl","hash":"1da5c800d025345f212a3bf1be035060f4e5e6ed","modified":1625214938650},{"_id":"themes/next/source/css/_common/scaffolding/mobile.styl","hash":"91ca75492cd51f2553f4d294ed2f48239fcd55eb","modified":1625214938650},{"_id":"themes/next/source/css/_common/scaffolding/scaffolding.styl","hash":"a17e2b871a335f290afb392a08f94fd35f59c715","modified":1625214938652},{"_id":"themes/next/source/css/_common/scaffolding/normalize.styl","hash":"3f40e8a9fe8e7bd5cfc4cf4cbbbcb9539462e973","modified":1625214938651},{"_id":"themes/next/source/css/_common/scaffolding/tables.styl","hash":"ea9069645696f86c5df64208490876fe150c8cae","modified":1625214938652},{"_id":"themes/next/source/css/_schemes/Gemini/index.styl","hash":"60fa84aa7731760f05f52dd7d8f79b5f74ac478d","modified":1625214938657},{"_id":"themes/next/source/css/_schemes/Mist/_base.styl","hash":"25d5e45a355ee2093f3b8b8eeac125ebf3905026","modified":1625214938658},{"_id":"themes/next/source/css/_schemes/Mist/_header.styl","hash":"d0bfd1bef988c76f7d7dd72d88af6f0908a8b0db","modified":1625214938659},{"_id":"themes/next/source/css/_schemes/Mist/_logo.styl","hash":"b1025c421406d2c24cc92a02ae28c1915b01e240","modified":1625214938660},{"_id":"themes/next/source/css/_schemes/Mist/_menu.styl","hash":"26666c1f472bf5f3fb9bc62081cca22b4de15ccb","modified":1625214938661},{"_id":"themes/next/source/css/_schemes/Mist/_posts-expanded.styl","hash":"9c99034f8e00d47e978b3959f51eb4a9ded0fcc8","modified":1625214938662},{"_id":"themes/next/source/css/_schemes/Mist/_search.styl","hash":"09c965022c13b84ed8a661fee8ac2a6d550495ae","modified":1625214938663},{"_id":"themes/next/source/css/_schemes/Mist/index.styl","hash":"9b913b73d31d21f057f97115ffab93cfa578b884","modified":1625214938663},{"_id":"themes/next/source/css/_schemes/Muse/_layout.styl","hash":"31127dcbf4c7b4ada53ffbf1638b5fe325b7cbc0","modified":1625214938666},{"_id":"themes/next/source/css/_schemes/Muse/_logo.styl","hash":"748dbfbf9c08e719ddc775958003c64b00d39dab","modified":1625214938667},{"_id":"themes/next/source/css/_schemes/Muse/_menu.styl","hash":"a98ad885ee4f48d85b2578a0b9c2bbf166e96733","modified":1625214938667},{"_id":"themes/next/source/css/_schemes/Muse/_search.styl","hash":"09c965022c13b84ed8a661fee8ac2a6d550495ae","modified":1625214938668},{"_id":"themes/next/source/css/_schemes/Muse/index.styl","hash":"5dbc0d0c897e46760e5dbee416530d485c747bba","modified":1625214938668},{"_id":"themes/next/source/css/_schemes/Pisces/_brand.styl","hash":"bce344d3a665b4c55230d2a91eac2ad16d6f32fd","modified":1625214938670},{"_id":"themes/next/source/css/_schemes/Pisces/_layout.styl","hash":"416988dca389e6e2fdfa51fa7f4ee07eb53f82fb","modified":1625214938670},{"_id":"themes/next/source/css/_schemes/Pisces/_menu.styl","hash":"4642e30010af8b2b037f5b43146b10a934941958","modified":1625214938671},{"_id":"themes/next/source/css/_schemes/Pisces/_posts.styl","hash":"1f6e2ce674735269599acc6d77b3ea18d31967fc","modified":1625214938671},{"_id":"themes/next/source/css/_schemes/Pisces/_sidebar.styl","hash":"30561ed60fc64f3e4ce85143bdb55faa814743a6","modified":1625214938672},{"_id":"themes/next/source/css/_schemes/Pisces/index.styl","hash":"86197902dfd3bededba10ba62b8f9f22e0420bde","modified":1625214938673},{"_id":"themes/next/source/js/src/schemes/pisces.js","hash":"f1d0b5d7af32c423eaa8bb93ab6a0b45655645dc","modified":1625214938696},{"_id":"themes/next/source/lib/Han/dist/han.min.css","hash":"6d586bfcfb7ae48f1b12f76eec82d3ad31947501","modified":1625214938707},{"_id":"themes/next/source/lib/Han/dist/han.min.js","hash":"16b03db23a52623348f37c04544f2792032c1fb6","modified":1625214938708},{"_id":"themes/next/source/lib/fancybox/source/blank.gif","hash":"2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a","modified":1625214938717},{"_id":"themes/next/source/lib/fancybox/source/fancybox_loading.gif","hash":"1a755fb2599f3a313cc6cfdb14df043f8c14a99c","modified":1625214938718},{"_id":"themes/next/source/lib/fancybox/source/[email protected]","hash":"273b123496a42ba45c3416adb027cd99745058b0","modified":1625214938718},{"_id":"themes/next/source/lib/fancybox/source/fancybox_overlay.png","hash":"b3a4ee645ba494f52840ef8412015ba0f465dbe0","modified":1625214938719},{"_id":"themes/next/source/lib/fancybox/source/fancybox_sprite.png","hash":"17df19f97628e77be09c352bf27425faea248251","modified":1625214938720},{"_id":"themes/next/source/lib/fancybox/source/[email protected]","hash":"30c58913f327e28f466a00f4c1ac8001b560aed8","modified":1625214938720},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.css","hash":"82f33ad0842aa9c154d029e0dada2497d4eb1d57","modified":1625214938725},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.js","hash":"d71602cbca33b9ecdb7ab291b7f86a49530f3601","modified":1625214938727},{"_id":"themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js","hash":"ae6318aeb62ad4ce7a7e9a4cdacd93ffb004f0fb","modified":1625214938727},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.js","hash":"1d6aeda0480d0e4cb6198edf7719d601d4ae2ccc","modified":1625214938731},{"_id":"themes/next/source/lib/fastclick/lib/fastclick.min.js","hash":"2cae0f5a6c5d6f3cb993015e6863f9483fc4de18","modified":1625214938732},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css","hash":"3655f1fdf1e584c4d8e8d39026093ca306a5a341","modified":1625214938736},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.css.map","hash":"1573904b82807abbb32c97a3632c6c6808eaac50","modified":1625214938737},{"_id":"themes/next/source/lib/font-awesome/css/font-awesome.min.css","hash":"88af80502c44cd52ca81ffe7dc7276b7eccb06cf","modified":1625214938738},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js","hash":"41ea797c68dbcff2f6fb3aba1d1043a22e7cc0f6","modified":1625214938778},{"_id":"themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js","hash":"a817b6c158cbc5bab3582713de9fe18a18a80552","modified":1625214938779},{"_id":"themes/next/source/lib/Han/dist/han.js","hash":"4ac683b2bc8531c84d98f51b86957be0e6f830f3","modified":1625214938706},{"_id":"themes/next/source/lib/Han/dist/han.css","hash":"6c26cdb36687d4f0a11dabf5290a909c3506be5c","modified":1625214938705},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1625214938749},{"_id":"themes/next/source/lib/velocity/velocity.js","hash":"4237c6e9d59da349639de20e559e87c2c0218cfd","modified":1625214938783},{"_id":"themes/next/source/css/_common/components/footer/footer.styl","hash":"9f73c4696f0907aa451a855444f88fc0698fa472","modified":1625214938609},{"_id":"themes/next/source/css/_common/components/header/header.styl","hash":"53cde051e0337f4bf42fb8d6d7a79fa3fa6d4ef2","modified":1625214938610},{"_id":"themes/next/source/css/_common/components/header/headerband.styl","hash":"d63e0cacc53dd375fcc113465a4328c59ff5f2c1","modified":1625214938611},{"_id":"themes/next/source/css/_common/components/header/menu.styl","hash":"1a0d059799a298fe17c49a44298d32cebde93785","modified":1625214938611},{"_id":"themes/next/source/css/_common/components/header/site-nav.styl","hash":"1727702eac5d326b5c81a667944a245016668231","modified":1625214938613},{"_id":"themes/next/source/css/_common/components/header/site-meta.styl","hash":"0656e753f182c9f47fef7304c847b7587a85ef0d","modified":1625214938612},{"_id":"themes/next/source/css/_common/components/highlight/diff.styl","hash":"167986d0f649516671ddf7193eebba7b421cd115","modified":1625214938613},{"_id":"themes/next/source/css/_common/components/highlight/highlight.styl","hash":"50450d9fdc8a2b2be8cfca51e3e1a01ffd636c0b","modified":1625214938614},{"_id":"themes/next/source/css/_common/components/highlight/theme.styl","hash":"7fe4d4d656e86276c17cb4e48a560cb6a4def703","modified":1625214938615},{"_id":"themes/next/source/css/_common/components/pages/archive.styl","hash":"b6f3a06a94a6ee5470c956663164d58eda818a64","modified":1625214938616},{"_id":"themes/next/source/css/_common/components/pages/categories.styl","hash":"7fb593f90d74a99c21840679933b9ef6fdc16a61","modified":1625214938617},{"_id":"themes/next/source/css/_common/components/pages/pages.styl","hash":"f9760ecf186954cee3ba4a149be334e9ba296b89","modified":1625214938617},{"_id":"themes/next/source/css/_common/components/pages/post-detail.styl","hash":"4e3838d7ac81d9ad133960f0f7ed58a44a015285","modified":1625214938618},{"_id":"themes/next/source/css/_common/components/pages/schedule.styl","hash":"8cf318644acc8b4978537c263290363e21c7f5af","modified":1625214938618},{"_id":"themes/next/source/css/_common/components/post/post-button.styl","hash":"62fbbd32cf5a99ae550c45c763a2c4813a138d01","modified":1625214938619},{"_id":"themes/next/source/css/_common/components/post/post-collapse.styl","hash":"875cbe88d5c7f6248990e2beb97c9828920e7e24","modified":1625214938620},{"_id":"themes/next/source/css/_common/components/post/post-copyright.styl","hash":"caf263d1928496688c0e1419801eafd7e6919ce5","modified":1625214938621},{"_id":"themes/next/source/css/_common/components/post/post-eof.styl","hash":"a200c0a1c5a895ac9dc41e0641a5dfcd766be99b","modified":1625214938621},{"_id":"themes/next/source/css/_common/components/post/post-expand.styl","hash":"a6c6eb8adba0a090ad1f4b9124e866887f20d10d","modified":1625214938622},{"_id":"themes/next/source/css/_common/components/post/post-gallery.styl","hash":"cd9e214e502697f2f2db84eb721bac57a49b0fce","modified":1625214938622},{"_id":"themes/next/source/css/_common/components/post/post-meta.styl","hash":"d0d7a5c90d62b685520d2b47fea8ba6019ff5402","modified":1625214938623},{"_id":"themes/next/source/css/_common/components/post/post-nav.styl","hash":"27deb3d3a243d30022055dac7dad851024099a8b","modified":1625214938623},{"_id":"themes/next/source/css/_common/components/post/post-reward.styl","hash":"ca88ea6999a61fb905eb6e72eba5f92d4ee31e6e","modified":1625214938624},{"_id":"themes/next/source/css/_common/components/post/post-rtl.styl","hash":"b2495ae5e04dcca610aacadc47881d9e716cd440","modified":1625214938625},{"_id":"themes/next/source/css/_common/components/post/post-tags.styl","hash":"5a982d8ef3b3623ea5f59e63728990f5623c1b57","modified":1625214938626},{"_id":"themes/next/source/css/_common/components/post/post-title.styl","hash":"ccb34c52be8adba5996c6b94f9e723bd07d34c16","modified":1625214938626},{"_id":"themes/next/source/css/_common/components/post/post-type.styl","hash":"01567edaea6978628aa5521a122a85434c418bfd","modified":1625214938627},{"_id":"themes/next/source/css/_common/components/post/post-widgets.styl","hash":"7968343e41f8b94b318c36289dff1196c3eb1791","modified":1625214938627},{"_id":"themes/next/source/css/_common/components/post/post.styl","hash":"89d6c3b697efc63de42afd2e89194b1be14152af","modified":1625214938628},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-author-links.styl","hash":"39f04c4c7237a4e10acd3002331992b79945d241","modified":1625214938628},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-author.styl","hash":"761eba9811b050b25d548cc0854de4824b41eb08","modified":1625214938629},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-blogroll.styl","hash":"8dd9a1c6f4f6baa00c2cf01837e7617120cf9660","modified":1625214938630},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-dimmer.styl","hash":"11c22f0fb3f6beb13e5a425ec064a4ff974c13b7","modified":1625214938630},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-feed-link.styl","hash":"61f8cea3c01acd600e90e1bc2a07def405503748","modified":1625214938631},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-nav.styl","hash":"1153bb71edf253765145559674390e16dd67c633","modified":1625214938631},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-toc.styl","hash":"28a8737c090fbffd188d73a00b42e90b9ee57df2","modified":1625214938632},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar-toggle.styl","hash":"a1521d48bb06d8d703753f52a198baa197af7da2","modified":1625214938633},{"_id":"themes/next/source/css/_common/components/sidebar/sidebar.styl","hash":"5ef6343835f484a2c0770bd1eb9cc443609e4c39","modified":1625214938633},{"_id":"themes/next/source/css/_common/components/sidebar/site-state.styl","hash":"e71652d3216e289c8548b1ea2357822c1476a425","modified":1625214938634},{"_id":"themes/next/source/css/_common/components/tags/blockquote-center.styl","hash":"2fe76476432b31993338cb45cdb3b29a518b6379","modified":1625214938636},{"_id":"themes/next/source/css/_common/components/tags/full-image.styl","hash":"3159b55f35c40bd08e55b00148c523760a708c51","modified":1625214938637},{"_id":"themes/next/source/css/_common/components/tags/group-pictures.styl","hash":"2ad1a2a9bbf6742d1b0762c4c623b68113d1e0fe","modified":1625214938638},{"_id":"themes/next/source/css/_common/components/tags/exturl.styl","hash":"a3bdd71237afc112b2aa255f278cab6baeb25351","modified":1625214938636},{"_id":"themes/next/source/css/_common/components/tags/label.styl","hash":"2ab1322fe52ab5aafd49e68f5bd890e8380ee927","modified":1625214938638},{"_id":"themes/next/source/css/_common/components/tags/note-modern.styl","hash":"b7076e58d647265ee0ad2b461fe8ce72c9373bc5","modified":1625214938639},{"_id":"themes/next/source/css/_common/components/tags/note.styl","hash":"9a409b798decdefdaf7a23f0b11004a8c27e82f3","modified":1625214938639},{"_id":"themes/next/source/css/_common/components/tags/tabs.styl","hash":"154a87a32d2fead480d5e909c37f6c476671c5e6","modified":1625214938640},{"_id":"themes/next/source/css/_common/components/tags/tags.styl","hash":"b80604868e4f5cf20fccafd7ee415c20c804f700","modified":1625214938640},{"_id":"themes/next/source/css/_common/components/third-party/baidushare.styl","hash":"5dbeed535d63a50265d96b396a5440f9bb31e4ba","modified":1625214938642},{"_id":"themes/next/source/css/_common/components/third-party/algolia-search.styl","hash":"bba4f3bdb7517cd85376df3e1209b570c0548c69","modified":1625214938641},{"_id":"themes/next/source/css/_common/components/third-party/busuanzi-counter.styl","hash":"a6e7d698702c2e383dde3fde2abde27951679084","modified":1625214938643},{"_id":"themes/next/source/css/_common/components/third-party/duoshuo.styl","hash":"717cc7f82be9cc151e23a7678601ff2fd3a7fa1d","modified":1625214938643},{"_id":"themes/next/source/css/_common/components/third-party/gitment.styl","hash":"874278147115601d2abf15987f5f7a84ada1ac6b","modified":1625214938644},{"_id":"themes/next/source/css/_common/components/third-party/jiathis.styl","hash":"15975ba7456b96916b1dbac448a1a0d2c38b8f3d","modified":1625214938645},{"_id":"themes/next/source/css/_common/components/third-party/localsearch.styl","hash":"16087276945fa038f199692e3eabb1c52b8ea633","modified":1625214938646},{"_id":"themes/next/source/css/_common/components/third-party/han.styl","hash":"10599e16414a8b7a76c4e79e6617b5fe3d4d1adf","modified":1625214938644},{"_id":"themes/next/source/css/_common/components/third-party/needsharebutton.styl","hash":"28825ae15fa20ae3942cdaa7bcc1f3523ce59acc","modified":1625214938646},{"_id":"themes/next/source/css/_common/components/third-party/third-party.styl","hash":"9c8196394a89dfa40b87bf0019e80144365a9c93","modified":1625214938647},{"_id":"themes/next/source/css/_schemes/Mist/outline/outline.styl","hash":"a07aa12cc36ac5c819670c2a3c17d07ed7a08986","modified":1625214938664},{"_id":"themes/next/source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl","hash":"1f09be9bb38411f0629b58c3b23873589a6dbcaa","modified":1625214938665},{"_id":"themes/next/source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl","hash":"1f09be9bb38411f0629b58c3b23873589a6dbcaa","modified":1625214938669},{"_id":"themes/next/source/lib/Han/dist/font/han-space.otf","hash":"07436f011b44051f61b8329c99de4bec64e86f4b","modified":1625214938700},{"_id":"themes/next/source/lib/Han/dist/font/han-space.woff","hash":"7a635062b10bf5662ae1d218ba0980171005d060","modified":1625214938701},{"_id":"themes/next/source/lib/Han/dist/font/han.otf","hash":"f1f6bb8f461f5672e000380195d3d2358a28494c","modified":1625214938702},{"_id":"themes/next/source/lib/Han/dist/font/han.woff","hash":"f38ff9b2eecaa17b50b66aa2dae87e9e7436d195","modified":1625214938703},{"_id":"themes/next/source/lib/Han/dist/font/han.woff2","hash":"623af3ed5423371ac136a4fe0e8cc7bb7396037a","modified":1625214938704},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","hash":"6394c48092085788a8c0ef72670b0652006231a1","modified":1625214938722},{"_id":"themes/next/source/lib/fancybox/source/helpers/fancybox_buttons.png","hash":"e385b139516c6813dcd64b8fc431c364ceafe5f3","modified":1625214938721},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","hash":"ee948b4489aedeb548a77c9e45d8c7c5732fd62d","modified":1625214938723},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-media.js","hash":"51139a4c79573d372a347ef01a493222a1eaf10a","modified":1625214938723},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","hash":"b88b589f5f1aa1b3d87cc7eef34c281ff749b1ae","modified":1625214938724},{"_id":"themes/next/source/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","hash":"d22b1629cb23a6181bebb70d0cf653ffe4b835c8","modified":1625214938724},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1625214938748},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1625214938751},{"_id":"themes/next/source/lib/font-awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1625214938740},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1625214938743},{"_id":"themes/next/source/lib/algolia-instant-search/instantsearch.min.js","hash":"90a1b22129efc172e2dfcceeeb76bff58bc3192f","modified":1625214938713},{"_id":"themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.svg","hash":"b5483b11f8ba213e733b5b8af9927a04fec996f6","modified":1625214938746},{"_id":"themes/next/source/lib/three/three.min.js","hash":"26273b1cb4914850a89529b48091dc584f2c57b8","modified":1625214938777},{"_id":"public/baidusitemap.xml","hash":"3397174e99f3ce5548f0222ae42d01df20963d52","modified":1625217252041},{"_id":"public/search.xml","hash":"17e82dd5f9f998fb2f776c27cb17460d3d340e41","modified":1625217252041},{"_id":"public/sitemap.xml","hash":"40eb0d77c36089308d77e6916a213e6816b7b4da","modified":1625217252047},{"_id":"public/categories/index.html","hash":"a04e59baaa97e9e3f90474d171ecb07316439b0d","modified":1625217252055},{"_id":"public/tags/index.html","hash":"96ba75037d75f0b44bdf1230a271d2cbaf5a3457","modified":1625217252056},{"_id":"public/2021/07/02/GIT凭据/index.html","hash":"b7bdea1b44f2b98f2208aa96a2e76eef40cda466","modified":1625217252056},{"_id":"public/2021/02/03/自动化构建/index.html","hash":"513970249e9a766bd571d5158261b9dcbe34ecba","modified":1625217252056},{"_id":"public/2021/02/02/ali-oss-同步到-minio/index.html","hash":"f28dc26b0685016f3883033281dbd66a6dad1087","modified":1625217252056},{"_id":"public/archives/index.html","hash":"5e6e20819c7190a0ae6c784ba4f1b82c6b04b43c","modified":1625217252056},{"_id":"public/archives/2021/index.html","hash":"18dc5ec0278b0b7e046c2e19b29680202738f3af","modified":1625217252056},{"_id":"public/archives/2021/02/index.html","hash":"5d325e0c2df3eee047061d504f88d5e7ca1c0b20","modified":1625217252056},{"_id":"public/archives/2021/07/index.html","hash":"ff4b627f5734158f85e2f18a11990b2ce0438238","modified":1625217252056},{"_id":"public/categories/工具/index.html","hash":"e19c335e300109530c7bfbe6814beb613c6ae2c2","modified":1625217252056},{"_id":"public/categories/CI-CD/index.html","hash":"8b4635bf0e021b71035b33c12ad54ac2c535c167","modified":1625217252057},{"_id":"public/categories/数据迁移/index.html","hash":"976bcc3cd4b2aa8ef125e2837ff8fc6d5e3cb0ef","modified":1625217252057},{"_id":"public/index.html","hash":"4dbd78f57a18b3bbd9473d73646e228e3d4b7948","modified":1625217252057},{"_id":"public/tags/git/index.html","hash":"bdf289d25d5bac7328f2dc8ff15e31641604b3ea","modified":1625217252057},{"_id":"public/tags/部署/index.html","hash":"ad0dd2706b5656a9c8601e6d8f488fef892bcf8c","modified":1625217252057},{"_id":"public/tags/minio/index.html","hash":"be524c980edf54f1def04ca9c90508938126e622","modified":1625217252057},{"_id":"public/images/algolia_logo.svg","hash":"45eeea0b5fba833e21e38ea10ed5ab385ceb4f01","modified":1625217252075},{"_id":"public/images/apple-touch-icon-next.png","hash":"2959dbc97f31c80283e67104fe0854e2369e40aa","modified":1625217252075},{"_id":"public/images/avatar.gif","hash":"264082bb3a1af70d5499c7d22b0902cb454b6d12","modified":1625217252075},{"_id":"public/images/cc-by-nc-nd.svg","hash":"bc3588c9b2d7c68830524783120ff6cf957cf668","modified":1625217252075},{"_id":"public/images/cc-by-nc-sa.svg","hash":"6f55543d1fb9cbc436c101d24f802dec7b41efc3","modified":1625217252075},{"_id":"public/images/cc-by-nc.svg","hash":"6f076713fb9bf934aa2c1046bdf2cf2e37bc1eab","modified":1625217252075},{"_id":"public/images/cc-by-nd.svg","hash":"42cd73da328077ccc92f859bb8f3cf621b3484f8","modified":1625217252075},{"_id":"public/images/cc-by-sa.svg","hash":"70c1535f43e54e5ff35ca81419e77e4c0c301398","modified":1625217252075},{"_id":"public/images/cc-by.svg","hash":"e92a33c32d1dac8ed94849b2b4e6456e887efe70","modified":1625217252076},{"_id":"public/images/cc-zero.svg","hash":"9bfb52b2f63527a7049247bf00d44e6dc1170e7d","modified":1625217252076},{"_id":"public/images/favicon-16x16-next.png","hash":"943a0d67a9cdf8c198109b28f9dbd42f761d11c3","modified":1625217252076},{"_id":"public/images/favicon-32x32-next.png","hash":"0749d7b24b0d2fae1c8eb7f671ad4646ee1894b1","modified":1625217252076},{"_id":"public/images/loading.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1625217252076},{"_id":"public/images/logo.svg","hash":"169f56fd82941591dad3abd734a50ec7259be950","modified":1625217252076},{"_id":"public/images/placeholder.gif","hash":"5fbd472222feb8a22cf5b8aa5dc5b8e13af88e2b","modified":1625217252076},{"_id":"public/images/quote-l.svg","hash":"cd108d6f44351cadf8e6742565217f88818a0458","modified":1625217252076},{"_id":"public/images/quote-r.svg","hash":"2a2a250b32a87c69dcc1b1976c74b747bedbfb41","modified":1625217252076},{"_id":"public/images/searchicon.png","hash":"67727a6a969be0b2659b908518fa6706eed307b8","modified":1625217252076},{"_id":"public/lib/fastclick/LICENSE","hash":"6f474ea75c42442da7bbcf2e9143ce98258efd8d","modified":1625217252076},{"_id":"public/lib/font-awesome/HELP-US-OUT.txt","hash":"ee33b2798b1e714b904d663436c6b3521011d1fa","modified":1625217252076},{"_id":"public/lib/fancybox/source/blank.gif","hash":"2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a","modified":1625217252077},{"_id":"public/lib/fancybox/source/fancybox_loading.gif","hash":"1a755fb2599f3a313cc6cfdb14df043f8c14a99c","modified":1625217252077},{"_id":"public/lib/fancybox/source/[email protected]","hash":"273b123496a42ba45c3416adb027cd99745058b0","modified":1625217252077},{"_id":"public/lib/fancybox/source/fancybox_overlay.png","hash":"b3a4ee645ba494f52840ef8412015ba0f465dbe0","modified":1625217252077},{"_id":"public/lib/fancybox/source/fancybox_sprite.png","hash":"17df19f97628e77be09c352bf27425faea248251","modified":1625217252077},{"_id":"public/lib/fancybox/source/[email protected]","hash":"30c58913f327e28f466a00f4c1ac8001b560aed8","modified":1625217252077},{"_id":"public/lib/font-awesome/css/font-awesome.css.map","hash":"1573904b82807abbb32c97a3632c6c6808eaac50","modified":1625217252077},{"_id":"public/lib/Han/dist/font/han-space.otf","hash":"07436f011b44051f61b8329c99de4bec64e86f4b","modified":1625217252077},{"_id":"public/lib/Han/dist/font/han-space.woff","hash":"7a635062b10bf5662ae1d218ba0980171005d060","modified":1625217252077},{"_id":"public/lib/Han/dist/font/han.otf","hash":"f1f6bb8f461f5672e000380195d3d2358a28494c","modified":1625217252077},{"_id":"public/lib/Han/dist/font/han.woff","hash":"f38ff9b2eecaa17b50b66aa2dae87e9e7436d195","modified":1625217252078},{"_id":"public/lib/Han/dist/font/han.woff2","hash":"623af3ed5423371ac136a4fe0e8cc7bb7396037a","modified":1625217252078},{"_id":"public/lib/fancybox/source/helpers/fancybox_buttons.png","hash":"e385b139516c6813dcd64b8fc431c364ceafe5f3","modified":1625217252078},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1625217253204},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1625217253217},{"_id":"public/js/src/affix.js","hash":"978e0422b5bf1b560236d8d10ebc1adcf66392e3","modified":1625217253238},{"_id":"public/js/src/algolia-search.js","hash":"b172f697ed339a24b1e80261075232978d164c35","modified":1625217253238},{"_id":"public/js/src/bootstrap.js","hash":"034bc8113e0966fe2096ba5b56061bbf10ef0512","modified":1625217253239},{"_id":"public/js/src/exturl.js","hash":"e42e2aaab7bf4c19a0c8e779140e079c6aa5c0b1","modified":1625217253239},{"_id":"public/js/src/hook-duoshuo.js","hash":"a6119070c0119f33e08b29da7d2cce2635eb40a0","modified":1625217253239},{"_id":"public/js/src/js.cookie.js","hash":"9b37973a90fd50e71ea91682265715e45ae82c75","modified":1625217253239},{"_id":"public/js/src/motion.js","hash":"754b294394f102c8fd9423a1789ddb1201677898","modified":1625217253239},{"_id":"public/js/src/post-details.js","hash":"a13f45f7aa8291cf7244ec5ba93907d119c5dbdd","modified":1625217253239},{"_id":"public/js/src/scroll-cookie.js","hash":"09dc828cbf5f31158ff6250d2bf7c3cde6365c67","modified":1625217253239},{"_id":"public/js/src/scrollspy.js","hash":"fe4da1b9fe73518226446f5f27d2831e4426fc35","modified":1625217253239},{"_id":"public/js/src/utils.js","hash":"dbdc3d1300eec7da9632608ebc0e5b697779dad7","modified":1625217253240},{"_id":"public/lib/algolia-instant-search/instantsearch.min.css","hash":"90ef19edc982645b118b095615838d9c5eaba0de","modified":1625217253240},{"_id":"public/lib/canvas-nest/canvas-nest.min.js","hash":"0387e75e23b1db108a755073fe52a0d03eb391a7","modified":1625217253240},{"_id":"public/lib/canvas-ribbon/canvas-ribbon.js","hash":"ff5915eb2596e890a2fc6697c864f861a1995ec0","modified":1625217253240},{"_id":"public/lib/fastclick/bower.json","hash":"4dcecf83afddba148464d5339c93f6d0aa9f42e9","modified":1625217253241},{"_id":"public/lib/font-awesome/bower.json","hash":"64394a2a9aa00f8e321d8daa5e51a420f0e96dad","modified":1625217253241},{"_id":"public/lib/jquery_lazyload/bower.json","hash":"ae3c3b61e6e7f9e1d7e3585ad854380ecc04cf53","modified":1625217253241},{"_id":"public/lib/jquery_lazyload/jquery.lazyload.js","hash":"481fd478650e12b67c201a0ea41e92743f8b45a3","modified":1625217253241},{"_id":"public/lib/jquery_lazyload/jquery.scrollstop.js","hash":"0e9a81785a011c98be5ea821a8ed7d411818cfd1","modified":1625217253242},{"_id":"public/lib/needsharebutton/needsharebutton.css","hash":"3ef0020a1815ca6151ea4886cd0d37421ae3695c","modified":1625217253242},{"_id":"public/lib/pace/pace-theme-barber-shop.min.css","hash":"ee0d51446cb4ffe1bb96bd7bc8c8e046dddfcf46","modified":1625217253242},{"_id":"public/lib/pace/pace-theme-big-counter.min.css","hash":"5b561dc328af4c4d512e20a76fe964d113a32ba8","modified":1625217253242},{"_id":"public/lib/pace/pace-theme-bounce.min.css","hash":"f6bdb9a785b7979dd8ec5c60e278af955ef1e585","modified":1625217253242},{"_id":"public/lib/pace/pace-theme-center-atom.min.css","hash":"dcf79c24fe5350fb73d8038573a104e73639e9d3","modified":1625217253243},{"_id":"public/lib/pace/pace-theme-center-circle.min.css","hash":"a4066769c78affbfbc5e30a600e2c7862cd532e0","modified":1625217253243},{"_id":"public/lib/pace/pace-theme-center-radar.min.css","hash":"ab7cba998bf4c03b13df342bf43647fa4f419783","modified":1625217253243},{"_id":"public/lib/pace/pace-theme-center-simple.min.css","hash":"67f44c947548bd4d77e7590d3f59e236cbf9e98a","modified":1625217253244},{"_id":"public/lib/pace/pace-theme-corner-indicator.min.css","hash":"b3c64c973f31884e3d8145989476707333406b9a","modified":1625217253244},{"_id":"public/lib/pace/pace-theme-flash.min.css","hash":"13ace22c40312d7bbd8d9c1e50eff897a7a497d8","modified":1625217253244},{"_id":"public/lib/pace/pace-theme-fill-left.min.css","hash":"0bec1e235a4a2cccda3f993b205424e1441a44ae","modified":1625217253245},{"_id":"public/lib/pace/pace-theme-loading-bar.min.css","hash":"7ee28875dfc1230d76c537f6605766e8d4011e9f","modified":1625217253245},{"_id":"public/lib/pace/pace-theme-mac-osx.min.css","hash":"9f2e7b51b084da407863826b25265b31150b3821","modified":1625217253245},{"_id":"public/lib/pace/pace-theme-minimal.min.css","hash":"9cd783cceb8a191f3c8b5d81f7a430ecc3e489d3","modified":1625217253246},{"_id":"public/lib/pace/pace.min.js","hash":"9944dfb7814b911090e96446cea4d36e2b487234","modified":1625217253247},{"_id":"public/lib/velocity/bower.json","hash":"0ef14e7ccdfba5db6eb3f8fc6aa3b47282c36409","modified":1625217253248},{"_id":"public/lib/velocity/velocity.ui.min.js","hash":"ed5e534cd680a25d8d14429af824f38a2c7d9908","modified":1625217253248},{"_id":"public/js/src/schemes/pisces.js","hash":"8050a5b2683d1d77238c5762b6bd89c543daed6e","modified":1625217253248},{"_id":"public/lib/fancybox/source/jquery.fancybox.css","hash":"5f163444617b6cf267342f06ac166a237bb62df9","modified":1625217253248},{"_id":"public/lib/fastclick/lib/fastclick.min.js","hash":"2cae0f5a6c5d6f3cb993015e6863f9483fc4de18","modified":1625217253248},{"_id":"public/lib/ua-parser-js/dist/ua-parser.min.js","hash":"38628e75e4412cc6f11074e03e1c6d257aae495b","modified":1625217253248},{"_id":"public/lib/ua-parser-js/dist/ua-parser.pack.js","hash":"214dad442a92d36af77ed0ca1d9092b16687f02f","modified":1625217253249},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-buttons.css","hash":"1a9d8e5c22b371fcc69d4dbbb823d9c39f04c0c8","modified":1625217253249},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-buttons.js","hash":"91e41741c2e93f732c82aaacec4cfc6e3f3ec876","modified":1625217253249},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-media.js","hash":"3bdf69ed2469e4fb57f5a95f17300eef891ff90d","modified":1625217253249},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css","hash":"4ac329c16a5277592fc12a37cca3d72ca4ec292f","modified":1625217253249},{"_id":"public/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js","hash":"53e194f4a72e649c04fb586dd57762b8c022800b","modified":1625217253249},{"_id":"public/lib/fastclick/README.html","hash":"287b2e24cae1f7d01877dda79b76c24f81123895","modified":1625217253250},{"_id":"public/lib/jquery_lazyload/CONTRIBUTING.html","hash":"a6358170d346af13b1452ac157b60505bec7015c","modified":1625217253250},{"_id":"public/lib/jquery_lazyload/README.html","hash":"bfb6e229fc36e493d45499b4ac30a7c298786ab4","modified":1625217253250},{"_id":"public/css/main.css","hash":"82d33f3467fc6c7d440503b31a470a264790f90a","modified":1625217253250},{"_id":"public/lib/needsharebutton/font-embedded.css","hash":"c39d37278c1e178838732af21bd26cd0baeddfe0","modified":1625217253250},{"_id":"public/lib/needsharebutton/needsharebutton.js","hash":"9885fd9bea5e7ebafc5b1de9d17be5e106248d96","modified":1625217253251},{"_id":"public/lib/three/canvas_lines.min.js","hash":"dce4a3b65f8bf958f973690caa7ec4952f353b0c","modified":1625217253251},{"_id":"public/lib/three/canvas_sphere.min.js","hash":"d8ea241a53c135a650f7335d2b6982b899fd58a9","modified":1625217253251},{"_id":"public/lib/three/three-waves.min.js","hash":"d968cba6b3a50b3626a02d67b544f349d83b147c","modified":1625217253251},{"_id":"public/lib/velocity/velocity.min.js","hash":"2f1afadc12e4cf59ef3b405308d21baa97e739c6","modified":1625217253252},{"_id":"public/lib/velocity/velocity.ui.js","hash":"6a1d101eab3de87527bb54fcc8c7b36b79d8f0df","modified":1625217253252},{"_id":"public/lib/jquery/index.js","hash":"41b4bfbaa96be6d1440db6e78004ade1c134e276","modified":1625217253252},{"_id":"public/lib/Han/dist/han.min.css","hash":"a0c9e32549a8b8cf327ab9227b037f323cdb60ee","modified":1625217253252},{"_id":"public/lib/Han/dist/han.min.js","hash":"f559c68a25065a14f47da954a7617d87263e409d","modified":1625217253252},{"_id":"public/lib/fancybox/source/jquery.fancybox.pack.js","hash":"53360764b429c212f424399384417ccc233bb3be","modified":1625217253252},{"_id":"public/lib/fancybox/source/jquery.fancybox.js","hash":"1cf3d47b5ccb7cb6e9019c64f2a88d03a64853e4","modified":1625217253252},{"_id":"public/lib/fastclick/lib/fastclick.js","hash":"06cef196733a710e77ad7e386ced6963f092dc55","modified":1625217253253},{"_id":"public/lib/font-awesome/css/font-awesome.css","hash":"0140952c64e3f2b74ef64e050f2fe86eab6624c8","modified":1625217253253},{"_id":"public/lib/font-awesome/css/font-awesome.min.css","hash":"512c7d79033e3028a9be61b540cf1a6870c896f8","modified":1625217253253},{"_id":"public/lib/Han/dist/han.js","hash":"e345397e0585c9fed1449e614ec13e0224acf2ab","modified":1625217253253},{"_id":"public/lib/Han/dist/han.css","hash":"bd40da3fba8735df5850956814e312bd7b3193d7","modified":1625217253253},{"_id":"public/lib/velocity/velocity.js","hash":"9f08181baea0cc0e906703b7e5df9111b9ef3373","modified":1625217253253},{"_id":"public/lib/algolia-instant-search/instantsearch.min.js","hash":"9ccc6f8144f54e86df9a3fd33a18368d81cf3a4f","modified":1625217253253},{"_id":"public/lib/three/three.min.js","hash":"73f4cdc17e51a72b9bf5b9291f65386d615c483b","modified":1625217253254},{"_id":"public/images/gitlab-config-cicd.png","hash":"e2226cabc7faa2e905bead82ae2406fffbaa2a8d","modified":1625217253254},{"_id":"public/images/gitlab-config-sshkey.png","hash":"ec9d640f5adb6612e5daf23bec1eb98d76cf1daa","modified":1625217253255},{"_id":"public/images/gitlab-runner.png","hash":"31265443957e9e2167d0974969c4676d03dbe63c","modified":1625217253255},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1625217253256},{"_id":"public/lib/font-awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1625217253257},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1625217253257},{"_id":"public/lib/font-awesome/fonts/fontawesome-webfont.svg","hash":"b5483b11f8ba213e733b5b8af9927a04fec996f6","modified":1625217253750}],"Category":[{"name":"工具","_id":"ckqm4dztr0003lcqd6qeomj4l"},{"name":"CI/CD","_id":"ckqm4dztx0006lcqdq7v1wisi"},{"name":"数据迁移","_id":"ckqm4dztz000alcqd60e1vbke"}],"Data":[],"Page":[{"title":"categories","date":"2016-11-11T02:13:10.000Z","type":"categories","_content":"","source":"categories/index.md","raw":"---\ntitle: categories\ndate: 2016-11-11 10:13:10\ntype: \"categories\"\n---","updated":"2021-07-02T08:35:38.459Z","path":"categories/index.html","comments":1,"layout":"page","_id":"ckqm4dztm0001lcqds8mog19g","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"tags","date":"2016-11-11T02:14:54.000Z","type":"tags","_content":"","source":"tags/index.md","raw":"---\ntitle: tags\ndate: 2016-11-11 10:14:54\ntype: \"tags\"\n---\n","updated":"2021-07-02T08:35:38.465Z","path":"tags/index.html","comments":1,"layout":"page","_id":"ckqm4dzzn000glcqdixldp4ys","content":"","site":{"data":{}},"excerpt":"","more":""}],"Post":[{"title":"GIT凭据","date":"2021-07-02T09:06:28.000Z","_content":"\n\n# 查看凭证\n\n```shell\ngit config --global credential.helper\n\nmanager\n```\n* manager 这种方式,在windows环境下会被window凭证管理\n* store git凭证会默认创建在`cat ~/.git-credentials`文件下\n\n\n# 参阅资料\n* https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8","source":"_posts/GIT凭据.md","raw":"---\ntitle: GIT凭据\ndate: 2021-07-02 17:06:28\ncategories:\n - 工具\ntags: \n - git\n---\n\n\n# 查看凭证\n\n```shell\ngit config --global credential.helper\n\nmanager\n```\n* manager 这种方式,在windows环境下会被window凭证管理\n* store git凭证会默认创建在`cat ~/.git-credentials`文件下\n\n\n# 参阅资料\n* https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8","slug":"GIT凭据","published":1,"updated":"2021-07-02T09:13:43.291Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ckqm4dztg0000lcqdg671rqpl","content":"<h1 id=\"查看凭证\"><a href=\"#查看凭证\" class=\"headerlink\" title=\"查看凭证\"></a>查看凭证</h1><figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git config --global credential.helper</span><br><span class=\"line\"></span><br><span class=\"line\">manager</span><br></pre></td></tr></table></figure>\n<ul>\n<li>manager 这种方式,在windows环境下会被window凭证管理</li>\n<li>store git凭证会默认创建在<code>cat ~/.git-credentials</code>文件下</li>\n</ul>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8\" target=\"_blank\" rel=\"noopener\">https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"查看凭证\"><a href=\"#查看凭证\" class=\"headerlink\" title=\"查看凭证\"></a>查看凭证</h1><figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git config --global credential.helper</span><br><span class=\"line\"></span><br><span class=\"line\">manager</span><br></pre></td></tr></table></figure>\n<ul>\n<li>manager 这种方式,在windows环境下会被window凭证管理</li>\n<li>store git凭证会默认创建在<code>cat ~/.git-credentials</code>文件下</li>\n</ul>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8\" target=\"_blank\" rel=\"noopener\">https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8</a></li>\n</ul>\n"},{"title":"GitLab 自动化构建","date":"2021-02-03T00:46:28.000Z","_content":"\n* GitLab `CI/CD` 是GitLab内置的工具,用于通过连续方法进行软件开发\n* `持续集成` 的工作原理是将小的代码块推送到Git存储库中托管的应用程序代码库中,并且每次推送都运行一系列脚本来构建,测试和验证代码更改,然后再将其合并到主分支中。\n* `GitLab Runner` 是一个开源项目,用于运作任务,并把结果发送回GitLab,它与GitLab CI一起使用。\n\n# 环境 \n* 服务器 CentOS 7 \n\n# GitLab 安装\n\n* 安装文档 \nhttps://about.gitlab.com/install/#centos-7\n\n* 修改配置文件\n```shell\nvi /etc/gitlab/gitlab.rb\nexternal_url 'http://192.168.235.128:9090'\nnginx['listen_port'] = 9090\n\nvi /var/opt/gitlab/nginx/conf/gitlab-http.conf\nserver {\n listen *:9090;\n server_name 192.168.235.128;\n```\n\n* 使配置生效\n```shell\ngitlab-ctl reconfigure\n```\n\n* 启动\n```shell\ngitlab-ctl start\n```\n\n# GitLab Runer 安装\n\n* 安装文档\n https://docs.gitlab.com/runner/install/linux-manually.html\n\n* 项目中配置\n 默认 gitlab-runner 安装使用 gitlab-runner 用户执行命令,这里会遇到用户权限问题,需要修改用户权限或者修改默认用户。\n\n 修改默认用户为 `root`\n ```shell\n sudo gitlab-runner uninstall\n sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner\n sudo gitlab-runner restart\n ```\n\n 查看用户是否修改成功\n ```shell\n [root@localhost ~]# ps aux | grep gitlab-runner\n root 1174 1.1 0.2 138140 20708 ? Ssl 08:22 3:51 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root\n root 17883 0.0 0.0 112828 984 pts/1 S+ 13:54 0:00 grep --color=auto gitlab-runner\n ```\n\n 对需要自动化构建的项目注册 gitlab-runner\n ```shell\n [root@localhost ~]# sudo gitlab-runner register\n Runtime platform arch=amd64 os=linux pid=16876 revision=738bbe5a version=13.3.1\n Running in system-mode.\n\n Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):\n ```\n\n ![值参考截图](/images/gitlab-runner.png '截图参考')\n \n 查看注册成功后的项目\n\n ```shell\n [root@localhost ~]# cat /etc/gitlab-runner/config.toml\n concurrent = 1\n check_interval = 0\n\n [session_server]\n session_timeout = 1800\n\n [[runners]]\n name = \"project-cicd --> settings --> ci/cd\"\n url = \"http://192.168.235.129:9090/\"\n token = \"4cc764522780c8f518a97f3dc508c7\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n\n [[runners]]\n name = \"fontend-cicd\"\n url = \"http://192.168.235.129:9090/\"\n token = \"4c97f60c414ea508e3c6733d2033a1\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n\n [[runners]]\n name = \"后端项目\"\n url = \"http://192.168.235.129:9090/\"\n token = \"0a183b8545b6d6364dcfe3635eee18\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n ```\n\n# 项目中新建 .gitlab-ci.yml 文件\n\n* 安装 sshpass ssh只能回车后输入密码登录\n ```shell\n yum -y install sshpass\n ```\n\n* 添加 ssh key 自动化执行脚本,clone项目避免输入用户名和密码;没有 ssh key 需要自己手动生成\n \n 获取 key\n ```shell\n cat ~/.ssh/id_rsa.pub\n ```\n\n 生成 key\n ```shell\n ssh-keygen -t rsa -C \"[email protected]\" -b 4096\n ```\n\n 配置 key\n ![值参考截图](/images/gitlab-config-sshkey.png '截图参考')\n\n* 设置变量 .yml 文件中会做 ssh 登录操作,像 password,ip 这些信息不便直接写在脚本中\n ![值参考截图](/images/gitlab-config-cicd.png '截图参考')\n\n* 前端 .yml 文件示例\n ```shell\n stages: # 分段\n - install\n - build\n - deploy-sit\n - deploy-prod\n cache: # 缓存\n paths:\n - node_modules\n - dist\n install-job:\n tags:\n - sit\n only: \n - sit\n - prod\n stage: install\n script:\n - cnpm install\n \n build-job:\n tags:\n - sit\n only: \n - sit\n - prod\n stage: build\n script:\n - npm run build\n deploy-sit-job:\n tags:\n - sit\n only: \n - sit\n stage: deploy-sit\n script:\n - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public\n \n deploy-prod-job:\n tags:\n - sit\n only: \n - prod\n stage: deploy-prod\n script:\n - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public\n ```\n\n* node 后端 .yml 文件示例\n ```shell\n stages: # 分段\n - deploy-sit\n - deploy-prod\n cache: # 缓存\n paths:\n - node_modules\n before_script:\n - sshpass -p $PASSWORD ssh $USERNAME@$IP -o StrictHostKeyChecking=no \n - cd ~\n - ([ -d /root/backend-cicd/app/public ] && mv /root/backend-cicd/app/public /root/public) || echo\n - rm -rf ./backend-cicd\n - git clone [email protected]:zhongs/backend-cicd.git\n - ([ -d /root/public ] && mv /root/public /root/backend-cicd/app/public) || echo\n - cd ./backend-cicd\n \n deploy-sit-job:\n tags:\n - backend-cicd\n only: \n - sit\n stage: deploy-sit\n script:\n - pwd\n - git checkout sit\n - cnpm install\n - npm run stop\n - npm run start-sit\n - exit\n \n deploy-prod-job:\n tags:\n - backend-cicd\n only: \n - prod\n stage: deploy-prod\n script:\n - pwd\n - git checkout prod\n - cnpm install\n - npm run stop\n - npm run start-prod\n - exit\n ```\n\n# 参阅资料\n* https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A","source":"_posts/自动化构建.md","raw":"---\ntitle: GitLab 自动化构建\ndate: 2021-02-03 08:46:28\ncategories:\n - CI/CD\ntags:\n - 部署\n---\n\n* GitLab `CI/CD` 是GitLab内置的工具,用于通过连续方法进行软件开发\n* `持续集成` 的工作原理是将小的代码块推送到Git存储库中托管的应用程序代码库中,并且每次推送都运行一系列脚本来构建,测试和验证代码更改,然后再将其合并到主分支中。\n* `GitLab Runner` 是一个开源项目,用于运作任务,并把结果发送回GitLab,它与GitLab CI一起使用。\n\n# 环境 \n* 服务器 CentOS 7 \n\n# GitLab 安装\n\n* 安装文档 \nhttps://about.gitlab.com/install/#centos-7\n\n* 修改配置文件\n```shell\nvi /etc/gitlab/gitlab.rb\nexternal_url 'http://192.168.235.128:9090'\nnginx['listen_port'] = 9090\n\nvi /var/opt/gitlab/nginx/conf/gitlab-http.conf\nserver {\n listen *:9090;\n server_name 192.168.235.128;\n```\n\n* 使配置生效\n```shell\ngitlab-ctl reconfigure\n```\n\n* 启动\n```shell\ngitlab-ctl start\n```\n\n# GitLab Runer 安装\n\n* 安装文档\n https://docs.gitlab.com/runner/install/linux-manually.html\n\n* 项目中配置\n 默认 gitlab-runner 安装使用 gitlab-runner 用户执行命令,这里会遇到用户权限问题,需要修改用户权限或者修改默认用户。\n\n 修改默认用户为 `root`\n ```shell\n sudo gitlab-runner uninstall\n sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner\n sudo gitlab-runner restart\n ```\n\n 查看用户是否修改成功\n ```shell\n [root@localhost ~]# ps aux | grep gitlab-runner\n root 1174 1.1 0.2 138140 20708 ? Ssl 08:22 3:51 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root\n root 17883 0.0 0.0 112828 984 pts/1 S+ 13:54 0:00 grep --color=auto gitlab-runner\n ```\n\n 对需要自动化构建的项目注册 gitlab-runner\n ```shell\n [root@localhost ~]# sudo gitlab-runner register\n Runtime platform arch=amd64 os=linux pid=16876 revision=738bbe5a version=13.3.1\n Running in system-mode.\n\n Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):\n ```\n\n ![值参考截图](/images/gitlab-runner.png '截图参考')\n \n 查看注册成功后的项目\n\n ```shell\n [root@localhost ~]# cat /etc/gitlab-runner/config.toml\n concurrent = 1\n check_interval = 0\n\n [session_server]\n session_timeout = 1800\n\n [[runners]]\n name = \"project-cicd --> settings --> ci/cd\"\n url = \"http://192.168.235.129:9090/\"\n token = \"4cc764522780c8f518a97f3dc508c7\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n\n [[runners]]\n name = \"fontend-cicd\"\n url = \"http://192.168.235.129:9090/\"\n token = \"4c97f60c414ea508e3c6733d2033a1\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n\n [[runners]]\n name = \"后端项目\"\n url = \"http://192.168.235.129:9090/\"\n token = \"0a183b8545b6d6364dcfe3635eee18\"\n executor = \"shell\"\n [runners.custom_build_dir]\n [runners.cache]\n [runners.cache.s3]\n [runners.cache.gcs]\n ```\n\n# 项目中新建 .gitlab-ci.yml 文件\n\n* 安装 sshpass ssh只能回车后输入密码登录\n ```shell\n yum -y install sshpass\n ```\n\n* 添加 ssh key 自动化执行脚本,clone项目避免输入用户名和密码;没有 ssh key 需要自己手动生成\n \n 获取 key\n ```shell\n cat ~/.ssh/id_rsa.pub\n ```\n\n 生成 key\n ```shell\n ssh-keygen -t rsa -C \"[email protected]\" -b 4096\n ```\n\n 配置 key\n ![值参考截图](/images/gitlab-config-sshkey.png '截图参考')\n\n* 设置变量 .yml 文件中会做 ssh 登录操作,像 password,ip 这些信息不便直接写在脚本中\n ![值参考截图](/images/gitlab-config-cicd.png '截图参考')\n\n* 前端 .yml 文件示例\n ```shell\n stages: # 分段\n - install\n - build\n - deploy-sit\n - deploy-prod\n cache: # 缓存\n paths:\n - node_modules\n - dist\n install-job:\n tags:\n - sit\n only: \n - sit\n - prod\n stage: install\n script:\n - cnpm install\n \n build-job:\n tags:\n - sit\n only: \n - sit\n - prod\n stage: build\n script:\n - npm run build\n deploy-sit-job:\n tags:\n - sit\n only: \n - sit\n stage: deploy-sit\n script:\n - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public\n \n deploy-prod-job:\n tags:\n - sit\n only: \n - prod\n stage: deploy-prod\n script:\n - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public\n ```\n\n* node 后端 .yml 文件示例\n ```shell\n stages: # 分段\n - deploy-sit\n - deploy-prod\n cache: # 缓存\n paths:\n - node_modules\n before_script:\n - sshpass -p $PASSWORD ssh $USERNAME@$IP -o StrictHostKeyChecking=no \n - cd ~\n - ([ -d /root/backend-cicd/app/public ] && mv /root/backend-cicd/app/public /root/public) || echo\n - rm -rf ./backend-cicd\n - git clone [email protected]:zhongs/backend-cicd.git\n - ([ -d /root/public ] && mv /root/public /root/backend-cicd/app/public) || echo\n - cd ./backend-cicd\n \n deploy-sit-job:\n tags:\n - backend-cicd\n only: \n - sit\n stage: deploy-sit\n script:\n - pwd\n - git checkout sit\n - cnpm install\n - npm run stop\n - npm run start-sit\n - exit\n \n deploy-prod-job:\n tags:\n - backend-cicd\n only: \n - prod\n stage: deploy-prod\n script:\n - pwd\n - git checkout prod\n - cnpm install\n - npm run stop\n - npm run start-prod\n - exit\n ```\n\n# 参阅资料\n* https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A","slug":"自动化构建","published":1,"updated":"2021-07-02T08:35:38.458Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ckqm4dzto0002lcqdiqjjb69i","content":"<ul>\n<li>GitLab <code>CI/CD</code> 是GitLab内置的工具,用于通过连续方法进行软件开发</li>\n<li><code>持续集成</code> 的工作原理是将小的代码块推送到Git存储库中托管的应用程序代码库中,并且每次推送都运行一系列脚本来构建,测试和验证代码更改,然后再将其合并到主分支中。</li>\n<li><code>GitLab Runner</code> 是一个开源项目,用于运作任务,并把结果发送回GitLab,它与GitLab CI一起使用。</li>\n</ul>\n<h1 id=\"环境\"><a href=\"#环境\" class=\"headerlink\" title=\"环境\"></a>环境</h1><ul>\n<li>服务器 CentOS 7 </li>\n</ul>\n<h1 id=\"GitLab-安装\"><a href=\"#GitLab-安装\" class=\"headerlink\" title=\"GitLab 安装\"></a>GitLab 安装</h1><ul>\n<li><p>安装文档<br><a href=\"https://about.gitlab.com/install/#centos-7\" target=\"_blank\" rel=\"noopener\">https://about.gitlab.com/install/#centos-7</a></p>\n</li>\n<li><p>修改配置文件</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vi /etc/gitlab/gitlab.rb</span><br><span class=\"line\">external_url 'http://192.168.235.128:9090'</span><br><span class=\"line\">nginx['listen_port'] = 9090</span><br><span class=\"line\"></span><br><span class=\"line\">vi /var/opt/gitlab/nginx/conf/gitlab-http.conf</span><br><span class=\"line\">server {</span><br><span class=\"line\"> listen *:9090;</span><br><span class=\"line\"> server_name 192.168.235.128;</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>使配置生效</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">gitlab-ctl reconfigure</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>启动</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">gitlab-ctl start</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"GitLab-Runer-安装\"><a href=\"#GitLab-Runer-安装\" class=\"headerlink\" title=\"GitLab Runer 安装\"></a>GitLab Runer 安装</h1><ul>\n<li><p>安装文档<br><a href=\"https://docs.gitlab.com/runner/install/linux-manually.html\" target=\"_blank\" rel=\"noopener\">https://docs.gitlab.com/runner/install/linux-manually.html</a></p>\n</li>\n<li><p>项目中配置<br>默认 gitlab-runner 安装使用 gitlab-runner 用户执行命令,这里会遇到用户权限问题,需要修改用户权限或者修改默认用户。</p>\n<p>修改默认用户为 <code>root</code></p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo gitlab-runner uninstall</span><br><span class=\"line\">sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner</span><br><span class=\"line\">sudo gitlab-runner restart</span><br></pre></td></tr></table></figure>\n<p>查看用户是否修改成功</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# ps aux | grep gitlab-runner</span><br><span class=\"line\">root 1174 1.1 0.2 138140 20708 ? Ssl 08:22 3:51 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root</span><br><span class=\"line\">root 17883 0.0 0.0 112828 984 pts/1 S+ 13:54 0:00 grep --color=auto gitlab-runner</span><br></pre></td></tr></table></figure>\n<p>对需要自动化构建的项目注册 gitlab-runner</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# sudo gitlab-runner register</span><br><span class=\"line\">Runtime platform arch=amd64 os=linux pid=16876 revision=738bbe5a version=13.3.1</span><br><span class=\"line\">Running in system-mode.</span><br><span class=\"line\"></span><br><span class=\"line\">Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):</span><br></pre></td></tr></table></figure>\n<p><img src=\"/images/gitlab-runner.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n<p>查看注册成功后的项目</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# cat /etc/gitlab-runner/config.toml</span><br><span class=\"line\">concurrent = 1</span><br><span class=\"line\">check_interval = 0</span><br><span class=\"line\"></span><br><span class=\"line\">[session_server]</span><br><span class=\"line\"> session_timeout = 1800</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"project-cicd --> settings --> ci/cd\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"4cc764522780c8f518a97f3dc508c7\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"fontend-cicd\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"4c97f60c414ea508e3c6733d2033a1\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"后端项目\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"0a183b8545b6d6364dcfe3635eee18\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"项目中新建-gitlab-ci-yml-文件\"><a href=\"#项目中新建-gitlab-ci-yml-文件\" class=\"headerlink\" title=\"项目中新建 .gitlab-ci.yml 文件\"></a>项目中新建 .gitlab-ci.yml 文件</h1><ul>\n<li><p>安装 sshpass ssh只能回车后输入密码登录</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum -y install sshpass</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>添加 ssh key 自动化执行脚本,clone项目避免输入用户名和密码;没有 ssh key 需要自己手动生成</p>\n<p>获取 key</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cat ~/.ssh/id_rsa.pub</span><br></pre></td></tr></table></figure>\n<p>生成 key</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-keygen -t rsa -C \"[email protected]\" -b 4096</span><br></pre></td></tr></table></figure>\n<p>配置 key<br><img src=\"/images/gitlab-config-sshkey.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n</li>\n<li><p>设置变量 .yml 文件中会做 ssh 登录操作,像 password,ip 这些信息不便直接写在脚本中<br><img src=\"/images/gitlab-config-cicd.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n</li>\n<li><p>前端 .yml 文件示例</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">stages: # 分段</span><br><span class=\"line\">- install</span><br><span class=\"line\">- build</span><br><span class=\"line\">- deploy-sit</span><br><span class=\"line\">- deploy-prod</span><br><span class=\"line\">cache: # 缓存</span><br><span class=\"line\"> paths:</span><br><span class=\"line\"> - node_modules</span><br><span class=\"line\"> - dist</span><br><span class=\"line\">install-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: install</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> </span><br><span class=\"line\">build-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: build</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - npm run build</span><br><span class=\"line\">deploy-sit-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> stage: deploy-sit</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-prod-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: deploy-prod</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>node 后端 .yml 文件示例</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">stages: # 分段</span><br><span class=\"line\">- deploy-sit</span><br><span class=\"line\">- deploy-prod</span><br><span class=\"line\">cache: # 缓存</span><br><span class=\"line\"> paths:</span><br><span class=\"line\"> - node_modules</span><br><span class=\"line\">before_script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD ssh $USERNAME@$IP -o StrictHostKeyChecking=no </span><br><span class=\"line\"> - cd ~</span><br><span class=\"line\"> - ([ -d /root/backend-cicd/app/public ] && mv /root/backend-cicd/app/public /root/public) || echo</span><br><span class=\"line\"> - rm -rf ./backend-cicd</span><br><span class=\"line\"> - git clone [email protected]:zhongs/backend-cicd.git</span><br><span class=\"line\"> - ([ -d /root/public ] && mv /root/public /root/backend-cicd/app/public) || echo</span><br><span class=\"line\"> - cd ./backend-cicd</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-sit-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - backend-cicd</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> stage: deploy-sit</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - pwd</span><br><span class=\"line\"> - git checkout sit</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> - npm run stop</span><br><span class=\"line\"> - npm run start-sit</span><br><span class=\"line\"> - exit</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-prod-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - backend-cicd</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: deploy-prod</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - pwd</span><br><span class=\"line\"> - git checkout prod</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> - npm run stop</span><br><span class=\"line\"> - npm run start-prod</span><br><span class=\"line\"> - exit</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A\" target=\"_blank\" rel=\"noopener\">https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<ul>\n<li>GitLab <code>CI/CD</code> 是GitLab内置的工具,用于通过连续方法进行软件开发</li>\n<li><code>持续集成</code> 的工作原理是将小的代码块推送到Git存储库中托管的应用程序代码库中,并且每次推送都运行一系列脚本来构建,测试和验证代码更改,然后再将其合并到主分支中。</li>\n<li><code>GitLab Runner</code> 是一个开源项目,用于运作任务,并把结果发送回GitLab,它与GitLab CI一起使用。</li>\n</ul>\n<h1 id=\"环境\"><a href=\"#环境\" class=\"headerlink\" title=\"环境\"></a>环境</h1><ul>\n<li>服务器 CentOS 7 </li>\n</ul>\n<h1 id=\"GitLab-安装\"><a href=\"#GitLab-安装\" class=\"headerlink\" title=\"GitLab 安装\"></a>GitLab 安装</h1><ul>\n<li><p>安装文档<br><a href=\"https://about.gitlab.com/install/#centos-7\" target=\"_blank\" rel=\"noopener\">https://about.gitlab.com/install/#centos-7</a></p>\n</li>\n<li><p>修改配置文件</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vi /etc/gitlab/gitlab.rb</span><br><span class=\"line\">external_url 'http://192.168.235.128:9090'</span><br><span class=\"line\">nginx['listen_port'] = 9090</span><br><span class=\"line\"></span><br><span class=\"line\">vi /var/opt/gitlab/nginx/conf/gitlab-http.conf</span><br><span class=\"line\">server {</span><br><span class=\"line\"> listen *:9090;</span><br><span class=\"line\"> server_name 192.168.235.128;</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>使配置生效</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">gitlab-ctl reconfigure</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>启动</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">gitlab-ctl start</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"GitLab-Runer-安装\"><a href=\"#GitLab-Runer-安装\" class=\"headerlink\" title=\"GitLab Runer 安装\"></a>GitLab Runer 安装</h1><ul>\n<li><p>安装文档<br><a href=\"https://docs.gitlab.com/runner/install/linux-manually.html\" target=\"_blank\" rel=\"noopener\">https://docs.gitlab.com/runner/install/linux-manually.html</a></p>\n</li>\n<li><p>项目中配置<br>默认 gitlab-runner 安装使用 gitlab-runner 用户执行命令,这里会遇到用户权限问题,需要修改用户权限或者修改默认用户。</p>\n<p>修改默认用户为 <code>root</code></p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo gitlab-runner uninstall</span><br><span class=\"line\">sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner</span><br><span class=\"line\">sudo gitlab-runner restart</span><br></pre></td></tr></table></figure>\n<p>查看用户是否修改成功</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# ps aux | grep gitlab-runner</span><br><span class=\"line\">root 1174 1.1 0.2 138140 20708 ? Ssl 08:22 3:51 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root</span><br><span class=\"line\">root 17883 0.0 0.0 112828 984 pts/1 S+ 13:54 0:00 grep --color=auto gitlab-runner</span><br></pre></td></tr></table></figure>\n<p>对需要自动化构建的项目注册 gitlab-runner</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# sudo gitlab-runner register</span><br><span class=\"line\">Runtime platform arch=amd64 os=linux pid=16876 revision=738bbe5a version=13.3.1</span><br><span class=\"line\">Running in system-mode.</span><br><span class=\"line\"></span><br><span class=\"line\">Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):</span><br></pre></td></tr></table></figure>\n<p><img src=\"/images/gitlab-runner.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n<p>查看注册成功后的项目</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# cat /etc/gitlab-runner/config.toml</span><br><span class=\"line\">concurrent = 1</span><br><span class=\"line\">check_interval = 0</span><br><span class=\"line\"></span><br><span class=\"line\">[session_server]</span><br><span class=\"line\"> session_timeout = 1800</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"project-cicd --> settings --> ci/cd\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"4cc764522780c8f518a97f3dc508c7\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"fontend-cicd\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"4c97f60c414ea508e3c6733d2033a1\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br><span class=\"line\"></span><br><span class=\"line\">[[runners]]</span><br><span class=\"line\"> name = \"后端项目\"</span><br><span class=\"line\"> url = \"http://192.168.235.129:9090/\"</span><br><span class=\"line\"> token = \"0a183b8545b6d6364dcfe3635eee18\"</span><br><span class=\"line\"> executor = \"shell\"</span><br><span class=\"line\"> [runners.custom_build_dir]</span><br><span class=\"line\"> [runners.cache]</span><br><span class=\"line\"> [runners.cache.s3]</span><br><span class=\"line\"> [runners.cache.gcs]</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"项目中新建-gitlab-ci-yml-文件\"><a href=\"#项目中新建-gitlab-ci-yml-文件\" class=\"headerlink\" title=\"项目中新建 .gitlab-ci.yml 文件\"></a>项目中新建 .gitlab-ci.yml 文件</h1><ul>\n<li><p>安装 sshpass ssh只能回车后输入密码登录</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum -y install sshpass</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>添加 ssh key 自动化执行脚本,clone项目避免输入用户名和密码;没有 ssh key 需要自己手动生成</p>\n<p>获取 key</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cat ~/.ssh/id_rsa.pub</span><br></pre></td></tr></table></figure>\n<p>生成 key</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-keygen -t rsa -C \"[email protected]\" -b 4096</span><br></pre></td></tr></table></figure>\n<p>配置 key<br><img src=\"/images/gitlab-config-sshkey.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n</li>\n<li><p>设置变量 .yml 文件中会做 ssh 登录操作,像 password,ip 这些信息不便直接写在脚本中<br><img src=\"/images/gitlab-config-cicd.png\" alt=\"值参考截图\" title=\"截图参考\"></p>\n</li>\n<li><p>前端 .yml 文件示例</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">stages: # 分段</span><br><span class=\"line\">- install</span><br><span class=\"line\">- build</span><br><span class=\"line\">- deploy-sit</span><br><span class=\"line\">- deploy-prod</span><br><span class=\"line\">cache: # 缓存</span><br><span class=\"line\"> paths:</span><br><span class=\"line\"> - node_modules</span><br><span class=\"line\"> - dist</span><br><span class=\"line\">install-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: install</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> </span><br><span class=\"line\">build-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: build</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - npm run build</span><br><span class=\"line\">deploy-sit-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> stage: deploy-sit</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-prod-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: deploy-prod</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD scp -r ./dist/* $USER_NAME@$IP:/root/backend-cicd/app/public</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>node 后端 .yml 文件示例</p>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">stages: # 分段</span><br><span class=\"line\">- deploy-sit</span><br><span class=\"line\">- deploy-prod</span><br><span class=\"line\">cache: # 缓存</span><br><span class=\"line\"> paths:</span><br><span class=\"line\"> - node_modules</span><br><span class=\"line\">before_script:</span><br><span class=\"line\"> - sshpass -p $PASSWORD ssh $USERNAME@$IP -o StrictHostKeyChecking=no </span><br><span class=\"line\"> - cd ~</span><br><span class=\"line\"> - ([ -d /root/backend-cicd/app/public ] && mv /root/backend-cicd/app/public /root/public) || echo</span><br><span class=\"line\"> - rm -rf ./backend-cicd</span><br><span class=\"line\"> - git clone [email protected]:zhongs/backend-cicd.git</span><br><span class=\"line\"> - ([ -d /root/public ] && mv /root/public /root/backend-cicd/app/public) || echo</span><br><span class=\"line\"> - cd ./backend-cicd</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-sit-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - backend-cicd</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - sit</span><br><span class=\"line\"> stage: deploy-sit</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - pwd</span><br><span class=\"line\"> - git checkout sit</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> - npm run stop</span><br><span class=\"line\"> - npm run start-sit</span><br><span class=\"line\"> - exit</span><br><span class=\"line\"> </span><br><span class=\"line\">deploy-prod-job:</span><br><span class=\"line\"> tags:</span><br><span class=\"line\"> - backend-cicd</span><br><span class=\"line\"> only: </span><br><span class=\"line\"> - prod</span><br><span class=\"line\"> stage: deploy-prod</span><br><span class=\"line\"> script:</span><br><span class=\"line\"> - pwd</span><br><span class=\"line\"> - git checkout prod</span><br><span class=\"line\"> - cnpm install</span><br><span class=\"line\"> - npm run stop</span><br><span class=\"line\"> - npm run start-prod</span><br><span class=\"line\"> - exit</span><br></pre></td></tr></table></figure>\n</li>\n</ul>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A\" target=\"_blank\" rel=\"noopener\">https://mp.weixin.qq.com/s/vllbzDjE7sraZj9axk1u4A</a></li>\n</ul>\n"},{"title":"ali-oss 同步到 minio","date":"2021-02-02T03:29:39.000Z","_content":"\n* `Rclone` 是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。Rclone具有等效于unix命令rsync,cp,mv,mount,ls,ncdu,tree,rm和cat的强大的云功能。 Rclone熟悉的语法包括Shell管道支持和--dry-run保护。它可在命令行,脚本或通过其API使用。用户将rclone称为“云存储的瑞士军刀”和“与魔术不可区分的技术”。\n\n* `amazon (S3)` 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API 以编程方式实现与该服务的交互。\n\n# 环境\n* 服务器 CentOS 7 \n\n# rclone 安装\n\n```shell\ncurl https://rclone.org/install.sh | sudo bash\n```\n\n# 修改配置文件\n\n* `~/.config/rclone/rclone.conf`\n\n```shell\n[root@localhost ~]# cat .config/rclone/rclone.conf\n\n[oss-cn-beijing]\ntype = s3\nprovider = Alibaba\nenv_auth = false\naccess_key_id = <YOUR_ACCESS_KEY_ID> # 阿里云后台查看\nsecret_access_key = <YOUR_SECRET_ACCESS_KEY> # 阿里云后台查看\nendpoint = <YOUR_REGION>.aliyuncs.com # 阿里云后台查看\nacl = private\nstorage_class = Standard\n\n\n[minio]\ntype = s3\nenv_auth = false\naccess_key_id = minio \nsecret_access_key = minio123\nregion = us-east-1\nendpoint = http://127.0.0.1:9000\nlocation_constraint =\nserver_side_encryption =\n```\n\n# 同步\n* 将 ali-oss 同步到 minio `--transfers` 设置并发数量 `-P` 显示实时进度\n\n``` shell\nrclone sync -P oss-cn-beijing:bucket-test007 minio:test --transfers=10\n```\n\n# 参阅资料\n* https://rclone.org/\n* https://sunpma.com/864.html\n* https://yq.aliyun.com/articles/749107","source":"_posts/ali-oss-同步到-minio.md","raw":"---\ntitle: ali-oss 同步到 minio\ndate: 2021-02-02 11:29:39\ncategories:\n - 数据迁移\ntags: \n - minio\n---\n\n* `Rclone` 是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。Rclone具有等效于unix命令rsync,cp,mv,mount,ls,ncdu,tree,rm和cat的强大的云功能。 Rclone熟悉的语法包括Shell管道支持和--dry-run保护。它可在命令行,脚本或通过其API使用。用户将rclone称为“云存储的瑞士军刀”和“与魔术不可区分的技术”。\n\n* `amazon (S3)` 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API 以编程方式实现与该服务的交互。\n\n# 环境\n* 服务器 CentOS 7 \n\n# rclone 安装\n\n```shell\ncurl https://rclone.org/install.sh | sudo bash\n```\n\n# 修改配置文件\n\n* `~/.config/rclone/rclone.conf`\n\n```shell\n[root@localhost ~]# cat .config/rclone/rclone.conf\n\n[oss-cn-beijing]\ntype = s3\nprovider = Alibaba\nenv_auth = false\naccess_key_id = <YOUR_ACCESS_KEY_ID> # 阿里云后台查看\nsecret_access_key = <YOUR_SECRET_ACCESS_KEY> # 阿里云后台查看\nendpoint = <YOUR_REGION>.aliyuncs.com # 阿里云后台查看\nacl = private\nstorage_class = Standard\n\n\n[minio]\ntype = s3\nenv_auth = false\naccess_key_id = minio \nsecret_access_key = minio123\nregion = us-east-1\nendpoint = http://127.0.0.1:9000\nlocation_constraint =\nserver_side_encryption =\n```\n\n# 同步\n* 将 ali-oss 同步到 minio `--transfers` 设置并发数量 `-P` 显示实时进度\n\n``` shell\nrclone sync -P oss-cn-beijing:bucket-test007 minio:test --transfers=10\n```\n\n# 参阅资料\n* https://rclone.org/\n* https://sunpma.com/864.html\n* https://yq.aliyun.com/articles/749107","slug":"ali-oss-同步到-minio","published":1,"updated":"2021-07-02T08:35:38.457Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ckqm4dztu0005lcqdykdr2iv4","content":"<ul>\n<li><p><code>Rclone</code> 是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。Rclone具有等效于unix命令rsync,cp,mv,mount,ls,ncdu,tree,rm和cat的强大的云功能。 Rclone熟悉的语法包括Shell管道支持和–dry-run保护。它可在命令行,脚本或通过其API使用。用户将rclone称为“云存储的瑞士军刀”和“与魔术不可区分的技术”。</p>\n</li>\n<li><p><code>amazon (S3)</code> 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API 以编程方式实现与该服务的交互。</p>\n</li>\n</ul>\n<h1 id=\"环境\"><a href=\"#环境\" class=\"headerlink\" title=\"环境\"></a>环境</h1><ul>\n<li>服务器 CentOS 7 </li>\n</ul>\n<h1 id=\"rclone-安装\"><a href=\"#rclone-安装\" class=\"headerlink\" title=\"rclone 安装\"></a>rclone 安装</h1><figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl https://rclone.org/install.sh | sudo bash</span><br></pre></td></tr></table></figure>\n<h1 id=\"修改配置文件\"><a href=\"#修改配置文件\" class=\"headerlink\" title=\"修改配置文件\"></a>修改配置文件</h1><ul>\n<li><code>~/.config/rclone/rclone.conf</code></li>\n</ul>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# cat .config/rclone/rclone.conf</span><br><span class=\"line\"></span><br><span class=\"line\">[oss-cn-beijing]</span><br><span class=\"line\">type = s3</span><br><span class=\"line\">provider = Alibaba</span><br><span class=\"line\">env_auth = false</span><br><span class=\"line\">access_key_id = <YOUR_ACCESS_KEY_ID> # 阿里云后台查看</span><br><span class=\"line\">secret_access_key = <YOUR_SECRET_ACCESS_KEY> # 阿里云后台查看</span><br><span class=\"line\">endpoint = <YOUR_REGION>.aliyuncs.com # 阿里云后台查看</span><br><span class=\"line\">acl = private</span><br><span class=\"line\">storage_class = Standard</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">[minio]</span><br><span class=\"line\">type = s3</span><br><span class=\"line\">env_auth = false</span><br><span class=\"line\">access_key_id = minio </span><br><span class=\"line\">secret_access_key = minio123</span><br><span class=\"line\">region = us-east-1</span><br><span class=\"line\">endpoint = http://127.0.0.1:9000</span><br><span class=\"line\">location_constraint =</span><br><span class=\"line\">server_side_encryption =</span><br></pre></td></tr></table></figure>\n<h1 id=\"同步\"><a href=\"#同步\" class=\"headerlink\" title=\"同步\"></a>同步</h1><ul>\n<li>将 ali-oss 同步到 minio <code>--transfers</code> 设置并发数量 <code>-P</code> 显示实时进度</li>\n</ul>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rclone sync -P oss-cn-beijing:bucket-test007 minio:test --transfers=10</span><br></pre></td></tr></table></figure>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://rclone.org/\" target=\"_blank\" rel=\"noopener\">https://rclone.org/</a></li>\n<li><a href=\"https://sunpma.com/864.html\" target=\"_blank\" rel=\"noopener\">https://sunpma.com/864.html</a></li>\n<li><a href=\"https://yq.aliyun.com/articles/749107\" target=\"_blank\" rel=\"noopener\">https://yq.aliyun.com/articles/749107</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<ul>\n<li><p><code>Rclone</code> 是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。Rclone具有等效于unix命令rsync,cp,mv,mount,ls,ncdu,tree,rm和cat的强大的云功能。 Rclone熟悉的语法包括Shell管道支持和–dry-run保护。它可在命令行,脚本或通过其API使用。用户将rclone称为“云存储的瑞士军刀”和“与魔术不可区分的技术”。</p>\n</li>\n<li><p><code>amazon (S3)</code> 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API 以编程方式实现与该服务的交互。</p>\n</li>\n</ul>\n<h1 id=\"环境\"><a href=\"#环境\" class=\"headerlink\" title=\"环境\"></a>环境</h1><ul>\n<li>服务器 CentOS 7 </li>\n</ul>\n<h1 id=\"rclone-安装\"><a href=\"#rclone-安装\" class=\"headerlink\" title=\"rclone 安装\"></a>rclone 安装</h1><figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl https://rclone.org/install.sh | sudo bash</span><br></pre></td></tr></table></figure>\n<h1 id=\"修改配置文件\"><a href=\"#修改配置文件\" class=\"headerlink\" title=\"修改配置文件\"></a>修改配置文件</h1><ul>\n<li><code>~/.config/rclone/rclone.conf</code></li>\n</ul>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@localhost ~]# cat .config/rclone/rclone.conf</span><br><span class=\"line\"></span><br><span class=\"line\">[oss-cn-beijing]</span><br><span class=\"line\">type = s3</span><br><span class=\"line\">provider = Alibaba</span><br><span class=\"line\">env_auth = false</span><br><span class=\"line\">access_key_id = <YOUR_ACCESS_KEY_ID> # 阿里云后台查看</span><br><span class=\"line\">secret_access_key = <YOUR_SECRET_ACCESS_KEY> # 阿里云后台查看</span><br><span class=\"line\">endpoint = <YOUR_REGION>.aliyuncs.com # 阿里云后台查看</span><br><span class=\"line\">acl = private</span><br><span class=\"line\">storage_class = Standard</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">[minio]</span><br><span class=\"line\">type = s3</span><br><span class=\"line\">env_auth = false</span><br><span class=\"line\">access_key_id = minio </span><br><span class=\"line\">secret_access_key = minio123</span><br><span class=\"line\">region = us-east-1</span><br><span class=\"line\">endpoint = http://127.0.0.1:9000</span><br><span class=\"line\">location_constraint =</span><br><span class=\"line\">server_side_encryption =</span><br></pre></td></tr></table></figure>\n<h1 id=\"同步\"><a href=\"#同步\" class=\"headerlink\" title=\"同步\"></a>同步</h1><ul>\n<li>将 ali-oss 同步到 minio <code>--transfers</code> 设置并发数量 <code>-P</code> 显示实时进度</li>\n</ul>\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rclone sync -P oss-cn-beijing:bucket-test007 minio:test --transfers=10</span><br></pre></td></tr></table></figure>\n<h1 id=\"参阅资料\"><a href=\"#参阅资料\" class=\"headerlink\" title=\"参阅资料\"></a>参阅资料</h1><ul>\n<li><a href=\"https://rclone.org/\" target=\"_blank\" rel=\"noopener\">https://rclone.org/</a></li>\n<li><a href=\"https://sunpma.com/864.html\" target=\"_blank\" rel=\"noopener\">https://sunpma.com/864.html</a></li>\n<li><a href=\"https://yq.aliyun.com/articles/749107\" target=\"_blank\" rel=\"noopener\">https://yq.aliyun.com/articles/749107</a></li>\n</ul>\n"}],"PostAsset":[],"PostCategory":[{"post_id":"ckqm4dztg0000lcqdg671rqpl","category_id":"ckqm4dztr0003lcqd6qeomj4l","_id":"ckqm4dztz0009lcqdv2omjm7c"},{"post_id":"ckqm4dzto0002lcqdiqjjb69i","category_id":"ckqm4dztx0006lcqdq7v1wisi","_id":"ckqm4dzu1000dlcqdu4vdt0iz"},{"post_id":"ckqm4dztu0005lcqdykdr2iv4","category_id":"ckqm4dztz000alcqd60e1vbke","_id":"ckqm4dzu2000flcqdle950pzx"}],"PostTag":[{"post_id":"ckqm4dztg0000lcqdg671rqpl","tag_id":"ckqm4dztt0004lcqdr5m5hmw5","_id":"ckqm4dzty0008lcqd0foi3nyi"},{"post_id":"ckqm4dzto0002lcqdiqjjb69i","tag_id":"ckqm4dztx0007lcqds3bi5seb","_id":"ckqm4dzu0000clcqdav5ergmq"},{"post_id":"ckqm4dztu0005lcqdykdr2iv4","tag_id":"ckqm4dzu0000blcqd2j8ebze9","_id":"ckqm4dzu1000elcqd3wlhk53s"}],"Tag":[{"name":"git","_id":"ckqm4dztt0004lcqdr5m5hmw5"},{"name":"部署","_id":"ckqm4dztx0007lcqds3bi5seb"},{"name":"minio","_id":"ckqm4dzu0000blcqd2j8ebze9"}]}}