我们来看看这个剧本:
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
try
{
echo "ErrorActionPreference = $ErrorActionPreference"
Copy-Item "this_is_a_bad_path"
Write-Host "Did not catch error"
}
catch
{
Write-Host "Caught Error"
}
Run Code Online (Sandbox Code Playgroud)
这与以下输出一样正常工作:
ErrorActionPreference = Stop
Caught Error
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加-verbose到该行,给我Copy-Item -verbose "this_is_a_bad_path",$ErrorActionPrefrence不再使用,我得到这个输出:
ErrorActionPreference = Stop
Copy-Item : Cannot find path 'C:\Users\porter.bassett\this_is_a_bad_path' because it does not exist.
At C:\Users\porter.bassett\dot.ps1:7 char:3
+ Copy-Item -verbose "this_is_a_bad_path"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\porter...s_is_a_bad_path:String) [Copy-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
Did not catch error …Run Code Online (Sandbox Code Playgroud) 此命令有效:
robocopy \\build7\d$ d: *.* /mir /XD "System Volume Information" /XD "$Recycle.Bin"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加/ MT标志时:
robocopy \\build7\d$ d: *.* /mir /XD "System Volume Information" /XD "$Recycle.Bin" /MT
Run Code Online (Sandbox Code Playgroud)
我得到的唯一输出是
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Thu Apr 09 09:11:27 2015
Source : \\build7\d$\
Dest : D:\
Files : *.*
Exc Dirs : System Volume Information
$Recycle.Bin
Options : *.* /S /E /COPY:DAT /PURGE /MIR /MT:8 /R:1000000 /W:30
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
它给了我输出,然后就坐在那里.
我尝试使用/ LOG标志将输出重定向到一个文件,但它仍然只是在一个文件中以相同的输出坐在那里.
它是在背景中做我看不到的东西,还是我做错了什么?
我刚刚创建了一个新的存储库并创建了初始提交.
工作目录为2 GB.但.git目录高达15 GB.
为什么只有一次提交的git存储库几乎是工作目录的8倍?
难道我做错了什么?有没有什么办法解决这一问题?
在powershell脚本中,如果我尝试使用未定义的变量,它会继续运行,而不是通过我所做的任何警告或错误来指示.
例如,以下脚本
echo "a"
echo $nonexistant_variable
echo "c"
Run Code Online (Sandbox Code Playgroud)
给出输出
a
c
Run Code Online (Sandbox Code Playgroud)
有没有办法让powerShell让我知道我试图使用的变量是未定义的?
在我的管道脚本中,我收到错误org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods drop java.util.List int。
到现在为止还挺好。但是当我转到 ScriptApproval 页面时,没有待处理的签名批准。
奇怪的是,在不同的 Jenkins 系统上,当我运行相同的命令时,它会将它添加到待处理的脚本批准中,并且我能够很好地使用它。
有没有办法
我想要将它们部署到数百个存储库和数十个环境。
是否可以定义一次环境并在多个存储库中使用它,而不是在每个存储库中创建每个环境?
如果没有,是否有其他解决方法来创建数千个不同的环境?
我有一个名为IndexSet的对象,当前定义为std :: vector,我想将其定义为单独的类型.
我希望能够与它进行交互,就好像它是一个向量,但我也想要类型保护,这样当我想使用IndexSet时,我不会意外地使用"普通"向量.
我已经能够提出三种选择,如何做到这一点,没有一个让我高兴.我希望有一个我失踪的第四个.
选项#1:typdef
typdef vector<int> IndexSet
Run Code Online (Sandbox Code Playgroud)
这允许我完全像我的向量一样使用IndexSet,但它给了我零类型保护.我能够将一个向量传递给一个期望一个没有投诉的IndexSet的函数.
选项#2:公共包装类
class IndexSet
{
public:
vector<int> indexes;
};
Run Code Online (Sandbox Code Playgroud)
这将给我类型保护,但它要求我使用与它交互的间接级别.而不是说set.push_back(1); 我不得不说set.indexes.push_back(1);
选项#3:私有包装类
class IndexSet
{
public:
push_back....
operator[]...
etc...
private:
vector<int> indexes
};
Run Code Online (Sandbox Code Playgroud)
这将给我两种类型保护,并允许我直接与IndexSet交互,就好像它是一个向量,但只有我首先为我想要与我的IndexSet一起使用的每个std :: vector方法创建包装器方法.
当然,我真正想要做的是创建一个继承自vector的新类,但它没有自己的实现,但我知道标准库容器不喜欢继承.
我还缺少其他选择吗?
我在 VS 2012 中的 C++ 项目的构建后步骤中调用了 googletest。
自然地,当任何测试失败时,googletest 命令返回失败 (-1),并且整个项目被 Visual Studio 标记为失败。
我不要那个。我希望运行 googletest,并希望在输出中查看结果,但如果并非所有测试都通过,我不想使项目失败。
是否有任何标志可以传递给 googletest 以便它始终返回成功(零)?
在我的multibranch管道作业中,我可以成功访问这样的环境变量:
echo "$env.BRANCH_NAME"
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试与同一个环境变量进行比较,它会抛出异常:
if($env.BRANCH_NAME == 'master')
{
echo "This is the master branch"
}
Run Code Online (Sandbox Code Playgroud)
这是我给出的错误堆栈的顶部:
groovy.lang.MissingPropertyException: No such property: $env for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:28)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:4)
Run Code Online (Sandbox Code Playgroud)
我需要在这里做一些脚本批准吗?我查看了Manage Jenkins - >进程内脚本批准,但没有任何内容.
我有一个 Multibranch Pipeline 作业,指向一个 Bitbucket Server 存储库。
在 Jenkinsfile 上执行任何操作之前,它总是在主节点工作区中执行存储库的完整克隆。
它为每个分支创建一个新的工作区,并带有存储库的新克隆。
对于一些较大的存储库,这不仅会花费大量时间,而且还会占用主节点上的大量空间。
是否可以执行以下任何操作: