小编Jes*_*ick的帖子

rsync排除根据.gitignore&.hgignore&svn:ignore like --filter =:C

Rsync包含一个漂亮的选项--cvs-exclude"以与CVS相同的方式忽略文件",但CVS已经过时多年.有没有办法让它也排除现代版本控制系统(Git,Mercurial,Subversion)会忽略的文件?

例如,我从GitHub检出了很多Maven项目.通常它们.gitignore至少包括一个列表target,默认的Maven构建目录(可能存在于顶层或子模块中).由于这些目录的内容完全是一次性的,并且它们可能远远大于源代码,因此我想在使用rsync进行备份时将它们排除在外.

当然我可以明确地--exclude=target/但是会意外地抑制恰好被命名target并且不应该被忽略的不相关目录.

我可以为我的磁盘上的任何.gitignore,.hgignoresvn:ignore属性中提到的所有文件名和模式提供完整的绝对路径列表,但这将是一个巨大的列表,必须由某种脚本生成.

由于rsync没有内置支持除CVS之外的VCS检出,是否有任何好的技巧可以为它们提供忽略模式?或者某种回调系统,可以询问用户脚本是否应该包含给定的文件/目录?

更新:--filter=':- .gitignore'正如LordJavac所建议的那样,Git和--filter=:CCVS 一样好,至少在我发现的例子中,尽管不清楚语法是否完全匹配.--filter=':- .hgignore'对Mercurial不起作用; 例如,rsync不能将.hgignore包含类似^target$(Git的Mercurial等价物/target/)的行视为正则表达式.对于Subversion来说似乎没什么用,因为你需要.svn/dir-prop-base为1.6或更早的工作副本解析,并且为1.7或更高版本的工作副本沮丧地举手.

svn git mercurial rsync

100
推荐指数
6
解决办法
2万
查看次数

如何访问参数化构建中的参数?

如何parameters在"工作流"Jenkins作业的"此构建参数化"部分中访问set?

