.net持续集成cake篇之常见文件及路径操作
Cake常见文件和路径操作
在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法
Cake相对路径问题
做过自动化的同学可能都知道,使用相对路径时,脚本在测试时的相对路径往往和正式环境中不一样,宿主环境的路径往往最终导致明明测试好的脚本最终却出现各种路径问题.但是如果把路径写成绝对路径往往又造成脚本通用性不强,每迁移到一个新项目就需要重新修改脚本文件,对脚本的修改往往意味着导致脚本出错的风险.而Cake的相对路径机制则恰恰解决了相对路径因宿主环境而改变的问题,也就是说只要目录或者文件的相对关系是固定的,相对路径就不会出现问题.
在Cake里 相对路径都是以build.ps1文件为参照而形成的相对路径,因此只要文件和目录的结构不变,cake里的相对路径就不会有问题.
相对路径转绝对路径
可能有些操作可能不支持相对路径,这时候就要把相对路径转换成绝对路径,Cake里提供了一个MakeAbsolute方法接收一个DirectoryPath或者FilePath参数,把目录/文件的相对路径转换为绝对路径
以下示例把当前路径(build.ps1所在路径)转换成绝对路径
var path=MakeAbsolute(new DirectoryPath("./"));
注意,如果是想要把文件的相对路径转为绝对路径,则需要传入一个new Filepath("文件名")对象.
文件操作
文件重命名
文件重命名和普通通过重命名方法一样,就是把一个文件原地复制,把名字改掉,在Cake里可以通过CopyFile方法来实现
CopyFile("./bin/debug/buildDemo.pdb","./bin/debug/demo.pdb");
以上示例把buildDemo.pdb重命名为demo.pdb
拷贝文件夹
拷贝文件夹可以通过CopyDirectory指定要拷贝的文件夹和要拷贝到的目录即可.
拷贝文件夹没没有排除选项,而是完整把一个文件夹拷贝到另一个地方
把文件复制到文件夹
可以通过CopyFiles()方法把文件拷贝到一个文件夹,它接收一个IEnumerable类型选项,包含的是文件路径,我们可以通过GetFiles()方法获取所有文件,然后通过where过滤掉特定类型,最后把特定的文件复制到指定文件夹
复制文件和文件夹的方法都以copy开头,如果是想要移动文件或者文件夹,方法一般都是以
Move开头
压缩文件/解压文件
可能通过Zip方法把文件进行压缩,并且可以指定一个IEnumerable类型的FilePath集合,指定只压缩特定的文件
对应地,解压方法为
Unzip
删除文件/文件夹
有DeleteDirectory(s)和DeleteFile(s)方法
清空文件夹
CleanDirectory(s)方法
目录/文件是否存在
DirectoryExists/FileExists方法
实践中往往需要检测文件夹是否存在,如果不存在则创建,此时可以使用
EnsureDirectoryExists方法
相对路径计算
有时候我们获得到了两个文件或者目录的位置,此时如何想要获取它们之间的相对位置,可以通过DirectoryPath对象里的GetRelativePath来计算,需要注意的是计算相对路径的两个路径必须都是绝对路径,(如果是 相对路径,我们可以很容易地通过MakeAbsolute方法转为绝对路径)
.net持续集成cake篇之常见文件及路径操作的更多相关文章
- .net持续集成cake篇之cake介绍及简单示例
cake介绍 Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake没有实现,我们还可以很容易地通过扩展Cak ...
- .net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本
使用Visual Studio来开发工具 前面我们都是通过手写或者复制的方法来编写Cake文件,Cake使用的是C#语言,如果仅使用简单的文本编辑器来编写显然效率是非常低下的,本节我们讲解如何使用ca ...
- .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取
系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...
- .net持续集成sonarqube篇之 sonarqube触发webhook
系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...
- 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)
系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...
- C# 文件与路径操作
OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...
- 持续集成高级篇之Jekins参数传入与常见任务
系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...
- .net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)
系列目录 Sonarqube结合Jenkins与常见问题 我们引入sonarqube组件的最终目的是要为整个Ci环境服务的,如果不能集成于当前的Jenkins CI,那么我们做的很多关于sonarqu ...
- 持续集成高级篇之Jekins脚本参数化构建
系列目录 本系列已经很久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任 ...
随机推荐
- maven 学习---部署基于Maven的war文件到Tomcat
在本教程中,我们将学习如何使用Maven的Tomcat插件打包并部署一个WAR文件到Tomcat(Tomcat的6和7. 要用到工具: Maven 3 Tomcat 6.0.37 Tomcat 7.0 ...
- Java打印9*9乘法表
废话不多说直接贴代码, 先放一个标准的正三角形状的 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System ...
- day06 作业
猜年龄游戏 ''' 1. 给定年龄,用户可以猜三次年龄 2. 年龄猜对,让用户选择两次奖励 3. 用户选择两次奖励后可以退出 ''' import random age = random.randin ...
- Django框架 --序列化组件(serializer)
一 .Django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers from djang ...
- python中杀死线程
有时候有这样的需要,在某种情况下,需要在主线程中杀死之前创建的某个线程,可以使用下面的方法,通过调用python内置API,在线程中抛出异常,使线程退出. import threading impor ...
- 常用的linux命令大全
之前做过两年的运维,用过很多命令,深切体会到某些linux命令熟练掌握后对效率提升有多大.举个简单的例子,在做了研发后经常会有跑一些数据,对于结果数据的处理,我们的产品同学一般都习惯于用excel做统 ...
- django中嵌套的try-except
# 因为此时为yaml模板,而且只抓取node port,所以这样处理效率快content_dict = parse_yaml(content.replace("{{", &quo ...
- 201871010101-陈来弟《面向对象程序设计(JAVA)》 第14周学习总结
实验十二 Swing图形界面组件(一) 实验时间 2019-11-29 第一部分:基础知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题 ...
- 使用Windows api 获得系统时间并生成文件夹
// 使用window api 获得系统时间 // 生成 #include "stdafx.h" #include <Windows.h> #include <d ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...