1.创建 Project
- 1.TeamCity 初始化完配置数据后,选择创建 Project
- 跳过仓库配置
2.开启配置功能

image.png
3.配置 SSH Key

image.png
这里通过ssh key 的方式来连接git仓库
4.配置git仓库

image.png

image.png
5.配置连接(docker仓库)

image.png
6.创建构建配置

image.png

image.png
配置构建步骤
-
1.配置maven编译项目
image.png
image.png -
2.构建docker image
image.png
image.png
- 3.推送image到docker仓库
配置docker 仓库信息

image.png
创建push 步骤

image.png

image.png
- ssh连接部署(windows下docker desktop)
部署的机器安装docker desktop
添加 部署bat脚本,docker-compose.yml配置文件
- ssh连接部署(windows下docker desktop)
添加一个SSH步骤

image.png
-
其他
image.png
bat脚本
@echo off
REM ===========================================================
REM Script: pull-image.bat
REM Purpose: 从私有 Docker 仓库拉取镜像
REM Author: ChatGPT
REM Platform: Windows (CMD / PowerShell 兼容)
REM ===========================================================
REM if "%1"=="" goto usage
REM if "%2"=="" goto usage
REM if "%3"=="" goto usage
REM "%4"=="" goto usage
REM "%5"=="" goto usage
REM "%6"=="" goto usage
REM === 用户配置 ===
REM 一下配置都可以通过参数动态传入
REM set REGISTRY_URL=%1
REM set REGISTRY_USER=%2
REM set REGISTRY_PASS=%3
REM set NAMESPACE=%4
REM set IMAGE_NAME=%5
REM set IMAGE_TAG=%6
set REGISTRY_URL=docker 仓库地址
set REGISTRY_USER=用户名
set REGISTRY_PASS=密码
set NAMESPACE=命名空间
set IMAGE_NAME=Image名称
set IMAGE_TAG=Image Tag
echo Info detail
echo Url:%REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
echo UserName: %REGISTRY_USER%
REM === 临时 Docker 配置目录,防止调用 Windows Credential Manager ===
set "DOCKER_CONFIG=%CD%\dockerconfig"
if not exist "%DOCKER_CONFIG%" mkdir "%DOCKER_CONFIG%"
echo.
echo ================================================
echo Docker Shell
echo ================================================
echo.
REM === 登录到私有仓库 ===
echo [1/4] Login docker registry %REGISTRY_URL% ...
echo %REGISTRY_PASS% | docker --config "%DOCKER_CONFIG%" login %REGISTRY_URL% -u %REGISTRY_USER% --password-stdin
REM docker login %REGISTRY_URL% -u %REGISTRY_USER% -p %REGISTRY_PASS%
if %errorlevel% neq 0 (
echo Login fail
exit /b 1
)
REM === 删除镜像 ===
echo [2/4] Delete Image: %REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
docker rmi %REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
REM === 拉取镜像 ===
echo [3/4] Pull Image: %REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
docker pull %REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
if %errorlevel% neq 0 (
echo Pull image fail
exit /b 1
)
REM === 显示结果 ===
echo [4/4] Pull Done, Image List:
docker images | find "%IMAGE_NAME%"
echo.
echo ================================================
echo Pull success!
echo Image:%REGISTRY_URL%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_TAG%
echo ================================================
echo.
exit /b 0
在bat脚本中,拉取docker image的时候会自动生成一个docker的配置文件。teamcity 无窗口的模式下,由于Windows 的 Session 0 隔离机制。需要删除 "credsStore": "desktop" 或 "credsStore": "wincred" 。

image.png
docker-compose.yml
docker compose 中的内容都可以通过参数传递
services:
app-admin:
image: crpi-fkwcefz20izae5ie.cn-shenzhen.personal.cr.aliyuncs.com/lgy-test/base-app_admin:1.0.0
container_name: app-admin
restart: none
ports:
- "8080:8080"
#volumes:
# 将容器内的数据持久化到主机的 ./mysql_data 目录
# - mysql_data:/var/lib/mysql
# (可选) 如果有初始化 SQL 脚本,可以挂载到此目录
# - ./init:/docker-entrypoint-initdb.d
networks:
- app-network
networks:
app-network:
driver: bridge
构建步骤总览

image.png
-
运行构建
image.png -
构建日志
image.png
demo 源码
https://gitee.com/domore_x/teamcity-demo_java
bat、docker-compose.yml 文件在teamcity目录下






