在Build Step中访问TeamCity工件

 手机用户2502856553 发布于 2023-02-13 17:23

我一直在玩TeamCity以启动和运行CI环境.

我开始关注Troy Hunt的"你正在部署错误",这非常有用,但我想将打包和部署分成两个单独的步骤,原因如下:

    我想将一些额外的标志传递给msdeploy,这是不可能的(对于m,y知识),使用Troy描述的MSBuild包和部署.

    如果我需要构建软件包但不部署它,我可以轻松地禁用第二个构建步骤即部署.

    我想在msdeploy上使用-skip标志来防止它删除某些文件夹,我再也找不到任何方法,而不将其作为参数传递给命令行.

所以,在我的第一个MSBuild步骤中,我只有参数:

/P:Configuration=%env.Configuration%
/P:VisualStudioVersion=11.0
/P:IgnoreDeployManagedRuntimeVersion = True

然后我有第二个Build Step,它使用命令行构建运行器来执行以下msdeploy命令:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync       -source:package="C:\ProgramData\JetBrains\TeamCity\system\artifacts\MyProject\%system.teamcity.buildConfName%\%teamcity.build.id%\MyProject.Web.csproj.zip"   -dest:auto,ComputerName='https://devserver:8172/msdeploy.axd?site=MyWebsite',UserName='domain\username',Password='password',IncludeAcls='False',AuthType='Basic' -skip:objectName=dirPath,absolutePath=media$ -disableLink:AppPoolExtension -disableLink:ContentExtension   -disableLink:CertificateExtension -retryAttempts=2 -allowuntrusted

这样做的问题是显然TeamCity在所有构建步骤完成之前不会发布工件,因此命令行进程失败,因为包zip文件实际上并不存在.

我已经阅读了有关发布工件的内容,而Build仍在进行中,但这看起来确实有点像黑客.

任何建议将不胜感激.

1 个回答
  • 你最好有两个构建vs两个构建步骤.

    第一个(Build A)将有1个构建步骤来构建,然后第二个(构建B)将使用第一个构件在一个构建步骤中进行部署.

    因此,在构建A的第一个配置选项卡下,您将指定需要从第一个构建中获得的工件.然后,您可以运行构建并确认在工件部分下,您需要的所有内容都可用.(这些将在构建A完成运行时显示).

    然后在Build B的依赖项部分(不能记住确切名称,我离开我的TC实例)下,你可以将它设置为使用构建A的工件,然后将其用于部署.

    一旦你完成了所有工作,就可以添加一个构建触发器,让Build B在成功执行Build A之后运行,然后如果你只想运行Build A,则禁用构建B上的触发器或暂停Build B配置将阻止触发器触发.

    2023-02-13 17:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有