小编Por*_*Man的帖子

为什么-Verbose禁用$ ErrorActionPreference的使用?

我们来看看这个剧本:

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)

powershell

7
推荐指数
1
解决办法
302
查看次数

使用/ MT标志时,Robocopy似乎无效

此命令有效:

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标志将输出重定向到一个文件,但它仍然只是在一个文件中以相同的输出坐在那里.

它是在背景中做我看不到的东西,还是我做错了什么?

robocopy

6
推荐指数
1
解决办法
6439
查看次数

为什么我的Git存储库比工作目录大得多?

我刚刚创建了一个新的存储库并创建了初始提交.

工作目录为2 GB.但.git目录高达15 GB.

为什么只有一次提交的git存储库几乎是工作目录的8倍?

难道我做错了什么?有没有什么办法解决这一问题?

git

6
推荐指数
1
解决办法
1406
查看次数

如何在使用未定义变量时使用powershell来发出警告或错误?

在powershell脚本中,如果我尝试使用未定义的变量,它会继续运行,而不是通过我所做的任何警告或错误来指示.

例如,以下脚本

echo "a"
echo $nonexistant_variable
echo "c"
Run Code Online (Sandbox Code Playgroud)

给出输出

a
c
Run Code Online (Sandbox Code Playgroud)

有没有办法让powerShell让我知道我试图使用的变量是未定义的?

powershell

6
推荐指数
1
解决办法
751
查看次数

“脚本不允许使用 staticMethod...”,但没有未决的签名批准

在我的管道脚本中,我收到错误org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods drop java.util.List int

到现在为止还挺好。但是当我转到 ScriptApproval 页面时,没有待处理的签名批准。

奇怪的是,在不同的 Jenkins 系统上,当我运行相同的命令时,它会将它添加到待处理的脚本批准中,并且我能够很好地使用它。

有没有办法

  1. 强制它添加该功能作为待定的脚本批准?
  2. 手动将其添加到批准的脚本列表中?

jenkins-pipeline

6
推荐指数
1
解决办法
6644
查看次数

在存储库之间共享 GitHub 环境

我想要将它们部署到数百个存储库和数十个环境。

是否可以定义一次环境并在多个存储库中使用它,而不是在每个存储库中创建每个环境?

如果没有,是否有其他解决方法来创建数千个不同的环境?

github-actions

6
推荐指数
0
解决办法
119
查看次数

如何使std :: vector类型安全

我有一个名为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的新类,但它没有自己的实现,但我知道标准库容器不喜欢继承.

我还缺少其他选择吗?

c++ stl

5
推荐指数
1
解决办法
398
查看次数

即使测试失败,我也可以让谷歌测试返回 0 吗?

我在 VS 2012 中的 C++ 项目的构建后步骤中调用了 googletest。

自然地,当任何测试失败时,googletest 命令返回失败 (-1),并且整个项目被 Visual Studio 标记为失败。

我不要那个。我希望运行 googletest,并希望在输出中查看结果,但如果并非所有测试都通过,我不想使项目失败。

是否有任何标志可以传递给 googletest 以便它始终返回成功(零)?

c++ googletest

5
推荐指数
1
解决办法
2668
查看次数

检查环境变量时,简单的Jenkins管道失败

在我的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 - >进程内脚本批准,但没有任何内容.

jenkins jenkins-pipeline

5
推荐指数
1
解决办法
9014
查看次数

如何防止 Multibranch Pipeline 作业在 master 上克隆 repo

我有一个 Multibranch Pipeline 作业,指向一个 Bitbucket Server 存储库。

在 Jenkinsfile 上执行任何操作之前,它总是在主节点工作区中执行存储库的完整克隆。

它为每个分支创建一个新的工作区,并带有存储库的新克隆。

对于一些较大的存储库,这不仅会花费大量时间,而且还会占用主节点上的大量空间。

是否可以执行以下任何操作:

  1. 下载(并执行)Jenkinsfile 而不克隆完整的存储库
  2. 在 master 以外的另一个节点上克隆存储库
  3. 自动删除自动删除作业的工作区

jenkins jenkins-pipeline

5
推荐指数
1
解决办法
1241
查看次数