测试用例

  1. 创建一个WORKFLOW作业.
  2. 启用"此构建已参数化".
  3. 添加foo具有默认值的STRING PARAMETER bar text.
  4. 将以下代码添加到Workflow Script:

    node()
    {
         print "DEBUG: parameter foo = ${env.foo}"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 跑步工作.

结果

DEBUG: parameter foo = null

groovy jenkins jenkins-pipeline

57
推荐指数
6
解决办法
14万
查看次数

在Jenkinsfile中失败

在某些情况下,我想失败的构建.我怎么做?

我试过了:

throw RuntimeException("Build failed for some specific reason!")
Run Code Online (Sandbox Code Playgroud)

事实上这确实无法构建.但是,日志显示异常:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.lang.RuntimeException java.lang.String
Run Code Online (Sandbox Code Playgroud)

这对用户来说有点混乱.有没有更好的办法?

groovy jenkins jenkins-pipeline

56
推荐指数
2
解决办法
5万
查看次数

管道将参数传递给下游作业

我正在使用Jenkins v2.1和集成的交付管道功能(https://jenkins.io/solutions/pipeline/)来编排两个现有的构建(构建和部署).

在我的参数化构建中,我有3个用户参数设置,也需要在管道中进行选择.

管道脚本如下:

node: {
    stage 'build'
    build job: 'build', parameters: [[$class: 'StringParameterValue', name: 'target', value: target], [$class: 'ListSubversionTagsParameterValue', name: 'release', tag: release], [$class: 'BooleanParameterValue', name: 'update_composer', value: update_composer]]

    stage 'deploy'
    build job: 'deploy', parameters: [[$class: 'StringParameterValue', name: 'target', value: target]]
}
Run Code Online (Sandbox Code Playgroud)

这个工作正常,除了BooleanParameterValue.当我构建管道时,抛出以下错误:

java.lang.ClassCastException: hudson.model.BooleanParameterValue.value expects boolean but received class java.lang.String
Run Code Online (Sandbox Code Playgroud)

如何解决此类型转换错误?或者甚至更好,是否有一种不那么麻烦的方式,我可以将所有管道参数传递给下游作业.

groovy jenkins jenkins-pipeline

52
推荐指数
5
解决办法
8万
查看次数

将Jenkins管道阶段显示为失败而不会使整个作业失败

这是我正在玩的代码

node {
    stage 'build'
    echo 'build'

    stage 'tests'
    echo 'tests'

    stage 'end-to-end-tests'
    def e2e = build job:'end-to-end-tests', propagate: false
    result = e2e.result
    if (result.equals("SUCCESS")) {
        stage 'deploy'
        build 'deploy'
    } else {
        ?????? I want to just fail this stage
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我将"端到端测试"阶段标记为失败,而不会使整个工作失败?传播假只是总是将舞台标记为真,这不是我想要的,但传播真实标志着失败的工作,我也不想要.

groovy jenkins jenkins-workflow jenkins-pipeline

48
推荐指数
5
解决办法
7万
查看次数

在Jenkins管道中构建期间访问阶段名称

假设我们有以下内容Jenkinsfile:

stage name: "Cool stage"
    sh 'whoami'
stage name: "Better stage"
    def current_stage = getCurrentStageName()
    echo "CONGRATULATIONS, you are on stage: $current_stage"
Run Code Online (Sandbox Code Playgroud)

问题是如何实施getCurrentStageName().我知道,我可以使用构建运行时的访问权限currentBuild.rawBuild.但是如何从这一点获得舞台名称?

我需要这个用于电子邮件通知中的一些自定义,以便我可以始终捕获失败的阶段名称并将其包含在电子邮件正文中.

groovy jenkins jenkins-workflow

22
推荐指数
4
解决办法
2万
查看次数

POSIX sh相当于Bash的printf%q

假设我有一个#!/bin/sh可以采用各种位置参数的脚本,其中一些可能包含空格,两种引号或两种引号等.我想迭代"$@"并为每个参数立即以某种方式处理它,或者保存以供以后使用.在脚本结束时,我想启动(可能exec)另一个进程,传递一些这些参数,所有特殊字符都保持不变.

如果我没有对参数进行处理,othercmd "$@"那么工作正常,但我需要提取一些参数并稍微处理它们.

如果我可以假设Bash,那么我可以printf %q用来计算我eval以后可以引用的args的引用版本,但这不适用于例如Ubuntu的Dash(/bin/sh).

是否printf %q可以使用内置函数和POSIX定义的实用程序在简单的Bourne shell脚本中编写任何等效文件,比如说我可以复制到脚本中的函数?

例如,脚本以ls相反的顺序尝试其参数:

#!/bin/sh
args=
for arg in "$@"
do
    args="'$arg' $args"
done
eval "ls $args"
Run Code Online (Sandbox Code Playgroud)

适用于许多情况:

$ ./handle goodbye "cruel world"
ls: cannot access cruel world: No such file or directory
ls: cannot access goodbye: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但不是在'使用时:

$ ./handle goodbye "cruel'st world"
./handle: 1: eval: Syntax error: Unterminated quoted …
Run Code Online (Sandbox Code Playgroud)

bash quotes printf posix sh

18
推荐指数
2
解决办法
3094
查看次数

Jenkins - 如何在项目基础上设置授权

在Jenkins中,我有两个不同的项目和两个我想要授权的用户:

User1只能查看,构建,部署Project1.

User2只能查看,构建,部署Project2.

我已经安装了基于角色的插件,但无法使其正常工作.请帮忙.

jenkins jenkins-plugins

16
推荐指数
2
解决办法
2万
查看次数

使用带有闭包映射的failFast会中断"并行"步骤

不确定这是我对Groovy的有限了解还是管道parallel步骤中的怪癖.failFast如果我使用map而不是单独传递每个闭包,我无法接受它:

def map = [:]
map['spam'] = {
    node {
        echo 'spam'
    }
}
map['eggs'] = {
    node {
        echo 'eggs'
    }
}
parallel map // Works.
parallel spam: map['spam'], eggs: map['eggs'], failFast: true // Works.
parallel map, failFast: true // Fails with exception.
Run Code Online (Sandbox Code Playgroud)

例外failFast是:

java.lang.IllegalArgumentException: Expected named arguments but got [{failFast=true}, {spam=org.jenkinsci.plugins.workflow.cps.CpsClosure2@51a382ad, eggs=org.jenkinsci.plugins.workflow.cps.CpsClosure2@718cb50d}]
    at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:276)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:111)
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-workflow jenkins-pipeline

14
推荐指数
1
解决办法
9900
查看次数

有哪些技术可以避免使用Jenkins工作流Groovy脚本进行脚本批准?

Jenkins Workflow插件的以下脚本:

def mapping = readFile 'a file'
mapping.eachLine {
      def line = it.tokenize('|')
      sh "${line[1]}"
}
Run Code Online (Sandbox Code Playgroud)

需要脚本批准:

staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods tokenize java.lang.String java.lang.String
staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods eachLine java.lang.String java.lang.String
Run Code Online (Sandbox Code Playgroud)

为了使脚本成功运行,必须尝试构建,必须授予手动批准,然后必须再次尝试另一个构建,依此类推.

对于大型脚本,保持白名单方法是一个相当繁琐的过程.

是否有一些groovy方法的子集不需要脚本批准和/或白名单?

groovy jenkins-workflow

11
推荐指数
1
解决办法
6708
查看次数