<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on Zayn's Blog</title><link>https://blog.treesir.pub/categories/devops/</link><description>Recent content in DevOps on Zayn's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>yangzun@treesir.pub (Zayn)</managingEditor><webMaster>yangzun@treesir.pub (Zayn)</webMaster><copyright>2021-2026 Zayn</copyright><lastBuildDate>Tue, 24 Mar 2026 23:45:00 +0800</lastBuildDate><atom:link href="https://blog.treesir.pub/categories/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>3 行 YAML 接入生产级 GitLab CI/CD：gitlab-ci-templates 实战</title><link>https://blog.treesir.pub/posts/gitlab-ci-templates-3-line-production-cicd/</link><pubDate>Tue, 24 Mar 2026 23:45:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-ci-templates-3-line-production-cicd/</guid><description>&lt;blockquote>
&lt;p>来源声明：本文基于开源仓库 &lt;code>cdryzun/gitlab-ci-templates&lt;/code> 的 README、目录结构与公开文档整理，重点提炼可直接落地的工程实践。&lt;/p>&lt;/blockquote>
&lt;p>很多团队在 GitLab CI/CD 上都踩过同一个坑：&lt;/p>
&lt;ul>
&lt;li>每个仓库维护一份独立流水线，重复劳动严重；&lt;/li>
&lt;li>语言一多（Java / Node.js / Python / Go），规则开始分裂；&lt;/li>
&lt;li>扫描、部署、回滚策略缺少统一治理。&lt;/li>
&lt;/ul>
&lt;p>这篇文章的核心目标很明确：&lt;strong>用一套可复用模板，把“能跑”升级成“可持续维护”。&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 class="relative group">一、3 行接入：把流水线从“项目资产”变成“平台能力”
&lt;div id="一3-行接入把流水线从项目资产变成平台能力" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%803-%e8%a1%8c%e6%8e%a5%e5%85%a5%e6%8a%8a%e6%b5%81%e6%b0%b4%e7%ba%bf%e4%bb%8e%e9%a1%b9%e7%9b%ae%e8%b5%84%e4%ba%a7%e5%8f%98%e6%88%90%e5%b9%b3%e5%8f%b0%e8%83%bd%e5%8a%9b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>最小接入：&lt;/p></description></item><item><title>Claude Code + GitLab pr-agent：AI 驱动的持续迭代开发实践</title><link>https://blog.treesir.pub/posts/claude-code-pr-agent-continuous-iteration/</link><pubDate>Mon, 16 Mar 2026 13:00:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/claude-code-pr-agent-continuous-iteration/</guid><description>32 个 MR 的真实案例，展示 Claude Code + GitLab CI + pr-agent 三位一体的 AI 驱动持续迭代开发工作流。</description></item><item><title>Docker 常用命令速查手册</title><link>https://blog.treesir.pub/posts/docker-commands-cheatsheet/</link><pubDate>Sun, 15 Mar 2026 18:30:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-commands-cheatsheet/</guid><description>&lt;h2 class="relative group">前言
&lt;div id="前言" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Docker 是现代 DevOps 工作流中不可或缺的容器化工具。本文整理了日常工作中最常用的 Docker 命令，方便快速查阅。&lt;/p>
&lt;h2 class="relative group">镜像管理
&lt;div id="镜像管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%95%9c%e5%83%8f%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看镜像
&lt;div id="查看镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image ls
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">搜索镜像
&lt;div id="搜索镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker search nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">拉取镜像
&lt;div id="拉取镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8b%89%e5%8f%96%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker pull nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker pull nginx:1.21
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除镜像
&lt;div id="删除镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rmi nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rmi &lt;span class="k">$(&lt;/span>docker images -q&lt;span class="k">)&lt;/span> &lt;span class="c1"># 删除所有镜像&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">导出/导入镜像
&lt;div id="导出导入镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%af%bc%e5%87%ba%e5%af%bc%e5%85%a5%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker save -o nginx.tar nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker load -i nginx.tar
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">容器管理
&lt;div id="容器管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%b9%e5%99%a8%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看容器
&lt;div id="查看容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker ps &lt;span class="c1"># 查看运行中的容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker ps -a &lt;span class="c1"># 查看所有容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker container ls &lt;span class="c1"># 同 docker ps&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">创建并启动容器
&lt;div id="创建并启动容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e5%b9%b6%e5%90%af%e5%8a%a8%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker run -d --name nginx -p 80:80 nginx:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -it --name centos centos:7 /bin/bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">启动/停止/重启容器
&lt;div id="启动停止重启容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%90%af%e5%8a%a8%e5%81%9c%e6%ad%a2%e9%87%8d%e5%90%af%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker start nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stop nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker restart nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">进入容器
&lt;div id="进入容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bf%9b%e5%85%a5%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> -it nginx /bin/bash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker attach nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器日志
&lt;div id="查看容器日志" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e6%97%a5%e5%bf%97" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker logs nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs -f nginx &lt;span class="c1"># 实时查看&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker logs --tail &lt;span class="m">100&lt;/span> nginx &lt;span class="c1"># 查看最后100行&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器详情
&lt;div id="查看容器详情" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e8%af%a6%e6%83%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker inspect nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看容器资源使用
&lt;div id="查看容器资源使用" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e5%ae%b9%e5%99%a8%e8%b5%84%e6%ba%90%e4%bd%bf%e7%94%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker stats
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker stats nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除容器
&lt;div id="删除容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rm nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm -f nginx &lt;span class="c1"># 强制删除运行中的容器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm &lt;span class="k">$(&lt;/span>docker ps -aq&lt;span class="k">)&lt;/span> &lt;span class="c1"># 删除所有容器&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">数据卷管理
&lt;div id="数据卷管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%95%b0%e6%8d%ae%e5%8d%b7%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">创建数据卷
&lt;div id="创建数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume create mydata
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">查看数据卷
&lt;div id="查看数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker volume inspect mydata
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除数据卷
&lt;div id="删除数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker volume rm mydata
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker volume prune &lt;span class="c1"># 删除未使用的数据卷&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">挂载数据卷
&lt;div id="挂载数据卷" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8c%82%e8%bd%bd%e6%95%b0%e6%8d%ae%e5%8d%b7" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker run -d -v mydata:/data nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d -v /host/path:/container/path nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">网络管理
&lt;div id="网络管理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%bd%91%e7%bb%9c%e7%ae%a1%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">查看网络
&lt;div id="查看网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9f%a5%e7%9c%8b%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker network inspect bridge
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">创建网络
&lt;div id="创建网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%9b%e5%bb%ba%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network create mynet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker network create --driver bridge mynet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">连接容器到网络
&lt;div id="连接容器到网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e5%ae%b9%e5%99%a8%e5%88%b0%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network connect mynet nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">断开容器网络
&lt;div id="断开容器网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%96%ad%e5%bc%80%e5%ae%b9%e5%99%a8%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network disconnect mynet nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">删除网络
&lt;div id="删除网络" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%88%a0%e9%99%a4%e7%bd%91%e7%bb%9c" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker network rm mynet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">系统清理
&lt;div id="系统清理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e6%b8%85%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">清理退出状态的容器
&lt;div id="清理退出状态的容器" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e9%80%80%e5%87%ba%e7%8a%b6%e6%80%81%e7%9a%84%e5%ae%b9%e5%99%a8" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker rm &lt;span class="k">$(&lt;/span>docker container ls -f &lt;span class="s2">&amp;#34;status=exited&amp;#34;&lt;/span> -q&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">清理未使用的镜像
&lt;div id="清理未使用的镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e6%9c%aa%e4%bd%bf%e7%94%a8%e7%9a%84%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker image prune
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker image prune -a &lt;span class="c1"># 删除所有未使用的镜像&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">一键清理
&lt;div id="一键清理" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%b8%80%e9%94%ae%e6%b8%85%e7%90%86" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker system prune
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker system prune -a &lt;span class="c1"># 包括镜像&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker system prune --volumes &lt;span class="c1"># 包括数据卷&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">Dockerfile 构建
&lt;div id="dockerfile-构建" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#dockerfile-%e6%9e%84%e5%bb%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">构建镜像
&lt;div id="构建镜像" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9e%84%e5%bb%ba%e9%95%9c%e5%83%8f" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker build -t myimage:v1 .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker build -t myimage:v1 -f Dockerfile.custom .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">Dockerfile 示例
&lt;div id="dockerfile-示例" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#dockerfile-%e7%a4%ba%e4%be%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-dockerfile" data-lang="dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="k">FROM&lt;/span>&lt;span class="s"> centos:7&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">LABEL&lt;/span> &lt;span class="nv">maintainer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;admin@example.com&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">RUN&lt;/span> yum install -y vim &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> yum clean all&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> app.py /app/&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">EXPOSE&lt;/span>&lt;span class="s"> 8080&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;python&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;app.py&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 class="relative group">容器转镜像（不推荐）
&lt;div id="容器转镜像不推荐" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%b9%e5%99%a8%e8%bd%ac%e9%95%9c%e5%83%8f%e4%b8%8d%e6%8e%a8%e8%8d%90" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker commit container_name image_name
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：不推荐使用 commit 创建镜像。建议使用 Dockerfile 构建镜像，因为 commit 创建的镜像不可复现。&lt;/p></description></item><item><title>Nexus3 PyPI 私服 Blob Storage 异常修复记录</title><link>https://blog.treesir.pub/posts/nexus3-pypi-blob-storage-fix/</link><pubDate>Thu, 22 Jul 2021 15:38:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/nexus3-pypi-blob-storage-fix/</guid><description>&lt;h2 class="relative group">问题描述
&lt;div id="问题描述" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98%e6%8f%8f%e8%bf%b0" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>在 DevOps 集成环境的测试环境中，发现多条 Pipeline 持续处于构建超时状态。初步排查以为是依赖版本兼容性问题导致 pip 无法找到合适版本，与开发团队联合排查后发现：开发环境正常，测试环境异常，且使用相同的代码和 Dockerfile 文件，排除了版本相关问题。具体错误表现如下：&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210721170700491" src="https://cdn.treesir.pub/img/image-20210721170700491.png">
&lt;/figure>
&lt;/p>
&lt;p>&lt;strong>检查 Nexus3 私服日志&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker logs -f --tail &lt;span class="m">100&lt;/span> nexus3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210721171037634" src="https://cdn.treesir.pub/img/image-20210721171037634.png">
&lt;/figure>
&lt;/p></description></item><item><title>使用 Docker Compose 部署 Nexus3 Docker 私服并配置 Traefik 代理</title><link>https://blog.treesir.pub/posts/nexus-use-traefik-proxy/</link><pubDate>Thu, 10 Jun 2021 09:51:36 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/nexus-use-traefik-proxy/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">软件版本
&lt;div id="软件版本" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>操作系统：CentOS 7.9.2009&lt;/li>
&lt;li>Docker 版本：20.10.7&lt;/li>
&lt;li>Docker Compose 版本：1.18.0&lt;/li>
&lt;li>Mkcert 版本：v1.4.3&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">端口规划
&lt;div id="端口规划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%ab%af%e5%8f%a3%e8%a7%84%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">Nexus 私服端口规划
&lt;div id="nexus-私服端口规划" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nexus-%e7%a7%81%e6%9c%8d%e7%ab%af%e5%8f%a3%e8%a7%84%e5%88%92" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>私服名称&lt;/th>
&lt;th>私服作用&lt;/th>
&lt;th>私服类型&lt;/th>
&lt;th>私服端口&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>docker-custom&lt;/td>
&lt;td>存放自定义 push 的镜像，与项目环境无关&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8086&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>idocker.io&lt;/td>
&lt;td>代理仓库和 custom 仓库的集合&lt;/td>
&lt;td>group&lt;/td>
&lt;td>8082&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-dev&lt;/td>
&lt;td>存放项目 dev 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8083&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-qa&lt;/td>
&lt;td>存放项目 qa 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8084&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>docker-prod&lt;/td>
&lt;td>存放项目 prod 环境镜像&lt;/td>
&lt;td>hosted&lt;/td>
&lt;td>8085&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>除了上述 Docker 私服端口外，还有 Nexus3 管理面板端口 8081&lt;/p></description></item><item><title>在 Kubernetes 中使用 localPv 部署 Gitlab</title><link>https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/</link><pubDate>Tue, 01 Jun 2021 10:13:29 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>Kubernetes Version: &lt;code>v1.20.4&lt;/code>&lt;/li>
&lt;li>Postgres Version: &lt;code>12.7&lt;/code>&lt;/li>
&lt;li>Redis Version: &lt;code>5.0.9&lt;/code>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>因在官方提供的 &lt;code>gitlab-ce&lt;/code> 镜像中，内置了 Postgres &amp;amp; Redis 的安装，在实际生产使用过程中，想让其连接使用外部统一的服务进行使用，来合理统一的管理，并有效降低对应资源使用率，这里使用 dokcer 非官方镜像: &lt;code>sameersbn/gitlab:13.12.1&lt;/code> 进行使用&lt;/p></description></item><item><title>Maven ReleasePlugin 的使用记录</title><link>https://blog.treesir.pub/posts/maven-release-plugin/</link><pubDate>Sun, 16 May 2021 17:52:05 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/maven-release-plugin/</guid><description>&lt;h2 class="relative group">&lt;code>maven&lt;/code> settings.xml 配置使用展示
&lt;div id="maven--settingsxml-配置使用展示" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#maven--settingsxml-%e9%85%8d%e7%bd%ae%e4%bd%bf%e7%94%a8%e5%b1%95%e7%a4%ba" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-xml" data-lang="xml">&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;settings&lt;/span> &lt;span class="na">xmlns=&lt;/span>&lt;span class="s">&amp;#34;http://maven.apache.org/SETTINGS/1.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xmlns:xsi=&lt;/span>&lt;span class="s">&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xsi:schemaLocation=&lt;/span>&lt;span class="s">&amp;#34;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- localRepository
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | The path to the local repository maven will use to store artifacts.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> |
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Default: ${user.home}/.m2/repository
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> &amp;lt;localRepository&amp;gt;/path/to/local/repo&amp;lt;/localRepository&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginGroups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- pluginGroup
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Specifies a further group identifier to use for plugin lookup.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> &amp;lt;pluginGroup&amp;gt;com.your.plugins&amp;lt;/pluginGroup&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginGroups&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- proxies
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | This is a list of proxies which can be used on this machine to connect to the network.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | Unless otherwise specified (by system property or command-line switch), the first proxy
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> | specification in this list marked as active will be used.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> |--&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;proxies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/proxies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-snapshot&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;username&amp;gt;&lt;/span>yangzun&lt;span class="nt">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;password&amp;gt;&lt;/span>12345678&lt;span class="nt">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-release&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;username&amp;gt;&lt;/span>yangzun&lt;span class="nt">&amp;lt;/username&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;password&amp;gt;&lt;/span>12345678&lt;span class="nt">&amp;lt;/password&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/server&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/servers&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrors&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-snapshot&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrorOf&amp;gt;&lt;/span>*&lt;span class="nt">&amp;lt;/mirrorOf&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>user-release&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;mirrorOf&amp;gt;&lt;/span>*&lt;span class="nt">&amp;lt;/mirrorOf&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirror&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/mirrors&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>nexus&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;repositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;repository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>central&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;name&amp;gt;&lt;/span>_nexus&lt;span class="nt">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub/&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/repository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/repositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginRepositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;pluginRepository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;id&amp;gt;&lt;/span>central&lt;span class="nt">&amp;lt;/id&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;name&amp;gt;&lt;/span>_nexus&lt;span class="nt">&amp;lt;/name&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;url&amp;gt;&lt;/span>http://mirror.treesir.pub/repository/maven-hub/&lt;span class="nt">&amp;lt;/url&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;releases&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/releases&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;snapshots&amp;gt;&amp;lt;enabled&amp;gt;&lt;/span>true&lt;span class="nt">&amp;lt;/enabled&amp;gt;&amp;lt;/snapshots&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginRepository&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/pluginRepositories&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/profile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/profiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;activeProfiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;activeProfile&amp;gt;&lt;/span>nexus&lt;span class="nt">&amp;lt;/activeProfile&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/activeProfiles&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/settings&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">插件打包的使用记录说明
&lt;div id="插件打包的使用记录说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8f%92%e4%bb%b6%e6%89%93%e5%8c%85%e7%9a%84%e4%bd%bf%e7%94%a8%e8%ae%b0%e5%bd%95%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>maven plugin 在打包过程中，是会基于当前分支，创建一个分支进行打包，并会将创建的分支 push 至远端。与 项目的 分支管理模式有所冲突，并不想push 至远端的话&lt;/p></description></item><item><title>Kind 部署本地k8s集群的使用记录</title><link>https://blog.treesir.pub/posts/first-kind/</link><pubDate>Sun, 15 Nov 2020 14:24:42 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/first-kind/</guid><description>&lt;h2 class="relative group">参考资料
&lt;div id="参考资料" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://github.com/kubernetes-sigs/kind"
target="_blank"
>Github 地址&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.tianfeiyu.com/2019/09/06/kind_deploy/"
target="_blank"
>参考博客&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">安装
&lt;div id="安装" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -Lo ./kind &lt;span class="s2">&amp;#34;https://kind.sigs.k8s.io/dl/v0.9.0/kind-&lt;/span>&lt;span class="k">$(&lt;/span>uname&lt;span class="k">)&lt;/span>&lt;span class="s2">-amd64&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod +x ./kind
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv ./kind /some-dir-in-your-PATH/kind
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">启动集群
&lt;div id="启动集群" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%90%af%e5%8a%a8%e9%9b%86%e7%be%a4" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>注意启动集群前 请确认 docker 服务是否启动&lt;/p></description></item><item><title>使用 helm 在 Kubernetes 中部署 Nexus 私服</title><link>https://blog.treesir.pub/posts/helm-k8s-deploy-nexus/</link><pubDate>Sun, 23 May 2021 15:50:31 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/helm-k8s-deploy-nexus/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>helm version: &lt;code>v3.3.1&lt;/code>&lt;/li>
&lt;li>kubernetes: &lt;code>v1.17.9&lt;/code>&lt;/li>
&lt;li>nexus: &lt;code>3.29.0&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">部署
&lt;div id="部署" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%83%a8%e7%bd%b2" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">准备 storageClass
&lt;div id="准备-storageclass" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%87%86%e5%a4%87-storageclass" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>非 &lt;code>必要&lt;/code> 操作，可以选择手动创建 pvc &amp;amp; pv，如果想部署 &lt;code>nfsStorageClass&lt;/code> 的话，请参考早期整理的 &lt;a
href="https://www.treesir.pub/post/k8s-nfs-strage-class/"
target="_blank"
>文档&lt;/a>。此篇文档实战部署步骤中基于 &lt;code>nfsStorageClass &lt;/code> 进行实现。如果是用于 &lt;code>生产环境&lt;/code> 的话，还是建议使用 ssd 或 iops 较高的 &lt;code>磁盘&lt;/code> 作为数据盘使用，数据盘管理方式可以使用 localPv or hostPath 绑定到对应节点进行运行。&lt;/p></description></item><item><title>企业级 Nexus3 制品仓库平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/docker-deploy-nexus3-upgrade/</link><pubDate>Tue, 22 Dec 2020 09:24:55 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-deploy-nexus3-upgrade/</guid><description>&lt;p>Nexus3 是世界领先的企业级制品仓库管理平台，为现代 DevOps 工具链提供统一的制品管理解决方案。本指南将从基础部署到企业级配置，全面介绍 Nexus3 的部署、配置、管理和运维最佳实践。&lt;/p>
&lt;h2 class="relative group">Nexus3 平台简介
&lt;div id="nexus3-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#nexus3-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Nexus3
&lt;div id="什么是-nexus3" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-nexus3" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Nexus Repository Manager 3 是由 Sonatype 公司开发的下一代制品仓库管理平台，作为 DevOps 工具链的核心组件，为软件开发生命周期提供统一的制品管理能力。&lt;/p></description></item><item><title>Docker 部署 OpenLDAP 统一身份认证服务</title><link>https://blog.treesir.pub/posts/docker-deploy-ldap/</link><pubDate>Fri, 18 Dec 2020 16:24:43 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/docker-deploy-ldap/</guid><description>&lt;h2 class="relative group">OpenLDAP 简介
&lt;div id="openldap-简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#openldap-%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 OpenLDAP
&lt;div id="什么是-openldap" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-openldap" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>OpenLDAP 是一个开源的轻量级目录访问协议（LDAP）实现，广泛用于企业级统一身份认证和目录服务。它提供了集中化的用户管理、身份验证和授权功能。&lt;/p></description></item><item><title>Git 使用问题的记录</title><link>https://blog.treesir.pub/posts/git-use-issue/</link><pubDate>Sun, 25 Apr 2021 10:35:57 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/git-use-issue/</guid><description>&lt;h2 class="relative group">&lt;strong>指定特定仓库拉取代码&lt;/strong>
&lt;div id="指定特定仓库拉取代码" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8c%87%e5%ae%9a%e7%89%b9%e5%ae%9a%e4%bb%93%e5%ba%93%e6%8b%89%e5%8f%96%e4%bb%a3%e7%a0%81" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git remote add origin https://github.com/demo/example.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull https://repo.csheidou.com/forestry_afterend/prevention_fire_test.git master
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch --set-upstream-to&lt;span class="o">=&lt;/span>origin/master
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git status
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>更改远程仓库地址&lt;/strong>
&lt;div id="更改远程仓库地址" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%9b%b4%e6%94%b9%e8%bf%9c%e7%a8%8b%e4%bb%93%e5%ba%93%e5%9c%b0%e5%9d%80" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git remote -v
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git remote set-url origin https://github.com/demo/example.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git pull origin master --allow-unrelated-histories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git push
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch --set-upstream-to&lt;span class="o">=&lt;/span>origin/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>清理本地错误的用户信息&lt;/strong>
&lt;div id="清理本地错误的用户信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%b8%85%e7%90%86%e6%9c%ac%e5%9c%b0%e9%94%99%e8%af%af%e7%9a%84%e7%94%a8%e6%88%b7%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">运行一下命令缓存输入的用户名和密码：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global credential.helper wincred
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">清除掉缓存在git中的用户名和密码
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git credential-manager uninstall
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h2 class="relative group">&lt;strong>解决 Windows git pull 卡住不动问题&lt;/strong>
&lt;div id="解决-windows-git-pull-卡住不动问题" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3-windows-git-pull-%e5%8d%a1%e4%bd%8f%e4%b8%8d%e5%8a%a8%e9%97%ae%e9%a2%98" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>原因 在 git clone 时后面仓库地址是非公开的 需要验证用户及密码 而windows 默认是已弹窗形式&lt;/p></description></item><item><title>企业级 GitLab 平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/gitlab-deploy/</link><pubDate>Thu, 04 Mar 2021 16:31:06 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-deploy/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/jenkins-install/">企业级 Jenkins CI/CD 平台部署与配置完整指南&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/">Kubernetes 环境下部署 GitLab：localPv + 外部数据库方案&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/spinnaker-helm-installd/">使用 Helm 部署 Spinnaker 持续部署(CD)平台&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">GitLab 平台简介
&lt;div id="gitlab-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#gitlab-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 GitLab
&lt;div id="什么是-gitlab" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-gitlab" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>GitLab 是一个基于 Web 的 DevOps 生命周期工具，提供了 Git 仓库管理、代码审查、问题跟踪、CI/CD 流水线和 Wiki 等功能。作为一个完整的 DevOps 平台，GitLab 帮助团队协作开发、测试和部署应用程序。&lt;/p></description></item><item><title>Python DevOps 完整实战指南</title><link>https://blog.treesir.pub/posts/python-fro-devops-notes/</link><pubDate>Thu, 05 Oct 2023 20:40:24 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/python-fro-devops-notes/</guid><description>&lt;p>Python 在 DevOps 领域扮演着重要角色，其简洁的语法、丰富的生态系统和强大的自动化能力使其成为运维自动化的首选语言。本指南将从 DevOps 理念开始，逐步深入到 Python 在各个 DevOps 场景中的实际应用，帮助您构建高效的自动化运维体系。&lt;/p>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="Python for DevOps 书籍封面" src="https://cdn.treesir.pub/images/2023/10/05/20231005204456.jpg">
&lt;/figure>
&lt;/p>
&lt;p>&lt;em>图：《Python for DevOps: Learn Ruthlessly Effective Automation》&lt;/em>&lt;/p>
&lt;h2 class="relative group">DevOps 理念与文化
&lt;div id="devops-理念与文化" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#devops-%e7%90%86%e5%bf%b5%e4%b8%8e%e6%96%87%e5%8c%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h3 class="relative group">什么是 DevOps
&lt;div id="什么是-devops" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-devops" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h3>
&lt;p>DevOps 是一种文化、实践和工具的组合，旨在提高组织快速交付应用程序和服务的能力。它强调开发（Development）和运维（Operations）团队之间的协作与沟通。&lt;/p></description></item><item><title>Argocd Cli Usage Tips</title><link>https://blog.treesir.pub/posts/argocd-cli-usage-tips/</link><pubDate>Mon, 24 Jul 2023 14:19:17 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/argocd-cli-usage-tips/</guid><description>&lt;h2 class="relative group">说明
&lt;div id="说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>此篇文档，用于记录在使用 &lt;code>ArgoCD CLi&lt;/code> 的过程中，所使用到的一些常用命令，&lt;code>且供参考&lt;/code>。&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 class="relative group">使用记录
&lt;div id="使用记录" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8%e8%ae%b0%e5%bd%95" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>ArgoCD cli &lt;a
href="https://argo-cd.readthedocs.io/en/stable/cli_installation/"
target="_blank"
>安装文档&lt;/a>，使用前，配置登录&lt;/p></description></item><item><title>Rke 集群集成 Kube-Vip 实现 Loadbalance Service 资源的使用</title><link>https://blog.treesir.pub/posts/rke-kubevip-loadbalance/</link><pubDate>Tue, 12 Oct 2021 13:44:45 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rke-kubevip-loadbalance/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;code>Kube-Vip&lt;/code> 最初是为 Kubernetes 控制平面提供 HA 解决方案而创建的，随着时间的推移，它已经发展为将相同的功能合并到 Kubernetes 的 LoadBalancer 类型的 Service 中。Kube-Vip &lt;code>特点&lt;/code> 如下：&lt;/p>
&lt;ul>
&lt;li>VIP 地址可以是 IPv4 或 IPv6&lt;/li>
&lt;li>带有 ARP（第2层）或 BGP（第3层）的控制平面&lt;/li>
&lt;li>使用领导选举或 &lt;code>raft&lt;/code> 控制平面&lt;/li>
&lt;li>带有 kubeadm（静态 Pod）的控制平面 HA&lt;/li>
&lt;li>带有 K3s/和其他（DaemonSets）的控制平面 HA&lt;/li>
&lt;li>使用 ARP 领导者选举的 Service LoadBalancer（第 2 层）&lt;/li>
&lt;li>通过 BGP 使用多个节点的 Service LoadBalancer&lt;/li>
&lt;li>每个命名空间或全局的 Service LoadBalancer 地址池&lt;/li>
&lt;li>Service LoadBalancer 地址通过 UPNP 暴露给网关&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>集群 master 节点一般不会很多，kube-vip 只需在 k8s 中的控制平面部署。这里使用方法采用 &lt;code>静态 pod&lt;/code> + &lt;code>ARP &lt;/code>来简单实现。在大规模的场景下可以尝试使用 BGP ，这需要相应的 BGP 服务来做支撑。&lt;/p></description></item><item><title>记录一次 JupyterLab 插件打包问题的修复</title><link>https://blog.treesir.pub/posts/pipeline-jupyter-labextension-build-fix/</link><pubDate>Tue, 20 Jul 2021 17:04:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/pipeline-jupyter-labextension-build-fix/</guid><description>&lt;h2 class="relative group">背景
&lt;div id="背景" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>在所关联项目 的 jenkins pipeline ci 流水线中，开发告诉我 生成的 pip 包中未有生成相关的 &lt;code>labextension&lt;/code> 依赖文件夹，导致 pip 包虽然是安装成功了，但仍是一个不可用的状态。开发人员告诉我在 &lt;code>linux&lt;/code> &amp;amp; &lt;code>windows&lt;/code> 环境下 均是可以正常生成相关依赖文件夹的，问我是不是哪里配置有点问题，思索了一下 和他说会不会是 jenkins slave 使用的 是 &lt;code>容器&lt;/code> 的原因？给了他一个启动命令，测试在容器里面生成一下包看看，启动命令如下所示:&lt;/p></description></item><item><title>使用 Kaniko 在 Kubernetes 中构建 Docker 镜像</title><link>https://blog.treesir.pub/posts/kaniko-image-build/</link><pubDate>Tue, 15 Jun 2021 10:02:48 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/kaniko-image-build/</guid><description>&lt;p>在 Kubernetes 环境中构建 Docker 镜像一直是一个挑战，传统的 Docker-in-Docker 方案存在安全风险和复杂性问题。Kaniko 作为 Google 开源的容器镜像构建工具，提供了一个安全、高效的解决方案。&lt;/p>
&lt;h2 class="relative group">什么是 Kaniko
&lt;div id="什么是-kaniko" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-kaniko" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Kaniko 是由 Google 开发的开源工具，专门用于在容器或 Kubernetes 集群内构建容器镜像。它的核心优势包括：&lt;/p></description></item><item><title>使用 Helm 部署 Spinnaker 持续部署(CD)平台</title><link>https://blog.treesir.pub/posts/spinnaker-helm-installd/</link><pubDate>Mon, 24 May 2021 16:33:49 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/spinnaker-helm-installd/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Kubernetes Version: &lt;code>v1.17.9&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>操作系统: &lt;code>CentOS 7.8.2003 &lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Helm Version: &lt;code>v3.2.1&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Spinnaker Version: &lt;code>1.26.3&lt;/code>&lt;/p>
&lt;blockquote>
&lt;p>&lt;a
href="https://spinnaker.io/community/releases/versions/"
target="_blank"
>spinnaker 版本说明&lt;/a>&lt;/p>&lt;/blockquote>
&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">spinnaker 组件说明
&lt;div id="spinnaker-组件说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#spinnaker-%e7%bb%84%e4%bb%b6%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Deck：前端web页面 端口9000&lt;/p></description></item><item><title>Rancher 开启监控后的，阈值告警配置说明 (三)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-third/</link><pubDate>Wed, 19 May 2021 08:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-third/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>此文档为 rancher &lt;code>monitor&lt;/code> 使用系列的 &lt;code>第三篇&lt;/code> ，主要介绍与 &lt;code>dingtalk&lt;/code> 关联配置告警通知、prometheus 告警阈值的配置使用&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">配置安装 dingtalk webhook
&lt;div id="配置安装-dingtalk-webhook" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e9%85%8d%e7%bd%ae%e5%ae%89%e8%a3%85-dingtalk-webhook" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://github.com/timonwong/prometheus-webhook-dingtalk"
target="_blank"
>webhook github 地址&lt;/a>&lt;/p></description></item><item><title>Rancher 开启监控，及生产应用的优化配置工作说明 (一)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-first/</link><pubDate>Mon, 17 May 2021 10:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-first/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>kubernetes version: &lt;code>v1.17.9&lt;/code>&lt;/li>
&lt;li>rancher dashboard: &lt;code>v2.3.5&lt;/code>&lt;/li>
&lt;li>操作系统: &lt;code>centos 7.8.2003 &lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">基础环境配置
&lt;div id="基础环境配置" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">使用 kubekey 部署 kubernetes 集群
&lt;div id="使用-kubekey-部署-kubernetes-集群" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8-kubekey-%e9%83%a8%e7%bd%b2-kubernetes-%e9%9b%86%e7%be%a4" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>由于篇幅原因，此处省略部署说明，请参考较早期的 &lt;a
href="http://hugo.blog:1313/post/kubekey-install-k8s/"
target="_blank"
>文档说明&lt;/a>&lt;/p></description></item><item><title>Rancher 开启监控后，exporter/metrics 的添加说明 (二)</title><link>https://blog.treesir.pub/posts/rancher-monitor-config-second/</link><pubDate>Mon, 17 May 2021 10:41:26 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/rancher-monitor-config-second/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>&lt;a
href="https://www.treesir.pub/post/rancher-monitor-config-first/"
target="_blank"
>&lt;code>上期&lt;/code>&lt;/a> 介绍了 &lt;code>rancher prometheus operator&lt;/code> 的安装和基础 targets 的修复工作。有的时候我们抓取的 exporter metrics 并不在同集群且与集群没有任何关联时，应该怎么和 rancher &lt;code>monitor&lt;/code> 进行关联配置呢？下面文档将配置展示部署外部 &lt;code>exporter &lt;/code>, 的安装说明、指标抓取、 和监控系统的关联。&lt;/p></description></item><item><title>Velero 备份迁移工具安装与配置</title><link>https://blog.treesir.pub/posts/velero-install/</link><pubDate>Sun, 16 May 2021 18:00:36 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/velero-install/</guid><description>&lt;h2 class="relative group">环境准备
&lt;div id="环境准备" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">安装基础依赖
&lt;div id="安装基础依赖" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e5%ae%89%e8%a3%85%e5%9f%ba%e7%a1%80%e4%be%9d%e8%b5%96" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>安装 Docker Compose：&lt;/p></description></item><item><title>GitLab Pre-receive 钩子的配置与使用指南</title><link>https://blog.treesir.pub/posts/gitlab-pre-receive-webhook/</link><pubDate>Mon, 12 Apr 2021 17:25:58 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-pre-receive-webhook/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">版本信息
&lt;div id="版本信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%89%88%e6%9c%ac%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>GitLab 版本：13.10.2&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>如需了解 GitLab 服务器安装方法，请参考 &lt;a
href="https://www.treesir.pub/post/gitlab-deploy/"
target="_blank"
>安装文档&lt;/a>。本文将详细介绍如何在 GitLab 中添加和配置 &lt;code>pre-receive&lt;/code> 钩子，并演示如何对 &lt;code>git push&lt;/code> 操作进行限制。&lt;/p></description></item><item><title>Gitlab 和 jira 之间的集成</title><link>https://blog.treesir.pub/posts/gitlab-integration-jira/</link><pubDate>Fri, 09 Apr 2021 15:52:44 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/gitlab-integration-jira/</guid><description>&lt;h2 class="relative group">环境说明
&lt;div id="环境说明" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e8%af%b4%e6%98%8e" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;blockquote>
&lt;p>Gitlab-ce 版本： 13.10.2&lt;/p>
&lt;p>Jira 版本：v8.13.4&lt;/p>&lt;/blockquote>
&lt;h2 class="relative group">Jira
&lt;div id="jira" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#jira" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">获取 工作流结束 id
&lt;div id="获取-工作流结束-id" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e8%8e%b7%e5%8f%96-%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%bb%93%e6%9d%9f-id" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>
&lt;figure>
&lt;img class="my-0 rounded-md" loading="lazy" alt="image-20210412165030920" src="https://cdn.treesir.pub/img/image-20210412165030920.png">
&lt;/figure>
&lt;/p></description></item><item><title>企业级 Prometheus 监控平台部署与运维完整指南</title><link>https://blog.treesir.pub/posts/prometheus/</link><pubDate>Tue, 09 Mar 2021 15:50:54 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/prometheus/</guid><description>&lt;h2 class="relative group">Prometheus 监控平台简介
&lt;div id="prometheus-监控平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#prometheus-%e7%9b%91%e6%8e%a7%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Prometheus
&lt;div id="什么是-prometheus" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-prometheus" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Prometheus 是由 SoundCloud 开发并贡献给 CNCF（Cloud Native Computing Foundation）的开源监控和告警系统。作为云原生监控的事实标准，Prometheus 为现代化的微服务架构和容器化环境提供了强大的监控能力。&lt;/p></description></item><item><title>企业级 Jenkins CI/CD 平台部署与配置完整指南</title><link>https://blog.treesir.pub/posts/jenkins-install/</link><pubDate>Tue, 02 Mar 2021 19:31:09 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/jenkins-install/</guid><description>&lt;h2 class="relative group">推荐阅读
&lt;div id="推荐阅读" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e9%98%85%e8%af%bb" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/gitlab-deploy/">企业级 GitLab 平台部署与运维完整指南&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/spinnaker-helm-installd/">使用 Helm 部署 Spinnaker 持续部署(CD)平台&lt;/a>&lt;/li>
&lt;li>&lt;a
href="https://blog.treesir.pub/posts/kubernetes-deploy-gitlab/">在 Kubernetes 中使用 localPv 部署 Gitlab&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 class="relative group">Jenkins 平台简介
&lt;div id="jenkins-平台简介" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#jenkins-%e5%b9%b3%e5%8f%b0%e7%ae%80%e4%bb%8b" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">什么是 Jenkins
&lt;div id="什么是-jenkins" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af-jenkins" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;p>Jenkins 是世界领先的开源自动化服务器，由 Kohsuke Kawaguchi 于 2004 年创建。作为 DevOps 工具链的核心组件，Jenkins 为软件开发生命周期提供了强大的自动化能力。&lt;/p></description></item><item><title>JIRA &amp; Confluence 完整安装配置指南</title><link>https://blog.treesir.pub/posts/jira-install/</link><pubDate>Sun, 21 Feb 2021 11:02:00 +0800</pubDate><author>yangzun@treesir.pub (Zayn)</author><guid>https://blog.treesir.pub/posts/jira-install/</guid><description>&lt;h2 class="relative group">系统环境要求
&lt;div id="系统环境要求" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;h2 class="relative group">环境信息
&lt;div id="环境信息" class="anchor">&lt;/div>
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100">
&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline" href="#%e7%8e%af%e5%a2%83%e4%bf%a1%e6%81%af" aria-label="锚点">#&lt;/a>
&lt;/span>
&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组件&lt;/th>
&lt;th>版本&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>操作系统&lt;/td>
&lt;td>CentOS 7+&lt;/td>
&lt;td>推荐使用 CentOS 7 或更高版本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>JIRA 版本&lt;/td>
&lt;td>8.13.4&lt;/td>
&lt;td>企业级项目管理工具&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据库&lt;/td>
&lt;td>MySQL 5.7&lt;/td>
&lt;td>存储 JIRA 数据&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Java 环境&lt;/td>
&lt;td>OpenJDK 1.8&lt;/td>
&lt;td>JIRA 运行环境&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>💡 &lt;strong>提示&lt;/strong>：可以访问 &lt;a
href="https://www.atlassian.com/zh/software/jira/download"
target="_blank"
>JIRA 官方下载页面&lt;/a> 查看最新版本信息&lt;/p></description></item></channel></rss>