<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Docker 构建环境隔离方案 - 团队公告]]></title><description><![CDATA[<h1>Docker 构建环境隔离方案 - 团队公告</h1>
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4e2.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--loudspeaker" style="height:23px;width:auto;vertical-align:middle" title="📢" alt="📢" /> 重要更新</h2>
<p dir="auto"><strong>生效日期：</strong> 2026年1月6日<br />
<strong>影响范围：</strong> 所有使用 Docker 构建的项目<br />
<strong>更新内容：</strong> Docker 构建现已支持基于分支的环境自动隔离</p>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f3af.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--dart" style="height:23px;width:auto;vertical-align:middle" title="🎯" alt="🎯" /> 核心功能</h2>
<h3>1. 自动环境识别</h3>
<p dir="auto">GitLab CI 现在会根据分支自动选择正确的环境配置：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>分支类型</th>
<th>环境</th>
<th>下载配置</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>master</code> / <code>main</code> / <code>hotfix/*</code></td>
<td><strong>production</strong></td>
<td>生产环境依赖版本</td>
</tr>
<tr>
<td><code>develop</code> / <code>feature/*</code> / <code>bugfix/*</code> / <code>fix/*</code></td>
<td><strong>development</strong></td>
<td>开发环境依赖版本</td>
</tr>
</tbody>
</table>
<h3>2. 参数化配置</h3>
<p dir="auto">所有 Dockerfile 现在支持以下构建参数：</p>
<pre><code class="language-dockerfile">ARG ENVIRONMENT=production          # 环境：production 或 development
ARG VERSION_BASE_URL=https://...    # 版本服务器地址
ARG PRODUCT_NAME=StoreManage        # 产品名称
ARG CACHEBUST=1                     # 缓存破坏参数（自动生成时间戳）
</code></pre>
<h3>3. 完全禁用缓存</h3>
<ul>
<li>使用 <code>--no-cache</code> 标志</li>
<li>每次构建传入唯一的 <code>CACHEBUST</code> 时间戳</li>
<li><strong>确保每次都重新下载最新的依赖版本配置</strong></li>
</ul>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f527.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--wrench" style="height:23px;width:auto;vertical-align:middle" title="🔧" alt="🔧" /> 技术实现</h2>
<h3>GitLab CI 构建模板</h3>
<p dir="auto"><strong>文件位置：</strong> <code>deploy/common-ci/docker/build.yml</code></p>
<pre><code class="language-bash"># 根据分支确定环境
if &lsqb;&lsqb; "${CI_COMMIT_BRANCH}" == "master" || "${CI_COMMIT_BRANCH}" == "main" || "${CI_COMMIT_BRANCH}" =~ ^hotfix/ &rsqb;&rsqb;; then
  BUILD_ENVIRONMENT="production"
else
  BUILD_ENVIRONMENT="development"
fi

# 设置默认值（如果项目未配置）
VERSION_BASE_URL="${VERSION_BASE_URL:-https://version.lodatone.com}"
PRODUCT_NAME="${PRODUCT_NAME:-${CI_PROJECT_NAME}}"

# 构建镜像
docker build \
  --build-arg ENVIRONMENT=${BUILD_ENVIRONMENT} \
  --build-arg VERSION_BASE_URL=${VERSION_BASE_URL} \
  --build-arg PRODUCT_NAME=${PRODUCT_NAME} \
  --build-arg CACHEBUST=$(date +%s) \
  --no-cache \
  -t "${DOCKER_IMAGE_REPO}:${VERSION_ID}" \
  -f "${DOCKERFILE_PATH}" .
</code></pre>
<h3>Dockerfile 标准模板</h3>
<pre><code class="language-dockerfile">FROM docker-sz.loda.net.cn/tools/loda/dotnet/sdk-8.0:xxx AS build

# 环境参数：production 或 development，默认为 production
ARG ENVIRONMENT=production
# 版本服务器地址
ARG VERSION_BASE_URL=https://version.loda.net.cn
# 产品名称
ARG PRODUCT_NAME=StoreManage
# 缓存破坏参数（由 CI 传入时间戳）
ARG CACHEBUST=1

# 下载最新的依赖版本配置文件
WORKDIR /
RUN /srv/scripts/download-directory-builds-props.sh ${VERSION_BASE_URL}/${PRODUCT_NAME}/${ENVIRONMENT}/ /src

# ... 后续构建步骤 ...
</code></pre>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4e6.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--package" style="height:23px;width:auto;vertical-align:middle" title="📦" alt="📦" /> 已更新的项目</h2>
<p dir="auto">以下项目已完成升级：</p>
<h3>1. 进销存系统（StoreManage）</h3>
<ul>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <code>Loda.Abp.StoreManage</code> (API)</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <code>Loda.Abp.StoreManage.Auth</code> (认证服务)</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <code>Loda.Abp.StoreManage.Blazor</code> (前端)</li>
</ul>
<h3>2. 子木测评系统（Change）</h3>
<ul>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <code>Yee.Change.BlazorOne.Blazor</code> (前端)</li>
</ul>
<h3>3. 通用 CI 模板</h3>
<ul>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <code>deploy/common-ci/docker/build.yml</code></li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 已同步到所有 GitLab 实例（深圳、子木测评、老挝）</li>
</ul>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f680.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--rocket" style="height:23px;width:auto;vertical-align:middle" title="🚀" alt="🚀" /> 使用示例</h2>
<h3>场景1：开发分支构建</h3>
<pre><code class="language-bash"># 在 feature/ZD-12345-new-feature 分支上提交代码
git push origin feature/ZD-12345-new-feature

# GitLab CI 自动执行：
# - 识别为开发分支
# - 下载 https://version.loda.net.cn/StoreManage/development/urls.txt
# - 使用开发环境的依赖版本
</code></pre>
<h3>场景2：生产分支构建</h3>
<pre><code class="language-bash"># 在 master 分支上合并代码
git push origin master

# GitLab CI 自动执行：
# - 识别为生产分支
# - 下载 https://version.loda.net.cn/StoreManage/production/urls.txt
# - 使用生产环境的依赖版本
</code></pre>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2699.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--gear" style="height:23px;width:auto;vertical-align:middle" title="⚙" alt="⚙" />️ 自定义配置</h2>
<p dir="auto">如果你的项目需要自定义配置，可以在 <code>.gitlab-ci.yml</code> 中设置变量：</p>
<pre><code class="language-yaml">variables:
  VERSION_BASE_URL: "https://custom-version-server.com"
  PRODUCT_NAME: "MyProduct"
</code></pre>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f50d.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--mag" style="height:23px;width:auto;vertical-align:middle" title="🔍" alt="🔍" /> 构建日志示例</h2>
<p dir="auto">成功构建时，你会看到以下日志：</p>
<pre><code>========================================
🐳 构建 Docker 镜像
========================================
版本: 2855.2026.0106.12345
镜像: docker-sz.loda.net.cn/docker-pos/api:2855.2026.0106.12345
Dockerfile: src/Loda.Abp.StoreManage.HttpApi.Host/Dockerfile
========================================
📦 构建环境: development
📦 版本服务器: https://version.loda.net.cn
📦 产品名称: StoreManage
========================================

=== 构建配置下载脚本 v2026.01.04-19:30 ===
步骤2: 下载 urls.txt 文件...
下载 URL: https://version.loda.net.cn/StoreManage/development/urls.txt
✅ 成功: 所有文件下载完成
</code></pre>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> 错误处理</h2>
<h3>下载失败会导致构建失败</h3>
<p dir="auto">如果版本配置下载失败，构建会立即终止：</p>
<pre><code>❌ 错误: 无法下载 urls.txt 文件
❌ 错误: 有 1 个文件下载失败
请检查以上错误信息并确认URL是否正确
</code></pre>
<p dir="auto"><strong>常见原因：</strong></p>
<ol>
<li>版本服务器不可访问</li>
<li>URL 配置错误</li>
<li>网络问题</li>
</ol>
<p dir="auto"><strong>解决方法：</strong></p>
<ol>
<li>检查版本服务器状态</li>
<li>确认 <code>VERSION_BASE_URL</code> 和 <code>PRODUCT_NAME</code> 配置正确</li>
<li>查看完整的构建日志</li>
</ol>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4cb.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--clipboard" style="height:23px;width:auto;vertical-align:middle" title="📋" alt="📋" /> 迁移指南</h2>
<h3>如果你的项目还未升级</h3>
<ol>
<li>
<p dir="auto"><strong>更新 Dockerfile</strong></p>
<p dir="auto">添加环境参数：</p>
<pre><code class="language-dockerfile">ARG ENVIRONMENT=production
ARG VERSION_BASE_URL=https://version.loda.net.cn
ARG PRODUCT_NAME=YourProductName
ARG CACHEBUST=1
</code></pre>
<p dir="auto">修改下载命令：</p>
<pre><code class="language-dockerfile"># 旧版本（硬编码）
RUN /srv/scripts/download-directory-builds-props.sh https://version.loda.net.cn/YourProduct/production/ /src

# 新版本（参数化）
RUN /srv/scripts/download-directory-builds-props.sh ${VERSION_BASE_URL}/${PRODUCT_NAME}/${ENVIRONMENT}/ /src
</code></pre>
</li>
<li>
<p dir="auto"><strong>更新 GitLab CI 配置</strong></p>
<p dir="auto">确保使用最新的 <code>deploy/common-ci/docker/build.yml</code> 模板：</p>
<pre><code class="language-yaml">include:
  - project: 'deploy/common-ci'
    ref: master
    file: 'docker/build.yml'
</code></pre>
</li>
<li>
<p dir="auto"><strong>测试验证</strong></p>
<ul>
<li>在开发分支测试构建</li>
<li>在主分支测试构建</li>
<li>确认下载的是正确环境的配置文件</li>
</ul>
</li>
</ol>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f393.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--mortar_board" style="height:23px;width:auto;vertical-align:middle" title="🎓" alt="🎓" /> 最佳实践</h2>
<h3>1. 版本服务器目录结构</h3>
<pre><code>wwwroot/
├── StoreManage/
│   ├── production/
│   │   ├── Directory.Build.props
│   │   ├── urls.txt
│   │   └── version-numbers/
│   │       ├── Loda.Abp.*.props
│   │       └── ...
│   └── development/
│       ├── Directory.Build.props
│       ├── urls.txt
│       └── version-numbers/
│           ├── Loda.Abp.*.props
│           └── ...
</code></pre>
<h3>2. urls.txt 文件格式</h3>
<pre><code class="language-txt"># 主配置文件
Directory.Build.props

# 版本号文件（相对路径）
version-numbers/Loda.Abp.Core.props
version-numbers/Loda.Abp.StoreManage.props

# 或使用完整URL
https://version.loda.net.cn/StoreManage/production/version-numbers/Custom.props
</code></pre>
<h3>3. 环境隔离原则</h3>
<ul>
<li><strong>开发环境：</strong> 使用最新的开发版本，快速迭代</li>
<li><strong>生产环境：</strong> 使用稳定的发布版本，严格测试</li>
</ul>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f517.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--link" style="height:23px;width:auto;vertical-align:middle" title="🔗" alt="🔗" /> 相关文档</h2>
<ul>
<li><a href="./branch-rules/%E5%9F%BA%E4%BA%8E%E5%88%86%E6%94%AF%E7%9A%84%E5%AE%8C%E6%95%B4%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E7%A4%BA%E4%BE%8B.md">基于分支的完整工作流程示例</a></li>
<li><a href="./branch-rules/%E5%9F%BA%E4%BA%8E%E5%88%86%E6%94%AF%E7%9A%84%E7%89%88%E6%9C%AC%E5%8F%B7%E7%AE%A1%E7%90%86%E6%96%B9%E6%A1%88.md">基于分支的版本号管理方案</a></li>
<li><a href="./ENVIRONMENT-NAMING.md">环境命名规范</a></li>
</ul>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4ac.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--speech_balloon" style="height:23px;width:auto;vertical-align:middle" title="💬" alt="💬" /> 问题反馈</h2>
<p dir="auto">如有问题或建议，请联系：</p>
<ul>
<li><strong>技术支持：</strong> DevOps 团队</li>
<li><strong>文档维护：</strong> 熊中方</li>
<li><strong>GitLab Issues：</strong> <a href="https://gitlab.lodatone.com/deploy/common-ci/-/issues" target="_blank" rel="noopener noreferrer nofollow ugc">deploy/common-ci</a></li>
</ul>
<hr />
<h2><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4dd.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--memo" style="height:23px;width:auto;vertical-align:middle" title="📝" alt="📝" /> 更新日志</h2>
<h3>v2026.01.06</h3>
<ul>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 实现基于分支的环境自动识别</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 参数化 Dockerfile 配置</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 完全禁用 Docker 缓存</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 增强错误处理和日志输出</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 更新 4 个项目的 Dockerfile</li>
<li><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> 同步到所有 GitLab 实例</li>
</ul>
<hr />
<p dir="auto"><strong><img src="https://talk.loda.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f389.png?v=7ba14356ba6" class="not-responsive emoji emoji-android emoji--tada" style="height:23px;width:auto;vertical-align:middle" title="🎉" alt="🎉" /> 感谢大家的配合！让我们的构建更智能、更可靠！</strong></p>
]]></description><link>https://talk.loda.net/topic/39/docker-构建环境隔离方案-团队公告</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 08:42:22 GMT</lastBuildDate><atom:link href="https://talk.loda.net/topic/39.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jan 2026 19:00:07 GMT</pubDate><ttl>60</ttl></channel></rss>