2.TeamCity 配置构建项目

1.创建 Project

  • 1.TeamCity 初始化完配置数据后,选择创建 Project
    1. 跳过仓库配置

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
    1. ssh连接部署(windows下docker desktop)
      部署的机器安装docker desktop
      添加 部署bat脚本,docker-compose.yml配置文件

添加一个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目录下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容