<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>实践案例</title>
    <link>https://llinux.cn/cicd/%E5%AE%9E%E8%B7%B5%E6%A1%88%E4%BE%8B/</link>
    <description>阿征的运维笔记</description>
    <language>zh</language>
    <atom:link href="https://llinux.cn/cicd/%E5%AE%9E%E8%B7%B5%E6%A1%88%E4%BE%8B/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>实现个人项目的自动化部署（GitHub Actions &#43; 阿里云ECS）</title>
      <link>https://llinux.cn/cicd/%E5%AE%9E%E8%B7%B5%E6%A1%88%E4%BE%8B/%E5%AE%9E%E7%8E%B0%E4%B8%AA%E4%BA%BA%E9%A1%B9%E7%9B%AE%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2github-actions-&#43;-%E9%98%BF%E9%87%8C%E4%BA%91ecs/</link>
      
      <guid>https://llinux.cn/cicd/%E5%AE%9E%E8%B7%B5%E6%A1%88%E4%BE%8B/%E5%AE%9E%E7%8E%B0%E4%B8%AA%E4%BA%BA%E9%A1%B9%E7%9B%AE%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2github-actions-&#43;-%E9%98%BF%E9%87%8C%E4%BA%91ecs/</guid>
      <description>&lt;h2 id=&#34;项目概述&#34;&gt;项目概述&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;之前每次写完项目笔记推送到 GitHub 后，我都得手动 SSH 登录到阿里云服务器，执行 &lt;code&gt;git pull&lt;/code&gt; 拉取最新代码，然后再重启相关的 Hugo 服务。这个过程虽然不难，但每次更新都要重复操作，比较麻烦。再加上国内云服务器拉取 GitHub 时经常遇到网络超时或连接重置，导致手动部署的体验极其糟糕。&lt;/p&gt;&#xA;&lt;p&gt;为了彻底解决这个痛点，我用 GitHub Actions 跑通了一套极简的自动化部署流程。现在只要将代码 push 到 &lt;code&gt;main&lt;/code&gt; 分支，流水线就会自动通过 SSH 登录服务器完成代码的强制同步和 Caddy 服务重启。为了应对偶尔的网络抽风，脚本里专门加了最大 5 次的超时重试机制，并且在整个流程结束后，还会把部署成功或报错的结果推送到我的 QQ 邮箱。&lt;/p&gt;&#xA;&lt;p&gt;下面是具体的实现方式。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;第一步在阿里云服务器配置-ssh-密钥登录&#34;&gt;第一步：在阿里云服务器配置 SSH 密钥登录&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e7%ac%ac%e4%b8%80%e6%ad%a5%e5%9c%a8%e9%98%bf%e9%87%8c%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%85%8d%e7%bd%ae-ssh-%e5%af%86%e9%92%a5%e7%99%bb%e5%bd%95&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;为了让 GitHub Actions 能够自动登录服务器并执行命令，需要配置免密登录。在阿里云服务器上执行以下命令：&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 准备存放密钥对的目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p github-actions-deploy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; github-actions-deploy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 生成一个专门用于部署的 SSH 密钥对，一路回车即可。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;github-actions-deploy&amp;#34;&lt;/span&gt; -f ./deploy_key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将生成的公钥（deploy_key.pub 的内容）追加到阿里云服务器的 /root/.ssh/authorized_keys 文件中。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat deploy_key.pub &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将私钥拷贝到一台服务器上测试免密登录（可选）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; deploy_key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -i ./deploy_key root@服务器IP&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;第二步配置-github-repository-secrets&#34;&gt;第二步：配置 GitHub Repository Secrets&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e9%85%8d%e7%bd%ae-github-repository-secrets&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;将服务器信息安全地存放在 GitHub 仓库中，避免硬编码。&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
