问题描述
是一个完全对Visual Studio、.net和Azure DevOps都不熟悉的新手。他在使用Visual Studio中的GIT时遇到了问题。他有一个已经构建并正常运行的.Net应用程序(Umbraco)。他在Azure Web App的Azure部署界面上构建了一个CI流水线,一切都正常工作。但是当他在本地的仓库中添加一个测试文件(文件 > 新建文件 > test.txt)并保存后,在GIT资源管理器的右侧会出现一个变更。然后他可以点击“推送”蓝色箭头,文件就会被推送到DevOps仓库中,没有错误并且出现在DevOps仓库中。但问题似乎是整个应用程序都在同步,也就是说整个应用程序都被推送到Azure中。这很奇怪,就好像对代码进行了一次小的更改,就会触发DevOps流水线并将整个应用程序推送到Azure中。这是否与CI(持续集成)和DevOps流水线有关?用户确定他只是从VS发送了一个文件到Azure DevOps仓库,然后它就会触发并覆盖整个应用程序。当然,用户不希望发生这种情况,只想对文件进行小的开发更改、添加文件并将它们发送到DevOps中。此外,如果用户通过FTP登录应用程序,似乎会看到完全不同的文件集,这表明它也在构建中。用户是一个新手,请帮助解答这个问题。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
用户需要对Git和持续集成(CI)系统有更多的了解。CI系统的主要目标是在收到Git仓库中的更改通知时自动构建项目或代码。但是可以添加一些细微的变化,以防止代码仓库的特定更改触发CI流程。
首先,了解.gitignore文件。它用于防止特定文件被检入到Git仓库中。
其次,构建流水线可以针对所有或特定分支触发。因此,如果您将代码检入到develop
分支,并且只希望在master
分支发生更改时启动CI流程,则可以将构建流水线配置为仅监视master
分支。
第三,您可以过滤Git仓库中的目录以进行监视。假设您有两个文件夹:/docs
和/src
。您可以让CI构建流水线仅监视/src
目录并忽略其他所有内容。因此,对/docs的检入不会触发构建流水线。
最后,在Azure DevOps中,如果您在提交消息的末尾使用***NO_CI***
,可以忽略完整的提交检入。因此,即使您没有使用上述其他过滤器,只要在提交消息中包含***NO_CI***
字符串,就可以防止CI构建流水线启动。
方案2
使用脚本或工具来管理容器的启动顺序可能会增加复杂性,并且需要确保容器A和容器B之间的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制容器的运行顺序。你可以使用docker run
命令来手动控制容器的启动顺序,或者使用一些第三方工具来管理容器的依赖关系。
示例:
以下是一个简单的bash脚本示例,可以在容器A启动后启动容器B:
#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b
在这个示例中,我们首先使用docker run
命令启动容器A,并将其命名为container_a
。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo
命令来测试)。一旦容器A就绪,我们再使用docker run
命令启动容器B,并将其命名为container_b
。