我组织的devops项目中的存储库包含许多.net解决方案以及一些统一项目。当我运行构建管道时,由于以下原因,该管道失败:
错误MSB3491:无法将行写入文件“ obj \ Release \ path \ to \ file”。磁盘上没有足够的空间。
我希望管道仅检出和获取成功构建所需的存储库部分。这可能也有助于缩短管道的执行时间,因为它目前还以GB的资源获取了我的整体项目,这需要花费很多时间。
我想将我的项目分布在多个存储库中,但是管理员给我的东西不多于已有的库。当我将git fetch配置为浅(--depth=1
)时,效果会好很多,但是我仍然时不时地收到错误消息。
这是我配置结帐的方式:
steps:
- checkout: self
clean: true
# shallow fetch
fetchDepth: 1
lfs: false
submodules: false
使用VSBuild@1
任务完成构建。
除了使用多个存储库之外,我无法找到解决问题的有效方法。
编辑:Shayki Abramczyk的解决方案#1完美运行。这是我的完整实现。
GitSparseCheckout.yml
:
parameters:
access: ''
repository: ''
sourcePath: ''
steps:
- checkout: none
- task: CmdLine@2
inputs:
script: |
ECHO ##[command] git init
git init
ECHO ##[command] git sparse-checkout: ${{ parameters.sourcePath }}
git config core.sparsecheckout true
echo ${{ parameters.sourcePath }} >> .git/info/sparse-checkout
ECHO ##[command] git remote add origin https://${{ parameters.repository }}
git remote add origin https://${{ parameters.access }}@${{ parameters.repository }}
ECHO ##[command] git fetch --progress --verbose --depth=1 origin master
git fetch --progress --verbose --depth=1 origin master
ECHO ##[command] git pull --progress --verbose origin master
git pull --progress --verbose origin master
这样的Checkout称为(必须调整模板路径):
- template: ../steps/GitSparseCheckout.yml
parameters:
access: anything:<YOUR_PERSONAL_ACCESS_TOKEN>
repository: dev.azure.com/organisation/project/_git/repository
sourcePath: path/to/files/
答案 0 :(得分:3)
其他答案很好用,但是我发现使用git的潜在新功能的方式有所不同。
这将提取到1的深度,并显示根文件夹中的所有文件以及var path = require('path');
const port = process.env.PORT ||3000;
const app = express();
//Set the base path to the angular-test dist folder
app.use(express.static(path.join(__dirname, 'dist/yourappfolder')));
//Any routes will be redirected to the angular app
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'dist/yourappfolder/index.html'));
});
//Starting server on port 8081
app.listen(port, () => {
console.log('Server started!');
console.log(port);
});
,folder1
和folder2
folder3
答案 1 :(得分:3)
这个答案应该更新,因为我们(现在)可以像这样结帐参考
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: features/tools
steps:
- checkout: MyGitHubRepo
或者像这样使用内联语法
- checkout: git://MyProject/MyRepo@features/tools # checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/heads/features/tools # also checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/tags/MyTag # checks out the commit referenced by MyTag.
更多信息可以在here
答案 2 :(得分:1)
在Azure DevOps中,您没有选择仅获取部分存储库的选项,但是有一种解决方法,请禁用“获取源代码”步骤并手动获取源代码(仅根据需要):
要禁用默认的“获取来源”,只需在结帐时指定none
:
- checkout: none
在管道中添加CMD / PowerShell任务,以使用以下2个选项之一手动获取源:
1)使用git sparse-checkout仅获取部分仓库,例如,仅获取src
文件夹下的文件夹test
:
- script: |
mkdir myRepo
cd myRepo
git init
git config.core.sparsecheckout true
echo test/src/ >> .git/info/sparse-checkout
git remote add -f origin path/to/your/repo
git pull origin master
displayName: 'Get only test/src folder'
现在,buils任务中将myRepo
作为工作目录。
2)使用Azure DevOps Rest API(Git-Items-Batch Items)获取仓库的一部分。
在管道的最后,您可能需要添加步骤以清理repo文件夹。