|
|
<!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 '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 '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 '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 - 2025 <a href="/">Hans362 '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 '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> |