<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.john5.work/</id>
    <title>卿之羽</title>
    <updated>2026-06-20T07:10:46.288Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>卿之羽</name>
        <uri>https://blog.john5.work</uri>
    </author>
    <link rel="alternate" href="https://blog.john5.work/"/>
    <subtitle>记录日常折腾的技术笔记。</subtitle>
    <logo>https://blog.john5.work/favicon-96x96.png</logo>
    <icon>https://blog.john5.work/favicon.ico</icon>
    <rights>CC BY-NC-ND 4.0 © 2021-2026 卿之羽</rights>
    <entry>
        <title type="html"><![CDATA[Aux空调接入home assistant]]></title>
        <id>aux-home-assistant</id>
        <link href="https://blog.john5.work/blog/aux-home-assistant/"/>
        <updated>2021-11-09T16:00:00.000Z</updated>
        <summary type="html"><![CDATA[通过 broadlink_ac_mqtt、Mosquitto 和 MQTT 自动发现，把奥克斯空调接入 Home Assistant 的记录。]]></summary>
        <content type="html"><![CDATA[<p><strong>插件原作者 Github <a href="https://web.archive.org/web/20250121082012/https://github.com/liaan/broadlink_ac_mqtt" rel="nofollow noopener noreferrer" target="_blank">broadlink_ac_mqtt</a></strong></p>
<section class="heading" data-heading-rank="2" aria-labelledby="前言"><h2 id="前言"><a href="#前言">前言</a></h2>
<p>奥克斯的官方的APP简直难用，延迟经常十来秒。</p>
<p>最近在折腾hass，官方集成好像不支持aux。</p>
<p>在路由器看到几台空调的主机名都是BroadLink_OEM-T1-XX-XX-XX类似的，猜测用的都是博联的集成方案。</p>
<p>一番搜索找了个还行的插件，特来分享安装过程。</p>
</section><section class="heading" data-heading-rank="2" aria-labelledby="步骤"><h2 id="步骤"><a href="#步骤">步骤</a></h2>
<section class="heading" data-heading-rank="3" aria-labelledby="1-安装-docker"><h3 id="1-安装-docker"><a href="#1-安装-docker">1. 安装 docker</a></h3>
<p>安装后确认命令</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">docker</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --version</span></span></code></pre><button type="button" data="docker --version" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section><section class="heading" data-heading-rank="3" aria-labelledby="2-安装mqtt-broker"><h3 id="2-安装mqtt-broker"><a href="#2-安装mqtt-broker">2. 安装MQTT broker</a></h3>
<ul>
<li>创建目录</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">mkdir</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -p</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/mosquitto/config</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">mkdir</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -p</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/mosquitto/data</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">mkdir</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -p</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/mosquitto/log</span></span></code></pre><button type="button" data="mkdir -p /docker/mosquitto/config
mkdir -p /docker/mosquitto/data
mkdir -p /docker/mosquitto/log" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>初始化配置文件</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">vi</span><span style="color:#032F62;--shiki-dark:#CE9178"> /mosquitto/config/mosquitto.conf</span></span></code></pre><button type="button" data="vi /mosquitto/config/mosquitto.conf" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>persistence true</span></span>
<span class="line"><span>persistence_location /mosquitto/data/</span></span>
<span class="line"><span>log_dest file /mosquitto/log/mosquitto.log</span></span>
<span class="line"><span></span></span>
<span class="line"><span>listener 1883</span></span>
<span class="line"><span># 关闭匿名模式</span></span>
<span class="line"><span>allow_anonymous false</span></span>
<span class="line"><span># 指定密码文件</span></span>
<span class="line"><span>password_file /mosquitto/config/pwfile.conf</span></span>
<span class="line"><span></span></span></code></pre><button type="button" data="persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

listener 1883
# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf
" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<p>6、运行</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">docker</span><span style="color:#032F62;--shiki-dark:#CE9178"> run</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -it</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --name=mosquitto</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --privileged</span><span style="color:#005CC5;--shiki-dark:#D7BA7D"> \</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">-p </span><span style="color:#032F62;--shiki-dark:#CE9178">1883:1883</span><span style="color:#005CC5;--shiki-dark:#D7BA7D">  \</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">-v </span><span style="color:#032F62;--shiki-dark:#CE9178">/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf</span><span style="color:#005CC5;--shiki-dark:#D7BA7D"> \</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">-v </span><span style="color:#032F62;--shiki-dark:#CE9178">/mosquitto/data:/mosquitto/data</span><span style="color:#005CC5;--shiki-dark:#D7BA7D"> \</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">-v </span><span style="color:#032F62;--shiki-dark:#CE9178">/mosquitto/log:/mosquitto/log</span><span style="color:#005CC5;--shiki-dark:#D7BA7D"> \</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">eclipse-mosquitto</span></span></code></pre><button type="button" data="docker run -it --name=mosquitto --privileged \
-p 1883:1883  \
-v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \
-v /mosquitto/data:/mosquitto/data \
-v /mosquitto/log:/mosquitto/log \
eclipse-mosquitto" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section><section class="heading" data-heading-rank="3" aria-labelledby="3-安装broadlink_ac_mqtt-插件"><h3 id="3-安装broadlink_ac_mqtt-插件"><a href="#3-安装broadlink_ac_mqtt-插件">3. 安装broadlink_ac_mqtt 插件</a></h3>
<ul>
<li>创建配置文件config.yml ，根据自己的环境修改MQTT的配置和设备的信息</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="yaml"><code><span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">service</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   daemon_mode</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">True</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #更新间隔</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   update_interval</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">10</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #在局域网中自动发现博联设备 </span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #但是不支持中文设备 所以关闭</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   self_discovery</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">False</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   bind_to_ip</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">mqtt</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #mqtt服务的ip地址</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   host</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">mqtt</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #mqtt服务的端口</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">1883</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   client_id</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">ac_to_mqtt</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #mqtt服务的用户名</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   user</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">user</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #mqtt服务的用户名</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   passwd</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">'passwork'</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #空调信息的topic 不需要改</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   topic_prefix</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">/aircon</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #HA 自动发现实体的topic 不需要改</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   auto_discovery_topic</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">homeassistant</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   auto_discovery_topic_retain</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">True</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">   #HA 自动发现实体的开关</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">   discovery</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">True</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">##设备配置</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">devices</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">   - </span><span style="color:#22863A;--shiki-dark:#569CD6">ip</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">192.168.xxx.xxx</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">      #设备MAC地址，去掉冒号(a1:b2:c3:d4:e5:f6 填写为a1b2c3d4e5f6)</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     mac</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">a1b2c3d4e5f6</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">      #设备名 注意不能用中文</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     name</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">Master bedroom ac</span></span>
<span class="line"><span style="color:#6A737D;--shiki-dark:#6A9955">      #端口号 为80 （仅在奥克斯空调测试）</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">80</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">   - </span><span style="color:#22863A;--shiki-dark:#569CD6">ip</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">192.168.xxx.xxx</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     mac</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">a1b2c3d4e5f6</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     name</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">Living room ac</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">80</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">   - </span><span style="color:#22863A;--shiki-dark:#569CD6">ip</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">192.168.xxx.xxx</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     mac</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">a1b2c3d4e5f6</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     name</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">Second bedroom</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">80</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">   - </span><span style="color:#22863A;--shiki-dark:#569CD6">ip</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">192.168.xxx.xxx</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     mac</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">a1b2c3d4e5f6</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     name</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">Guest bedroom</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">     port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#B5CEA8">80</span></span></code></pre><button type="button" data="service:
   daemon_mode: True
   #更新间隔
   update_interval: 10
   #在局域网中自动发现博联设备 
   #但是不支持中文设备 所以关闭
   self_discovery: False
   bind_to_ip: False

mqtt:
   #mqtt服务的ip地址
   host: mqtt
   #mqtt服务的端口
   port: 1883
   client_id: ac_to_mqtt
   #mqtt服务的用户名
   user: user
   #mqtt服务的用户名
   passwd: &#x27;passwork&#x27;
   #空调信息的topic 不需要改
   topic_prefix: /aircon
   #HA 自动发现实体的topic 不需要改
   auto_discovery_topic: homeassistant
   auto_discovery_topic_retain: True
   #HA 自动发现实体的开关
   discovery: True

##设备配置
devices:
   - ip: 192.168.xxx.xxx
      #设备MAC地址，去掉冒号(a1:b2:c3:d4:e5:f6 填写为a1b2c3d4e5f6)
     mac: a1b2c3d4e5f6
      #设备名 注意不能用中文
     name: Master bedroom ac
      #端口号 为80 （仅在奥克斯空调测试）
     port: 80
   - ip: 192.168.xxx.xxx
     mac: a1b2c3d4e5f6
     name: Living room ac
     port: 80
   - ip: 192.168.xxx.xxx
     mac: a1b2c3d4e5f6
     name: Second bedroom
     port: 80
   - ip: 192.168.xxx.xxx
     mac: a1b2c3d4e5f6
     name: Guest bedroom
     port: 80" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>新建文件夹 /docker/ac2mqtt 并将配置文件放入其中（<strong>这里只是示例，建议放HA配置文件夹同级</strong>）</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">mkdir</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -p</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/ac2mqtt</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">cp</span><span style="color:#032F62;--shiki-dark:#CE9178"> config.yml</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/ac2mqtt/</span></span></code></pre><button type="button" data="mkdir -p /docker/ac2mqtt
cp config.yml /docker/ac2mqtt/" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>启动 broadlink_ac_mqtt 插件容器</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">docker</span><span style="color:#032F62;--shiki-dark:#CE9178"> run</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -d</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --name</span><span style="color:#032F62;--shiki-dark:#CE9178"> ac2mqtt</span><span style="color:#032F62;--shiki-dark:#CE9178"> broadlinkac/broadlink_ac_mqtt:latest</span><span style="color:#005CC5;--shiki-dark:#569CD6">  --net=</span><span style="color:#032F62;--shiki-dark:#CE9178">"host"</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -v</span><span style="color:#032F62;--shiki-dark:#CE9178"> /docker/ac2mqtt:/config</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -e</span><span style="color:#032F62;--shiki-dark:#CE9178"> TZ="Asia/Shanghai"</span></span></code></pre><button type="button" data="docker run -d --name ac2mqtt broadlinkac/broadlink_ac_mqtt:latest  --net=&#x22;host&#x22; -v /docker/ac2mqtt:/config -e TZ=&#x22;Asia/Shanghai&#x22;" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section><section class="heading" data-heading-rank="3" aria-labelledby="4-启动ha自动发现mqtt实体"><h3 id="4-启动ha自动发现mqtt实体"><a href="#4-启动ha自动发现mqtt实体">4. 启动HA自动发现MQTT实体</a></h3>
<p>安装mqtt集成</p>
<p>在HA的配置文件中加入</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="yaml"><code><span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">mqtt</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  discovery</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#005CC5;--shiki-dark:#569CD6">true</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  discovery_prefix</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">homeassistant</span></span></code></pre><button type="button" data="mqtt:
  discovery: true
  discovery_prefix: homeassistant" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div></section></section>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[基于docker和gitlab-runner的一次CI/CD实践]]></title>
        <id>docker-gitlab-runner-ci-cd</id>
        <link href="https://blog.john5.work/blog/docker-gitlab-runner-ci-cd/"/>
        <updated>2021-06-07T16:00:00.000Z</updated>
        <summary type="html"><![CDATA[记录 Java 项目容器化、docker-compose 编排，以及 GitLab Runner 流水线部署的一次实践。]]></summary>
        <content type="html"><![CDATA[<section class="heading" data-heading-rank="2" aria-labelledby="项目以容器方式构建"><h2 id="项目以容器方式构建"><a href="#项目以容器方式构建">项目以容器方式构建</a></h2>
<section class="heading" data-heading-rank="3" aria-labelledby="添加dockerfile"><h3 id="添加dockerfile"><a href="#添加dockerfile">添加dockerFile</a></h3>
<p>编写dockerFile</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="dockerfile"><code><span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">FROM</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> openjdk:8-jdk-alpine</span></span>
<span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">RUN</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> adduser --disabled-password --gecos </span><span style="color:#032F62;--shiki-dark:#CE9178">''</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> testuser</span></span>
<span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">USER</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> testuser</span></span>
<span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">ARG</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> JAR_FILE=target/*.jar</span></span>
<span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">COPY</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> ${JAR_FILE} /home/testuser/app.jar</span></span>
<span class="line"><span style="color:#D73A49;--shiki-dark:#569CD6">ENTRYPOINT</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> [</span><span style="color:#032F62;--shiki-dark:#CE9178">"java"</span><span style="color:#24292E;--shiki-dark:#D4D4D4">,</span><span style="color:#032F62;--shiki-dark:#CE9178">"-jar"</span><span style="color:#24292E;--shiki-dark:#D4D4D4">,</span><span style="color:#032F62;--shiki-dark:#CE9178">"/home/testuser/app.jar"</span><span style="color:#24292E;--shiki-dark:#D4D4D4">]</span></span></code></pre><button type="button" data="FROM openjdk:8-jdk-alpine
RUN adduser --disabled-password --gecos &#x27;&#x27; testuser
USER testuser
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} /home/testuser/app.jar
ENTRYPOINT [&#x22;java&#x22;,&#x22;-jar&#x22;,&#x22;/home/testuser/app.jar&#x22;]" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section><section class="heading" data-heading-rank="3" aria-labelledby="maven中集成docker镜像构建"><h3 id="maven中集成docker镜像构建"><a href="#maven中集成docker镜像构建">maven中集成docker镜像构建</a></h3>
<p>添加spotify的dockerFile maven 插件</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="xml"><code><span class="line"><span style="color:#24292E;--shiki-dark:#808080">&#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">plugin</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">groupId</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">com.spotify</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">groupId</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">artifactId</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">dockerfile-maven-plugin</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">artifactId</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">version</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">1.4.13</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">version</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">executions</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">execution</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">            &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">id</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">default</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">id</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">            &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">goals</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">                &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">goal</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">build</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">goal</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">            &#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">goals</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">execution</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">executions</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">configuration</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">repository</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">${docker.image.prefix}/${project.name}</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">repository</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">tag</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">${project.version}</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">tag</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">buildArgs</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">            &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">JAR_FILE</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">${project.build.finalName}.jar</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">JAR_FILE</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">buildArgs</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">        &#x3C;</span><span style="color:#22863A;--shiki-dark:#569CD6">dockerfile</span><span style="color:#24292E;--shiki-dark:#808080">></span><span style="color:#24292E;--shiki-dark:#D4D4D4">${project.basedir}/Dockerfile</span><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">dockerfile</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">    &#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">configuration</span><span style="color:#24292E;--shiki-dark:#808080">></span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#808080">&#x3C;/</span><span style="color:#22863A;--shiki-dark:#569CD6">plugin</span><span style="color:#24292E;--shiki-dark:#808080">></span></span></code></pre><button type="button" data="<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <repository>${docker.image.prefix}/${project.name}</repository>
        <tag>${project.version}</tag>
        <buildArgs>
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
        <dockerfile>${project.basedir}/Dockerfile</dockerfile>
    </configuration>
</plugin>" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section></section><section class="heading" data-heading-rank="2" aria-labelledby="使用docker-compose在开发和测试环境中编排容器"><h2 id="使用docker-compose在开发和测试环境中编排容器"><a href="#使用docker-compose在开发和测试环境中编排容器">使用docker-compose在开发和测试环境中编排容器</a></h2>
<ul>
<li>修改application.yml，加入环境变量。</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="yaml"><code><span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">server</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  port</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">${SERVER_PORT:8080}</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">logging</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  level</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    com.demo</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">${LOG_LEVEL:debug}</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  file</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    name</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">${LOG_PATH:./logs}/demo.log</span></span>
<span class="line"></span></code></pre><button type="button" data="
server:
  port: ${SERVER_PORT:8080}
logging:
  level:
    com.demo: ${LOG_LEVEL:debug}
  file:
    name: ${LOG_PATH:./logs}/demo.log
" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>编写docker-compose.yml</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="yaml"><code><span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">version</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">'3'</span></span>
<span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">services</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  web</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    ports</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">8080:8080</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    image</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">test/demo:1.0-SNAPSHOT</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    networks</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">test_network</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    volumes</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">./logs:/logs</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    environment</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">LOG_LEVEL=${LOG_LEVEL}</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">LOG_PATH=${LOG_PATH}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">networks</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  test_network</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    driver</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">bridge</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    ipam</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">      driver</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">default</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">      config</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">        - </span><span style="color:#22863A;--shiki-dark:#569CD6">subnet</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">172.16.1.0/24</span></span></code></pre><button type="button" data="version: &#x27;3&#x27;

services:
  web:
    ports:
      - 8080:8080
    image: test/demo:1.0-SNAPSHOT
    networks:
      - test_network
    volumes:
      - ./logs:/logs
    environment:
      - LOG_LEVEL=${LOG_LEVEL}
      - LOG_PATH=${LOG_PATH}

networks:
  test_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.1.0/24" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</section><section class="heading" data-heading-rank="2" aria-labelledby="添加-gitlab-runner-流水线"><h2 id="添加-gitlab-runner-流水线"><a href="#添加-gitlab-runner-流水线">添加 gitlab-runner 流水线</a></h2>
<section class="heading" data-heading-rank="3" aria-labelledby="安装docker-engine---community"><h3 id="安装docker-engine---community"><a href="#安装docker-engine---community">安装Docker Engine - Community</a></h3>
<p>检查docker是否安装以及版本</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">$</span><span style="color:#032F62;--shiki-dark:#CE9178"> sudo</span><span style="color:#032F62;--shiki-dark:#CE9178"> docker</span><span style="color:#032F62;--shiki-dark:#CE9178"> version</span></span></code></pre><button type="button" data="$ sudo docker version" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<p>若输出如下则表示Docker Client和Server均安装成功。</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>Client: Docker Engine - Community</span></span>
<span class="line"><span> Version:           20.10.7</span></span>
<span class="line"><span> API version:       1.41</span></span>
<span class="line"><span> Go version:        go1.13.15</span></span>
<span class="line"><span> Git commit:        f0df350</span></span>
<span class="line"><span> Built:             Wed Jun  2 11:58:10 2021</span></span>
<span class="line"><span> OS/Arch:           linux/amd64</span></span>
<span class="line"><span> Context:           default</span></span>
<span class="line"><span> Experimental:      true</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Server: Docker Engine - Community</span></span>
<span class="line"><span> Engine:</span></span>
<span class="line"><span>  Version:          20.10.7</span></span>
<span class="line"><span>  API version:      1.41 (minimum version 1.12)</span></span>
<span class="line"><span>  Go version:       go1.13.15</span></span>
<span class="line"><span>  Git commit:       b0f5bc3</span></span>
<span class="line"><span>  Built:            Wed Jun  2 11:56:35 2021</span></span>
<span class="line"><span>  OS/Arch:          linux/amd64</span></span>
<span class="line"><span>  Experimental:     false</span></span>
<span class="line"><span> containerd:</span></span>
<span class="line"><span>  Version:          1.4.6</span></span>
<span class="line"><span>  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d</span></span>
<span class="line"><span> runc:</span></span>
<span class="line"><span>  Version:          1.0.0-rc95</span></span>
<span class="line"><span>  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7</span></span>
<span class="line"><span> docker-init:</span></span>
<span class="line"><span>  Version:          0.19.0</span></span>
<span class="line"><span>  GitCommit:        de40ad0</span></span></code></pre><button type="button" data="Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:56:35 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<p>若未安装则参考：<a href="https://docs.docker.com/engine/install/centos/" rel="nofollow noopener noreferrer" target="_blank">docker 安装文档</a>。</p>
</section><section class="heading" data-heading-rank="3" aria-labelledby="安装docker-compose"><h3 id="安装docker-compose"><a href="#安装docker-compose">安装docker-compose</a></h3>
<ul>
<li>下载</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">sudo</span><span style="color:#032F62;--shiki-dark:#CE9178"> curl</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -L</span><span style="color:#032F62;--shiki-dark:#CE9178"> "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(</span><span style="color:#6F42C1;--shiki-dark:#DCDCAA">uname</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -s</span><span style="color:#032F62;--shiki-dark:#CE9178">)-$(</span><span style="color:#6F42C1;--shiki-dark:#DCDCAA">uname</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -m</span><span style="color:#032F62;--shiki-dark:#CE9178">)"</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -o</span><span style="color:#032F62;--shiki-dark:#CE9178"> /usr/local/bin/docker-compose</span></span></code></pre><button type="button" data="sudo curl -L &#x22;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)&#x22; -o /usr/local/bin/docker-compose" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>权限</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">sudo</span><span style="color:#032F62;--shiki-dark:#CE9178"> chmod</span><span style="color:#032F62;--shiki-dark:#CE9178"> +x</span><span style="color:#032F62;--shiki-dark:#CE9178"> /usr/local/bin/docker-compose</span></span></code></pre><button type="button" data="sudo chmod +x /usr/local/bin/docker-compose" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>链接</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">sudo</span><span style="color:#032F62;--shiki-dark:#CE9178"> ln</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -s</span><span style="color:#032F62;--shiki-dark:#CE9178"> /usr/local/bin/docker-compose</span><span style="color:#032F62;--shiki-dark:#CE9178"> /usr/bin/docker-compose</span></span></code></pre><button type="button" data="sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>校验</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">$</span><span style="color:#032F62;--shiki-dark:#CE9178"> docker-compose</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --version</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">docker-compose</span><span style="color:#032F62;--shiki-dark:#CE9178"> version</span><span style="color:#032F62;--shiki-dark:#CE9178"> 1.29.2,</span><span style="color:#032F62;--shiki-dark:#CE9178"> build</span><span style="color:#032F62;--shiki-dark:#CE9178"> 5becea4c</span></span></code></pre><button type="button" data="$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<p>参考：<a href="https://docs.docker.com/compose/install/" rel="nofollow noopener noreferrer" target="_blank">docker-compose 安装文档</a>。</p>
</section><section class="heading" data-heading-rank="3" aria-labelledby="安装gitlab-runner"><h3 id="安装gitlab-runner"><a href="#安装gitlab-runner">安装Gitlab-runner</a></h3>
<ul>
<li>安装git maven</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">sudo</span><span style="color:#032F62;--shiki-dark:#CE9178"> yum</span><span style="color:#032F62;--shiki-dark:#CE9178"> install</span><span style="color:#032F62;--shiki-dark:#CE9178"> git</span><span style="color:#032F62;--shiki-dark:#CE9178"> maven</span></span></code></pre><button type="button" data="sudo yum install git maven" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>下载</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">curl</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -LJO</span><span style="color:#032F62;--shiki-dark:#CE9178"> "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_${</span><span style="color:#24292E;--shiki-dark:#9CDCFE">arch</span><span style="color:#032F62;--shiki-dark:#CE9178">}.rpm"</span></span></code></pre><button type="button" data="curl -LJO &#x22;https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_${arch}.rpm&#x22;" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>安装</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">rpm</span><span style="color:#005CC5;--shiki-dark:#569CD6"> -i</span><span style="color:#032F62;--shiki-dark:#CE9178"> gitlab-runner_</span><span style="color:#24292E;--shiki-dark:#D4D4D4">${</span><span style="color:#24292E;--shiki-dark:#9CDCFE">arch</span><span style="color:#24292E;--shiki-dark:#D4D4D4">}</span><span style="color:#032F62;--shiki-dark:#CE9178">.rpm</span></span></code></pre><button type="button" data="rpm -i gitlab-runner_${arch}.rpm" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<ul>
<li>校验</li>
</ul>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">$</span><span style="color:#032F62;--shiki-dark:#CE9178"> systemctl</span><span style="color:#032F62;--shiki-dark:#CE9178"> status</span><span style="color:#032F62;--shiki-dark:#CE9178"> gitlab-runner.service</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">●</span><span style="color:#032F62;--shiki-dark:#CE9178"> gitlab-runner.service</span><span style="color:#032F62;--shiki-dark:#CE9178"> -</span><span style="color:#032F62;--shiki-dark:#CE9178"> GitLab</span><span style="color:#032F62;--shiki-dark:#CE9178"> Runner</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">   Loaded:</span><span style="color:#032F62;--shiki-dark:#CE9178"> loaded</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> (/etc/systemd/system/gitlab-runner.service; </span><span style="color:#6F42C1;--shiki-dark:#DCDCAA">enabled</span><span style="color:#24292E;--shiki-dark:#D4D4D4">; </span><span style="color:#6F42C1;--shiki-dark:#DCDCAA">vendor</span><span style="color:#032F62;--shiki-dark:#CE9178"> preset:</span><span style="color:#032F62;--shiki-dark:#CE9178"> disabled</span><span style="color:#24292E;--shiki-dark:#D4D4D4">)</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">   Active:</span><span style="color:#032F62;--shiki-dark:#CE9178"> active</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> (running) since Tue 2021-06-15 15:03:31 CST; </span><span style="color:#6F42C1;--shiki-dark:#DCDCAA">51s</span><span style="color:#032F62;--shiki-dark:#CE9178"> ago</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA"> Main</span><span style="color:#032F62;--shiki-dark:#CE9178"> PID:</span><span style="color:#005CC5;--shiki-dark:#B5CEA8"> 31521</span><span style="color:#24292E;--shiki-dark:#D4D4D4"> (gitlab-runner)</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">    Tasks:</span><span style="color:#005CC5;--shiki-dark:#B5CEA8"> 10</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">   Memory:</span><span style="color:#032F62;--shiki-dark:#CE9178"> 5.5M</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">   CGroup:</span><span style="color:#032F62;--shiki-dark:#CE9178"> /system.slice/gitlab-runner.service</span></span>
<span class="line"><span style="color:#6F42C1;--shiki-dark:#DCDCAA">           └─31521</span><span style="color:#032F62;--shiki-dark:#CE9178"> /usr/bin/gitlab-runner</span><span style="color:#032F62;--shiki-dark:#CE9178"> run</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --working-directory</span><span style="color:#032F62;--shiki-dark:#CE9178"> /home/gitlab-runner</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --config</span><span style="color:#032F62;--shiki-dark:#CE9178"> /etc/gitlab-runner/config.toml</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --service</span><span style="color:#032F62;--shiki-dark:#CE9178"> gitlab-runner</span><span style="color:#005CC5;--shiki-dark:#569CD6"> --user</span><span style="color:#032F62;--shiki-dark:#CE9178"> gitlab-runner</span></span>
<span class="line"></span></code></pre><button type="button" data="$ systemctl status gitlab-runner.service
● gitlab-runner.service - GitLab Runner
   Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-06-15 15:03:31 CST; 51s ago
 Main PID: 31521 (gitlab-runner)
    Tasks: 10
   Memory: 5.5M
   CGroup: /system.slice/gitlab-runner.service
           └─31521 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>参考：</span></span></code></pre><button type="button" data="参考：" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
<p><a href="https://docs.gitlab.com/runner/install/linux-manually.html" rel="nofollow noopener noreferrer" target="_blank">Gitlab-runner安装文档</a></p>
<ul>
<li>修改启动用户，文件：/etc/systemd/system/gitlab-runner.service。</li>
</ul>
</section><section class="heading" data-heading-rank="3" aria-labelledby="注册runner并编写gitlab-ciyml"><h3 id="注册runner并编写gitlab-ciyml"><a href="#注册runner并编写gitlab-ciyml">注册runner并编写.gitlab-ci.yml</a></h3>
<ul>
<li>
<p>注册，见<a href="https://docs.gitlab.com/runner/register/index.html#linux" rel="nofollow noopener noreferrer" target="_blank">注册文档</a>。</p>
</li>
<li>
<p>编写.gitlab-ci.yml。</p>
<div class="code-container"><pre class="astro-code astro-code-themes github-light dark-plus" style="background-color:#fff;--shiki-dark-bg:#1E1E1E;color:#24292e;--shiki-dark:#D4D4D4; overflow-x: auto;" tabindex="0" data-language="yml"><code><span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">stages</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">  - </span><span style="color:#032F62;--shiki-dark:#CE9178">build</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">  - </span><span style="color:#032F62;--shiki-dark:#CE9178">deploy-dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">build</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  stage</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">build</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  tags</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">demo-runner</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  only</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    refs</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">dev/1.0</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  script</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">mvn clean package -Dmaven.test.skip=true</span></span>
<span class="line"></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">deploy-dev</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  stage</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">deploy-dev</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  tags</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">demo-runner</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  only</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">    refs</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">      - </span><span style="color:#032F62;--shiki-dark:#CE9178">dev/1.0</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  script</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">sudo -u testuser whoami</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">sudo -u testuser mkdir -p /home/testuser/demo-project</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">sudo -u testuser cp -r ./docker-compose/. /home/testuser/demo-project</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">cd /home/testuser/demo-project</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">chmod +x ./init.sh</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">sudo -u testuser ./init.sh</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#032F62;--shiki-dark:#CE9178">sudo -u testuser sudo docker-compose up -d</span></span>
<span class="line"><span style="color:#22863A;--shiki-dark:#569CD6">  needs</span><span style="color:#24292E;--shiki-dark:#D4D4D4">:</span></span>
<span class="line"><span style="color:#24292E;--shiki-dark:#D4D4D4">    - </span><span style="color:#22863A;--shiki-dark:#569CD6">job</span><span style="color:#24292E;--shiki-dark:#D4D4D4">: </span><span style="color:#032F62;--shiki-dark:#CE9178">build</span></span>
<span class="line"></span>
<span class="line"></span></code></pre><button type="button" data="stages:
  - build
  - deploy-dev

build:
  stage: build
  tags:
    - demo-runner
  only:
    refs:
      - dev/1.0
  script:
    - mvn clean package -Dmaven.test.skip=true

deploy-dev:
  stage: deploy-dev
  tags:
    - demo-runner
  only:
    refs:
      - dev/1.0
  script:
    - sudo -u testuser whoami
    - sudo -u testuser mkdir -p /home/testuser/demo-project
    - sudo -u testuser cp -r ./docker-compose/. /home/testuser/demo-project
    - cd /home/testuser/demo-project
    - chmod +x ./init.sh
    - sudo -u testuser ./init.sh
    - sudo -u testuser sudo docker-compose up -d
  needs:
    - job: build

" class="code-copy-button" aria-hidden="" onclick="navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x22;code-copied&#x22;);window.setTimeout(() => this.classList.remove(&#x22;code-copied&#x22;), 1500)"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="copy-icon"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="done-icon"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div>
</li>
</ul></section></section>]]></content>
    </entry>
</feed>