1.什么是TeamCity?
TeamCity 是一款由 JetBrains 开发的强大的持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD)工具。它帮助开发团队自动化构建、测试和部署过程,以确保软件项目的质量和快速交付。
TeamCity 的主要特点和优势包括:
灵活的构建配置:TeamCity 支持多种构建工具(如 Maven、Gradle、npm、MSBuild 等),可轻松集成到现有的开发工具链中。它还提供了丰富的构建配置选项,允许您根据项目需求定制构建过程。
实时构建状态和反馈:TeamCity 提供了实时的构建状态和反馈,帮助您快速发现并解决潜在问题。此外,它还支持与多种通知渠道(如邮件、Slack、HipChat 等)集成,确保团队及时了解构建过程的情况。
分布式构建:TeamCity 支持分布式构建,允许您在多台构建代理上并行执行构建任务,以提高构建速度和效率。此外,它还可以根据负载和需求自动管理构建代理,确保资源的合理分配。
丰富的插件生态:TeamCity 拥有丰富的插件生态,可以与众多第三方工具和服务集成,如版本控制系统(如 Git、SVN、Mercurial 等)、问题跟踪系统(如 Jira、YouTrack 等)以及代码审查工具(如 Codecov、SonarQube 等)。
支持多种部署方式:TeamCity 支持多种部署方式,如自动部署到云服务(如 AWS、Google Cloud、Azure 等)、容器化部署(如 Docker、Kubernetes 等)以及传统的虚拟机部署。
高度可定制和扩展:TeamCity 提供了高度可定制的用户界面,允许您根据团队和项目需求调整界面布局。此外,它还提供了丰富的 API 和扩展点,方便您开发自定义插件和集成其他工具。
良好的安全性和权限管理:TeamCity 提供了一套完善的安全性和权限管理机制,支持用户认证、角色授权以及访问控制等功能,确保您的构建过程和敏感数据得到有效保护。
2.环境搭建
在折腾之前需要理解两个概念, teamCity 和teamAgent.
teamCity: 管理构建代码,构建步骤, 和调度构建的服务
teamAgent: 真正执行构建的服务, 接受teamAgent调度管理, 可以单独安装在服务器上, 如果要构建的任务很多,可以增加很多的teamAgent.
3.安装配置teamcity
docker-compose安装配置teamcity
[root@192 opt]# cat teamcity-agent.yml
version: '3' services: teamcity-server: container_name: teamcity-server image: swr.cn-east-2.myhuaweicloud.com/helowin/teamcity-server privileged: true ports: - "8111:8111" volumes: - /opt/teamcity/java-all:/data/teamcity_server/java-all - /opt/teamcity/data:/data/teamcity_server/datadir - /opt/teamcity/logs:/opt/teamcity/logs environment: - TEAMCITY_SERVER_MEM_OPTS=-Xmx4g -XX:MaxPermSize=270m -XX:ReservedCodeCacheSize=350m
启动teamcity服务器
docker-compose -f teamcity.yml up -d
浏览器访问:http://192.168.9.237:8443
安装使用默认数据库,所以直接下一步即可。
4.安装和配置teamcity-agent (安装再本机,和server再同一台服务器)
[root@192 opt]# cat teamcity-agent.yml
version: '3' services: teamcity-agent: container_name: teamcity-agent image: swr.cn-east-2.myhuaweicloud.com/helowin/teamcity-agent:2024.07.3-linux-sudo privileged: true environment: - SERVER_URL=http://192.168.9.237:8111 - AGENT_NAME=my-agent - DOCKER_IN_DOCKER=start volumes: - /opt/teamcity/agent/conf:/data/teamcity_agent/conf - /opt/teamcity/java-all:/data/teamcity_server/java-all - /opt/teamcity/build-all:/data/teamcity_server/build-all #- /var/run/docker.sock:/var/run/docker.sock
启动teamcity-agent服务
docker-compose -f teamcity-agent.yml up -d
注意:此处如果需要用teamcity进行docker build操作 一定要使用带linux-sudo后缀的镜像并配置root权限 (privileged: true),一个小问题可能能折腾一下午,踩坑经验,务必重视。
添加teamcity-agent
到此安装完成!
5.maven打包jar包并发布到服务器
在新建项目前会添加一个针对此项目的代码库地址,此处用gitee,有自己的gitlab更好
新建项目名称:
构建java项目-使用maven打包,此处使用一个开源的java blog,作为测试,具体可以参考:
编译部署开源博客系统oneblog
打包为jar包以后上传到指定服务器
目标服务器设置启动小脚本,先判断进程是否存在,如果存在先kill再启动。
[root@localhost java_dev]# cat start.sh
#!/bin/sh source /etc/profile SERVER_NAME="blog-web" count=$(ps -ef | grep ${SERVER_NAME} | grep -v grep | awk '{print $2}' | wc -l) if [ $count -gt 0 ]; then ps -ef | grep ${SERVER_NAME} | grep -v grep | awk '{print $2}' | xargs kill -9 fi nohup java -jar /home/java_dev/blog-web.jar &>web.log &
当前页面点击run运行或者回到项目界面执行构建
6.docker方式发布部署
上面一种方式是通过直接运行jar包,下面通过docker将jar包镜像打包并运行。
第一步.设置gitlab地址和用户密码 ( 同上)
第二步.配置mavean打jar包 (同上)
第三步.上传jar包到指定服务器 (同上)
第四步.通过docker-compose打包镜像并启动:
进入目标服务器jar包上传目录,编写Dockerfile和docker-compose.yml文件
[root@localhost java-compose-build]# cat Dockerfile
# 环境版本
FROM swr.cn-east-2.myhuaweicloud.com/helowin/jdk1.8 MAINTAINER 88fly@163.com # JVM调优参数等额外参数 ENV PARAMS "" ENV TZ=PRC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 指定容器端口 EXPOSE 8443 # 添加本地 JAR 到容器内 ADD blog-web.jar app.jar # 容器启动后执行的命令 ENTRYPOINT ["java", "-jar","app.jar" , "-Djava.security.egd=file:/dev/./urandom","$PARAMS"]
[root@localhost java-compose-build]# cat docker-compose.yml
version: '3' services: blog-web: image: swr.cn-east-2.myhuaweicloud.com/helowin/jdk1.8 privileged: true build: ./ image: blog-jar:latest restart: always container_name: blog-web hostname: blog-web volumes: - /home/java-compose-build/logs:/var/tmp/oneblog ports: - 8443:8443
7.用teamctiy进行docker构建
如上是通过docker-compose命令进行构建镜像,teamcity也可以直接构建docker镜像,选中dockerfile文件(此文件可以直接放置在版本库里面,拉下后maven打包后执行docker build操作)
因为我这里用的是docker方式部署,所以docker build 后,会在teamcity-agent的docker容器内再生成一个blog-web镜像,就需要使用docker push上传到镜像仓库,再目标服务器执行下拉和运行操作,每一次构建都上传镜像,资源浪费,没有直接使用docker-compose更简洁高效,此处不在演示。如果只有一台服务器,快速构建就可以尝试更多方式。
补充:maven setting文件自定义
触发器
需要注意的是当一个 build 配置有多个 VCS root 时,并不会为每个 VCS root 的变化触发 build,而是在检测过所有的 VCS root 后才决定是否触发一次 build。
您还可以设置每个 checkin 都触发一次 build。这需要选择"Trigger a build on each check-in"。如果您希望同一个提交者的多次提交只触发一次 build,请把"Include seral check-ins in a build if they are from the same committer"也选上。
静默期(Quiet Period)是个比较有趣的概念。设置后便不会在连续的几次 checkin 过程中触发 build (这几次连续的checkin是一个完整的过程)。通俗点讲,当检测到最后一次变更后的一段时间(默认一分钟)内没有发现新的变更才触发一次 build。
Schedule 触发器,当我们要定时触发 build 时就需要用到 Schedule 触发器
当我们希望在 TeamCity 上 build 某个个人分支时就需要通过某个分支上的变更来触发 build。Branch Remote Run 触发器可以实现这样的功能:
我们可以指定某个用户的分支。注意,这种触发器目前只支持 git 和 mercurial。
版权声明
本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。