63 lines
26 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="x-dns-prefetch-control" content="on"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="renderer" content="webkit"><meta name="force-rendering" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="HandheldFriendly" content="True"><meta name="mobile-web-app-capable" content="yes"><link rel="shortcut icon" href="https://hans362-img.oss.0vv0.top/favicon.ico"><link rel="icon" type="image/png" sizes="16x16" href="https://hans362-img.oss.0vv0.top/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="https://hans362-img.oss.0vv0.top/favicon-32x32.png"><link rel="apple-touch-icon" sizes="180x180" href="https://hans362-img.oss.0vv0.top/apple-touch-icon.png"><link rel="mask-icon" href="https://hans362-img.oss.0vv0.top/safari-pinned-tab.svg"><title>Travis CI + Hexo 实现静态博客自动部署 | Hans362 &#39;s Blog</title><meta name="keywords" content="CI, 持续集成, Travis, Hexo, 静态博客, 自动部署, Hans362"><meta name="description" content="本文使用 MWeb Markdown 编辑器写于 iPad Air 2利用 iOS 端迄今为止最佳的可视化 Git 工具 Working Copy 提交至博客仓库,经 Travis CI 自动构建后自动发布至 GitHub Pages。 以上是我最理想的写博客的流程,而今天我终于实现啦!😆 众所周知,静态博客的一大特点就是没有管理后台,因此常规的操作流程一般是写文章-丢进_posts文件夹"><meta property="og:type" content="article"><meta property="og:title" content="Travis CI + Hexo 实现静态博客自动部署"><meta property="og:url" content="https://blog.hans362.cn/post/hexo-autobuild-with-travis-ci/"><meta property="og:site_name" content="Hans362 &#39;s Blog"><meta property="og:description" content="本文使用 MWeb Markdown 编辑器写于 iPad Air 2利用 iOS 端迄今为止最佳的可视化 Git 工具 Working Copy 提交至博客仓库,经 Travis CI 自动构建后自动发布至 GitHub Pages。 以上是我最理想的写博客的流程,而今天我终于实现啦!😆 众所周知,静态博客的一大特点就是没有管理后台,因此常规的操作流程一般是写文章-丢进_posts文件夹"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://hans362-img.oss.0vv0.top/2020/03/28/15853848385002.jpg?width=1920"><meta property="article:published_time" content="2020-03-28T09:40:22.000Z"><meta property="article:modified_time" content="2025-04-11T10:35:15.355Z"><meta property="article:author" content="Hans362"><meta property="article:tag" content="CI"><meta property="article:tag" content="持续集成"><meta property="article:tag" content="Travis"><meta property="article:tag" content="Hexo"><meta property="article:tag" content="静态博客"><meta property="article:tag" content="自动部署"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://hans362-img.oss.0vv0.top/2020/03/28/15853848385002.jpg?width=1920"><link rel="stylesheet" href="/css/style/main.css"><link rel="stylesheet" id="hl-default-theme" href="https://blog.hans362.cn/npm/highlight.js@10.1.2/styles/atom-one-light.css" media="none"><link rel="stylesheet" id="hl-dark-theme" href="https://blog.hans362.cn/npm/highlight.js@10.1.2/styles/atom-one-dark.css" media="none"><script src="/js/darkmode.js"></script><link rel="dns-prefetch" href="https://analytics.0vv0.top"><link rel="preconnect" href="https://hans362-img.oss.0vv0.top"><meta name="generator" content="Hexo 7.1.1"><link rel="alternate" href="/atom.xml" title="Hans362 's Blog" type="application/atom+xml"></head><body><div class="app-shell-loader">加载中...</div><div class="container" tabindex="-1"><header><div class="header__left"><a href="/" class="button"><span class="logo__text">Hans362 &#39;s Blog</span></a></div><div class="header__right"><div class="navbar__menus"><a href="/" class="button"><div class="navbar-menu">首页</div></a><a href="/archives/" class="button"><div class="navbar-menu">归档</div></a><a href="/tags/" class="button"><div class="navbar-menu">标签</div></a><a href="/bangumi/" class="button"><div class="navbar-menu">追番</div></a><a href="/links/" class="button"><div class="navbar-menu">友链</div></a><a href="/about/" class="button"><div class="navbar-menu">关于</div></a><a href="/atom.xml" class="button"><div class="navbar-menu">RSS</div></a></div><a href="/search/" class="button"><div id="btn-search"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="24" height="24" fill="currentColor" stroke="currentColor" stroke-width="32"><path d="M192 448c0-141.152 114.848-256 256-256s256 114.848 256 256-114.848 256-256 256-256-114.848-256-256z m710.624 409.376l-206.88-206.88A318.784 318.784 0 0 0 768 448c0-176.736-143.264-320-320-320S128 271.264 128 448s143.264 320 320 320a318.784 318.784 0 0 0 202.496-72.256l206.88 206.88 45.248-45.248z"></path></svg></div></a><a href="javaScript:void(0);" rel="external nofollow noreferrer" class="button"><div id="btn-toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></div></a><a href="#" class="button" id="b2t" aria-label="回到顶部" title="回到顶部"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="32" height="32"><path d="M233.376 722.752L278.624 768 512 534.624 745.376 768l45.248-45.248L512 444.128zM192 352h640V288H192z" fill="currentColor"></path></svg> </a><a class="dropdown-icon button" tabindex="0"><div id="btn-dropdown"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="24" height="24" fill="none" stroke="currentColor" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M3.314,4.8h13.372c0.41,0,0.743-0.333,0.743-0.743c0-0.41-0.333-0.743-0.743-0.743H3.314c-0.41,0-0.743,0.333-0.743,0.743C2.571,4.467,2.904,4.8,3.314,4.8z M16.686,15.2H3.314c-0.41,0-0.743,0.333-0.743,0.743s0.333,0.743,0.743,0.743h13.372c0.41,0,0.743-0.333,0.743-0.743S17.096,15.2,16.686,15.2z M16.686,9.257H3.314c-0.41,0-0.743,0.333-0.743,0.743s0.333,0.743,0.743,0.743h13.372c0.41,0,0.743-0.333,0.743-0.743S17.096,9.257,16.686,9.257z"></path></svg></div></a><div class="dropdown-menus" id="dropdown-menus"><a href="/" class="dropdown-menu button">首页</a> <a href="/archives/" class="dropdown-menu button">归档</a> <a href="/tags/" class="dropdown-menu button">标签</a> <a href="/bangumi/" class="dropdown-menu button">追番</a> <a href="/links/" class="dropdown-menu button">友链</a> <a href="/about/" class="dropdown-menu button">关于</a> <a href="/atom.xml" class="dropdown-menu button">RSS</a></div></div></header><cover></cover><main><div class="post-content"><div class="post-title"><h1 class="post-title__text">Travis CI + Hexo 实现静态博客自动部署</h1><div class="post-title__meta"><a href="/archives/2020/03/" class="post-meta__date button">2020-03-28</a> <span class="separate-dot"></span> <a href="/categories/%E6%8A%80%E6%9C%AF%E5%90%91/" class="button"><span class="post-meta__cats">技术向</span></a><style>.post-meta__pv{color:var(--t-l);visibility:hidden;opacity:0;transition:.2s}</style><span class="separate-dot"></span> <span class="post-meta__pv"></span></div></div><aside class="post-side"><div class="post-side__toc"><div class="toc-title">文章目录</div><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90"><span class="toc-text">需求分析</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%96%B9%E6%A1%88%E8%AE%BE%E8%AE%A1"><span class="toc-text">方案设计</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC"><span class="toc-text">构建脚本</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#now-enjoy~"><span class="toc-text">Now, enjoy~</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5"><span class="toc-text">参考链接</span></a></li></ol></div></aside><a class="btn-toc button" id="btn-toc" tabindex="0"><svg viewBox="0 0 1024 1024" width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M128 256h64V192H128zM320 256h576V192H320zM128 544h64v-64H128zM320 544h576v-64H320zM128 832h64v-64H128zM320 832h576v-64H320z" fill="currentColor"></path></svg></a><div class="toc-menus" id="toc-menus"><div class="toc-title">文章目录</div><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90"><span class="toc-text">需求分析</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%96%B9%E6%A1%88%E8%AE%BE%E8%AE%A1"><span class="toc-text">方案设计</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC"><span class="toc-text">构建脚本</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#now-enjoy~"><span class="toc-text">Now, enjoy~</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5"><span class="toc-text">参考链接</span></a></li></ol></div><article class="post post__with-toc card"><div class="post__header"><img alt="Cover Image" class="lazy" src="https://hans362-img.oss.0vv0.top/2020/03/28/15853848385002.jpg?width=1920" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853848385002.jpg?width=1920"><div class="post__expire" id="post-expired-notify"><p><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" style="fill:#f5a623;stroke:#f5a623"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg> 本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。</p></div><script>(()=>{var e=Date.parse("2020-03-28"),t=(new Date).getTime(),t=Math.floor((t-e)/864e5);120<=t&&(document.querySelectorAll("#expire-date")[0].innerHTML=t,document.querySelectorAll("#post-expired-notify")[0].style.display="block")})()</script></div><div class="post__content"><html><head><script>var meting_api="https://api-v2.hans362.cn/vip/?server=:server&type=:type&id=:id&r=:r"</script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script></head><body><blockquote><p>本文使用 MWeb Markdown 编辑器写于 iPad Air 2利用 iOS 端迄今为止最佳的可视化 Git 工具 Working Copy 提交至博客仓库,经 Travis CI 自动构建后自动发布至 GitHub Pages。</p></blockquote><p>以上是我最理想的写博客的流程,而今天我终于实现啦!😆</p><p>众所周知,静态博客的一大特点就是没有管理后台,因此常规的操作流程一般是写文章-丢进_posts文件夹-手动执行构建-发布。事实上我也一直是这么干的,得益于 Coding 的 CloudStudio我至少可以不用电脑随时随地执行这套繁琐的操作觉得这样将就用着也还能接受。但是最近发现 CloudStudio 经常卡半天进不去,再加上 Coding 升级后混乱的用户体验(个人版、企业版、团队版、腾讯云开发者全部杂糅在一起),我还是决定放弃这套糟糕的流程。</p><p>所以,不如咱就试试让 Travis CI 替咱做掉这些繁琐的工作吧!</p><span id="more"></span><h2 id="需求分析"><a class="markdownIt-Anchor" href="#需求分析"></a> 需求分析</h2><p>我想要达到的最终目标是只需要向存放文章的仓库推送 Markdown 文件,就会自动触发 Travis CI 从文章仓库拉取文章,配置环境,自动生成静态文件,自动部署至 GitHub Pages也就是说我只要安安心心的写好文章并提交推送剩下的事情 Travis CI 都会帮我做好。</p><h2 id="方案设计"><a class="markdownIt-Anchor" href="#方案设计"></a> 方案设计</h2><p>首先需要两个 GitHub 公共仓库:</p><p>hexo-theme-hans362 //存放 Hexo 博客主题文件(基于 ICARUS 二次修改)<br>𠃊master //默认分支</p><p>文件结构:</p><p><img src="https://hans362-img.oss.0vv0.top/2020/03/28/15853825237235.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853825237235.jpg?width=1920" srcset="/loading.gif" alt=""></p><p><a target="_blank" rel="noopener" href="http://hans362.github.io">hans362.github.io</a> //博客主仓库<br>𠃊source //默认分支,存放 Markdown 文章和相关配置文件<br>𠃊master //GitHub Pages 分支,存放生成的静态文件</p><p>文件结构:</p><p><img src="https://hans362-img.oss.0vv0.top/2020/03/28/15853825371753.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853825371753.jpg?width=1920" srcset="/loading.gif" alt=""></p><p><img src="https://hans362-img.oss.0vv0.top/2020/03/28/15853825532780.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853825532780.jpg?width=1920" srcset="/loading.gif" alt=""></p><p>多分支的那个仓库 source 分支可以这样操作:</p><pre><code class="hljs vim">git init
git remote <span class="hljs-built_in">add</span> origin git@github.<span class="hljs-keyword">com</span>:hans362/hans362.github.io.git
git checkout --orphan <span class="hljs-keyword">source</span>
git <span class="hljs-built_in">add</span> .
git commit -<span class="hljs-keyword">m</span> <span class="hljs-string">"First commit"</span>
git push origin <span class="hljs-keyword">source</span>:<span class="hljs-keyword">source</span></code></pre><p>iPad 上写文章时只需要在 Working Copy 里 clone 主仓库下的 source 分支,写好文章后 commit + push 就完事啦~</p><h2 id="构建脚本"><a class="markdownIt-Anchor" href="#构建脚本"></a> 构建脚本</h2><p>重点其实是在这,在 Travis CI 能帮你干活之前你至少得先教会人家应该怎么做,对吧?(≧∇≦)</p><p>存放于主分支 source 下的 <code>.travis.yml</code> 就是你和 Travis CI 沟通的桥梁。</p><p>下面就是我的 <code>.travis.yml</code></p><pre><code class="hljs nestedtext"><span class="hljs-attribute">language</span><span class="hljs-punctuation">:</span> <span class="hljs-string">node_js</span>
<span class="hljs-attribute">node_js</span><span class="hljs-punctuation">:</span> <span class="hljs-string">lts/*</span>
<span class="hljs-attribute">branches</span><span class="hljs-punctuation">:</span>
<span class="hljs-attribute">only</span><span class="hljs-punctuation">:</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">source</span>
<span class="hljs-attribute">cache</span><span class="hljs-punctuation">:</span> <span class="hljs-string">npm</span>
<span class="hljs-attribute">before_install</span><span class="hljs-punctuation">:</span>
<span class="hljs-punctuation"></span>
<span class="hljs-comment"># 配置 Git 信息</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">git config --global user.name "Hans362"</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">git config --global user.email "i@hans362.cn"</span>
<span class="hljs-comment"># 赋予部署脚本可执行权限很重要不然你就会像我一样死活部署不上去w</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">chmod +x .travis/deploy.sh</span>
<span class="hljs-attribute">install</span><span class="hljs-punctuation">:</span>
<span class="hljs-punctuation"></span>
<span class="hljs-comment"># 检测主题是否存在,不存在就 clone 一个</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">if [ ! -d "themes/icarus" ]; then git clone ${THEME} themes/icarus; fi</span>
<span class="hljs-comment"># 安装依赖</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">npm install</span>
<span class="hljs-attribute">script</span><span class="hljs-punctuation">:</span>
<span class="hljs-punctuation"></span>
<span class="hljs-comment"># Hexo 生成静态页面</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">hexo clean</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">hexo generate</span>
<span class="hljs-attribute">after_success</span><span class="hljs-punctuation">:</span>
<span class="hljs-punctuation"></span>
<span class="hljs-comment"># 部署(这里把部署的操作单独写到了另一个脚本文件里)</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">.travis/deploy.sh</span>
<span class="hljs-comment"># 环境变量</span>
<span class="hljs-attribute">env</span><span class="hljs-punctuation">:</span>
<span class="hljs-attribute">global</span><span class="hljs-punctuation">:</span>
<span class="hljs-comment"># 主仓库地址</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">GH_REF: https://hans362:${GITHUB_TOKEN}@github.com/hans362/hans362.github.io.git</span>
<span class="hljs-comment"># 主题仓库地址</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">THEME: https://hans362:${GITHUB_TOKEN}@github.com/hans362/hexo-theme-hans362.git</span></code></pre><p>因为我把部署脚本单独拎出来了,所以还需要在 source 分支下创建一个 .travis 文件夹,里面写好 <code>deploy.sh</code> 脚本:</p><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span>
<span class="hljs-built_in">set</span> -ev
<span class="hljs-comment"># 设置时区</span>
<span class="hljs-built_in">export</span> TZ=<span class="hljs-string">'Asia/Shanghai'</span>
<span class="hljs-comment"># 先 clone 避免 force commit</span>
git <span class="hljs-built_in">clone</span> -b master <span class="hljs-variable">${GH_REF}</span> .deploy_git
<span class="hljs-built_in">cd</span> .deploy_git
git checkout master
<span class="hljs-built_in">mv</span> .git/ ../public/
<span class="hljs-built_in">cd</span> ../public
git add .
git commit -m <span class="hljs-string">"Site updated: `date +"</span>%Y-%m-%d %H:%M:%S<span class="hljs-string">"`"</span>
<span class="hljs-comment"># 推送到主仓库的 master 分支</span>
git push origin master:master --force --quiet</code></pre><p>然后细心的你可能发现了上面配置文件中有两个 <code>${GITHUB_TOKEN}</code>,这里应该填写你的 GitHub Personal Access Token不知道这是啥的自行解决总之需要生成一个并且牢牢记住。当然我相信你不会笨到直接把脚本里的 <code>${GITHUB_TOKEN}</code> 替换成你的 TOKEN因为存放配置文件的仓库是向世界公开的这样做无疑于引狼入室。</p><p>正确做法就是把 <code>${GITHUB_TOKEN}</code> 原封不动的留在那,然后到 Travis CI 中设置环境变量,变量名为 GITHUB_TOKEN变量值为你牢牢记住的那个 TOKEN这样当代码运行至这一行时就可以从 Travis CI 中自动读取到你的 TOKEN 并完成替换。</p><p><img src="https://hans362-img.oss.0vv0.top/2020/03/28/15853840923226.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853840923226.jpg?width=1920" srcset="/loading.gif" alt=""></p><p>至此,构建脚本就配置完成了。</p><h2 id="now-enjoy~"><a class="markdownIt-Anchor" href="#now-enjoy~"></a> Now, enjoy~</h2><p>如果一切无误的话,你可以尝试推送一篇文章到主仓库的 source 分支,这会触发 Travis CI 按照你教TA的步骤完成后续的一系列操作你只需要静静地喝杯茶在一分钟后打开你的博客就可以看到你写的新文章啦</p><p><img src="https://hans362-img.oss.0vv0.top/2020/03/28/15853843896828.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2020/03/28/15853843896828.jpg?width=1920" srcset="/loading.gif" alt=""></p><h2 id="参考链接"><a class="markdownIt-Anchor" href="#参考链接"></a> 参考链接</h2><p>非常感谢以下文章作者~</p><ol><li><a target="_blank" rel="noopener" href="https://printempw.github.io/deploy-hexo-blog-automatically-with-travis-ci/">使用 Travis CI 自动部署 Hexo 博客</a></li><li><a target="_blank" rel="noopener" href="https://www.jianshu.com/p/f8fb2d949c95">使用Travis-CI持续构建Hexo博客</a></li></ol></body></html></div><div class="license"><div class="license-title">Travis CI + Hexo 实现静态博客自动部署</div><div class="license-link"><a href="https://blog.hans362.cn/post/hexo-autobuild-with-travis-ci/">https://blog.hans362.cn/post/hexo-autobuild-with-travis-ci/</a></div><div class="license-meta"><div class="license-meta-item"><div class="license-meta-title">本文作者</div><div class="license-meta-text">Hans362</div></div><div class="license-meta-item"><div class="license-meta-title">最后更新</div><div class="license-meta-text">2020-03-28</div></div><div class="license-meta-item"><div class="license-meta-title">许可协议</div><div class="license-meta-text"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" rel="nofollow noopener noreferrer" target="_blank">CC BY-NC-SA 4.0</a></div></div></div><div>转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!</div></div><div class="post-footer__cats"><a href="/categories/%E6%8A%80%E6%9C%AF%E5%90%91/" class="post-cats__link button">技术向</a><a href="/tags/CI/" class="post-tags__link button"># CI</a><a href="/tags/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/" class="post-tags__link button"># 持续集成</a><a href="/tags/Travis/" class="post-tags__link button"># Travis</a><a href="/tags/Hexo/" class="post-tags__link button"># Hexo</a><a href="/tags/%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2/" class="post-tags__link button"># 静态博客</a><a href="/tags/%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/" class="post-tags__link button"># 自动部署</a></div></article><div class="nav"><div class="nav__prev"><a href="/post/thinkpad-x201s-hackintosh/" class="nav__link"><div><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M589.088 790.624L310.464 512l278.624-278.624 45.248 45.248L400.96 512l233.376 233.376z" fill="#808080"></path></svg></div><div><div class="nav__label">上一篇</div><div class="nav__title">ThinkPad X201s 黑苹果安装记录</div></div></a></div><div class="nav__next"><a href="/post/thinkpad-x201s-ssd/" class="nav__link"><div><div class="nav__label">下一篇</div><div class="nav__title">ThinkPad X201s 固态硬盘升级记</div></div><div><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M434.944 790.624l-45.248-45.248L623.04 512l-233.376-233.376 45.248-45.248L713.568 512z" fill="#808080"></path></svg></div></a></div></div><div class="post__sponsers card"><div class="sponser-label">喜欢这篇文章吗?考虑支持一下作者吧~</div><a class="sponser-button button" href="https://afdian.net/@hans362" rel="external nofollow noreferrer" target="_blank" data-type="afdian">爱发电</a> <a class="sponser-button button" data-type="alipay">支付宝<img class="sponser-qrcode" src="https://hans362-img.oss.0vv0.top/2021/08/05/68281340.jpg"></a></div><div class="post__comments post__with-toc card" id="comment"><h4>评论</h4><div id="disqus_thread">您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。</div></div></div></main><footer><p class="footer-copyright">Copyright © 2017&nbsp;-&nbsp;2025 <a href="/">Hans362 &#39;s Blog</a></p><p>Powered by <a href="https://hexo.io" target="_blank">Hexo</a> | Theme - <a href="https://github.com/ChrAlpha/hexo-theme-cards" target="_blank">Cards</a></p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8746554831230893" data-ad-slot="6356225601" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle=window.adsbygoogle||[]).push({})</script></footer></div><script defer src="https://blog.hans362.cn/npm/vanilla-lazyload@17.8.3/dist/lazyload.min.js"></script><script>window.lazyLoadOptions={elements_selector:".lazy"}</script><script async defer data-website-id="5d181692-8a81-4c20-a282-cee87a6b90ef" src="https://analytics.0vv0.top/vue.js"></script><script src="/js/pageviews.js"></script><link rel="stylesheet" href="https://blog.hans362.cn/npm/katex@0.16.0/dist/katex.min.css" crossorigin="anonymous"><script>function loadComment(){let n,e;(n=document.createElement("script")).src="https://blog.hans362.cn/js/disqus.js",document.body.appendChild(n),n.onload=()=>{new DisqusJS({shortname:"hans362-s-blog",siteName:"Hans362 &#39;s Blog",api:"https://api-v3.hans362.cn/",apikey:"8Z1UVT4UOk22yNyk9MhpqQ0FLb27Hb1bpV066b4v9zOFie0GQ6VCoJ9TJwoGlCVF",admin:"hans362",identifier:"post/hexo-autobuild-with-travis-ci/",url:"https://blog.hans362.cn/post/hexo-autobuild-with-travis-ci/",nesting:"4"})},(e=document.createElement("link")).rel="stylesheet",e.href="https://blog.hans362.cn/css/disqusjs.css",document.head.appendChild(e)}var runningOnBrowser="undefined"!=typeof window,isBot=runningOnBrowser&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent),supportsIntersectionObserver=runningOnBrowser&&"IntersectionObserver"in window;setTimeout(function(){var e;!isBot&&supportsIntersectionObserver?(e=new IntersectionObserver(function(n){n[0].isIntersecting&&(loadComment(),e.disconnect())},{threshold:[0]})).observe(document.getElementById("comment")):loadComment()},1)</script></body></html>