Skip to content

基础

官网

需要java环境

下载

https://www.jetbrains.com.cn/teamcity/download/?shownFormKey=professional#section=server

安装

server安装

https://www.jetbrains.com/help/teamcity/quick-setup-guide.html?_gl=1*1wk0ula*_gcl_au*NzM2NjUzMTU2LjE3Mzc4NzUyOTk.*_ga*MTU1MjAyOTAyMS4xNzM3ODc1MzAw*_ga_9J976DJZ68*MTczOTkyNzczNy40LjEuMTczOTkzMDk4Mi41MS4wLjA.

agent安装

https://www.jetbrains.com/help/teamcity/install-teamcity-agent.html?_gl=1*1wk0ula*_gcl_au*NzM2NjUzMTU2LjE3Mzc4NzUyOTk.*_ga*MTU1MjAyOTAyMS4xNzM3ODc1MzAw*_ga_9J976DJZ68*MTczOTkyNzczNy40LjEuMTczOTkzMDk4Mi41MS4wLjA.#Install+from+ZIP+File

配置文件

`<installation path>\conf`目录的`buildAgent.properties`

win启动暂停脚本

teamcityAgent.bat

bash
<span style="font-family:SimSun;font-size:14px;">@ECHO OFF
COLOR A
CD /D E:\buildAgent_ol\bin
echo  当前工作路径为:%cd%
agent.bat start
echo --------------------------------------------
PAUSE</span>a

api调用

个人账号生成access_token

备份构建失败

执行 teamcity_backup.py失败

win agent的python环境缺少 requests、execjs模块

pip --version

python -m ensurepip --upgrade // 升级
python -m pip install --upgrade pip // 升级 pip

pip install requests // 安装requests
pip install PyExecJS // 安装execjs

api调用

Access_token

个人账号生成access_token

image-20250220140925842

生成access token用于调用api接口
注意有时间限制

在请求头中添加 : Authorization: Bearer <token_value>

Csrf token

某些请求需要csrf token

http://your-teamcity-server/authenticationTest.html?csrf

新版本必须要在请求头中添加 : Authorization: Bearer <token_value>

服务器将返回一个 CSRF 令牌

备份还原

第一次启动时选择备份还原,准备好以前的备份文件,方式:

  • 绝对路径
  • 上传压缩包

image-20250219143627648

设置新数据库

image-20250219144159786

版本升级

如果使用更高版本,点击升级

image-20250219173855088

自动备份问题

teamcity没有定时自动备份功能,需要自己写脚本

思路(以前运维弄的):

  1. 定义备份脚本构建(构建可以执行定时任务)
  2. 编写python脚本(脚本调用teamcity手动备份请求)

image-20250219153453890

脚本

python
"""
@Describe :
'@Time     ':'2025/2/20 14:00',
'@Author   ':'liuchenyun',
"""
import requests
import re
import execjs
session = requests.session()
# 根据liuchenyun 账号生成

# 2022。04.4版本
access_token = "eyJ0eXAiOiAiVENWMiJ9.YnludTI4VDJqOFlDanFjMkNQZEk5cUl2YTNn.OGYzNjM1ZWYtMzJlZi00ZDA1LWEzOWUtOTg5OTE5YzhjMDUz"

# 2024.03.1版本
#access_token = "eyJ0eXAiOiAiVENWMiJ9.MEljN290NENSSW80YXFXZjdrVDdtM0kzQU9R.NThhYmJmYjEtY2UzMC00ZWM2LWExNWQtYmQzYzEzNTkyNGFk"
headers = {
        "Authorization": f"Bearer {access_token}"
}

# 获取用户信息,验证一下登录是否成功


def get_csrf():
    user_url = 'http://ci.supermapol.cn/authenticationTest.html?csrf'

    res = session.get(user_url, headers=headers)
    print(res.text)


def start_backup(tc_csrf_token):
    backup_url = 'http://ci.supermapol.cn/admin/backupPage.html'

    data = {
        'settings.fileName': 'TeamCity_Backup',
        'settings.addTimestampSuffix': 'true',
        '_settings.addTimestampSuffix': '',
        'settings.preset': 'X',
        'settings.customIncludeDatabase': 'true',
        '_settings.customIncludeDatabase': '',
        'settings.customIncludeConfiguration': 'true',
        '_settings.customIncludeConfiguration': '',
        'settings.customIncludeSupplementaryData': 'true',
        '_settings.customIncludeSupplementaryData': '',
        '_settings.customIncludeBuildLogs': '',
        'settings.customIncludePersonalChanges': 'true',
        '_settings.customIncludePersonalChanges': '',
        'submitStartBackup': 'Start Backup',
        'tc-csrf-token': tc_csrf_token,
    }
    res = session.post(backup_url, data=data, headers=headers)
    print(res.text)


if __name__ == '__main__':
    
    tc_csrf_token = get_csrf()
    start_backup(tc_csrf_token)

错误

备份还原失败,数据库还原失败

企业微信截图_17396265293121

原因是数据表中有重复数据,清理数据重新备份

b7c9cc0d41676a6e98aefa372db15d50

f28d5fc1361d12db6d092c2605bb8714