代理池配置(windows server环境)

注 目前的前端代理池已配置好,名称为【CfAgentFrontPool1】,一般不需要操作,可跳过(有一定难度)

开启代理服务器远程连接

具体开启方式可参考文献1,这里提供一个脚本实现,参见附件1,简单介绍一下附件1的内容。
附件1包含2个文件,如下:
image.png
其中,.bat文件用于运行.ps1文件(以管理员模式),所以实际使用时,双击运行.bat文件即可。
如果新建代理池,唯一需要修改的就是主体文件,将ip地址修改为代理服务器对应的ip地址即可
image.png
文件解压后放在D盘根目录下(否则需要修改.bat文件中的路径),参考
image.png
是否成功,参考文献1

代理服务器安装前端环境

至少包括:

  1. nvm;(重要,不能在建立连接后再安装,不然会出现找不到nvm命令的问题,代理建立后之后的代理服务器的修改并不会同步tfs)
  2. 项目中用到的对应版本的node
  3. 私有npm参考验证信息,参见附件3,解压后按下图找到文件,直接替换。

image.png

建立连接

建立tfs服务器与代理服务器之间的联系。

  1. 打开tfs代理池页面,位于主页-设置-代理池

image.png
这里需要完成2步操作。
1是要新建代理池(需要管理员权限);2是要下载代理(时间比较长,走的是亚马逊服务器)
image.png
附 代理下载步骤
image.png
下载完代理,在D盘解压代理文件,参考以下信息创建。
image.png
成功连接后会看到tfs中代理池为【联机】状态
image.png

问题解决

脱机状态

tfs中显示代理状态为脱机,一般出现在服务器异常断电时,需要重新开启服务,服务位置如下图
image.png

CI创建

与代理池(代理池是针对所有项目的)创建不同,ci是针对每个项目的(依附于各个项目存在),下面以具体项目为例来讲解配置ci

进入ci创建页面

image.png

创建ci定义

前提 创建ci必须拥有该项目的管理员权限,否则在创建定义时无法选择代理池
步骤如下
image.png
image.png

编辑ci处理步骤

!!!node版本说明(重要)

注意 目前的node版本只有8.11.310.16.012.14.112.16.214.17.316.13.0 4个版本(会按实际情况持续维护,如果没有的请联系安装),小版本不同的请使用相邻的版本。另外公司的项目请配置好npm走私有源(一定要配置),教程请点击

!!!npm i安装失败说明(重要)

对于目前的大部分项目而言,第一次使用npm i命令安装node_module包大概率会失败,提供2种方式解决:
方法1:

  • 在上面步骤中的npm install前【临时】增加npm i -g rimrafrimraf node_modules2个命令;

方法2:

  • 在代理服务上直接操作,确保代理服务器环境下的node_modules安装成功即可

关于第1种方法2个命令的作用与第2种方法的一般操作方法,参见:
node_modules包安装失败

!!!ci运行失败说明(重要)

如果在复制发布项目时发生错误,那一般不是时npm run build发生了问题,即打包不成功导致没有dist包可以复制。此时建议在本地先打包测试一下看看哪边报了错,修改后重新运行即可
image.png

▶ 配置步骤

如果第3步(打包项目)npm run build命令在package.json中指向脚本打包(产生压缩包),建议在package.json中另外配置一个打包命令,比如下图:
image.png
然后在ci配置中配置image.png


image.png
按以上步骤处理完保存即可

ci到这里基本就结束了,但是,为了确保项目能正常运行,也为了后续的cd,需要手动运行至少1次。开启方法为选择【对新生成进行排队】(选择好对应的ci定义,因为可能存在多个ci)
注 第1次时间可能会比较长,因为涉及到拉取代码,安装node包等,请耐心等待。确保执行正确后就可以进入下一步操作了。
image.png

CD创建

创建cd定义

步骤如下
image.png
image.png

▶ 编辑cd处理步骤

image.png
!!!注意
image.png
创建完成后,通过发布按钮运行任务,检验是否正确配置
image.png

可能出现的问题

发生系统错误 53

防火墙中的文件和打印机共享(SMB-In),确保域网络打开
image.png
测试是否联通可以参考文献3和4
显示列表是空的,表示成功联通
image.png
tips 可以通过net view \\目标服务器IP 命令查看是否可以联通目标服务器
image.png

错误64(指定网络名不再可用)

image.png
问题分析:目标服务器的默认共享被禁用了
问题解决:目标服务器安装了火绒,火绒在2020年12月份上线了横向渗透防护功能,由于服务器异常重启,导致了横向渗透防护功能生效了。
image.png
在所有目标服务器中将215,216(TFS的打包服务器)ip段加入信任列表即可
image.png

发布通知(基于WebHook和钉钉)

tfs支持配置webHook,同时钉钉也支持webHook机器人,通过webHook,可以实现部署后发送通知至钉钉。

tfs配置

Step1

image.png

Step2

image.png

Step3

image.png
说明:

  • 标注1的位置可以有3个备选URL(鹏鹏写的,) | 阶段 | URL地址 | 说明 | | —- | —- | —- | | 部署开始 | http://192.168.2.36/cicd/api/cicd/start | 可以不用 | | 部署成功 | http://192.168.2.36/cicd/api/cicd/end | 对应step2状态【成功】 | | 部署失败 | http://192.168.2.36/cicd/api/cicd/error | 对应step2状态【失败】 |

  • 标注2内容如下

    1. projectName:项目名称(只接受英文,eg: SIPZCTS_WEB
    2. atMobiles:手机号(自己改)
    3. url:https://oapi.dingtalk.com/robot/send?access_token='##'(钉钉机器人的webhook

    至于如何创建钉钉机器人,请参见文献2
    image.png
    创建群组入口:image.png

    附件

  1. openWinRM.zip
  2. .NetCore+TFS2017 CICD 持续集成持续交付系列 - 正式版本.pdf
  3. npmrc.zip

    参考文献

  4. PowerShell 远程执行任务 - sparkdev - 博客园

  5. CICD(基于TFS) 钉钉消息推送
  6. Windows Machine File Copy task - Azure Pipelines | Microsoft Docs
  7. Error 53 | Microsoft Docs?redirectedfrom=MSDN)