小编dag*_*dag的帖子

用于定义自定义存储库的 Gradle 函数 (Kotlin)

正如Gradle 函数中已经问的那样,定义自定义 Maven 存储库?我想为存储库块定义命名函数。他们应该配置公共(但企业内部)存储库。

我们有一个自定义的 gradle 发行版,其中这些函数应该通过init.d script定义。

尽管上述问题中的代码适用于 groovy 脚本,但不适用于*.gradle.kts.

我希望能够使用Kotlin 扩展,它们在初始化脚本中运行得很好:

// init.d/repositories.gradle.kts

fun RepositoryHandler.buildRepo() {
    maven {
        url =  java.net.URI(System.getenv("MAVEN_BUILD_REPO_URL"))
        credentials {
            username = System.getenv("MAVEN_BUILD_REPO_URL")
            password = System.getenv("MAVEN_BUILD_REPO_URL")
        }
    }
}

allprojects {
    repositories {
        buildRepo()
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,一旦有人尝试在实际项目构建文件中使用它们,这些扩展就会消失:

repositories {
    buildRepo()
}
Run Code Online (Sandbox Code Playgroud)

对于 build.gradle 文件,错误是:

Could not find method buildRepo() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.
Run Code Online (Sandbox Code Playgroud)

对于 build.gradle.kts 来说,这是编译失败:

Script compilation error:

  Line 3:     buildRepo() …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin

9
推荐指数
1
解决办法
718
查看次数

我可以在个别日程表上运行Jenkins Pipeline步骤或阶段吗?

我对Jenkins管道相对较新,并想知道是否可以将我当前的构建配置移植到Jenkinsfile.

目前,每个项目都有一个CI作业,一旦有人签入就会建立.这只是一个构建检查,不进行测试或静态代码分析.第二个Job完成整个构建,包括长时间运行的集成测试和sonarqube分析.无论这个特定项目的变化是否发生,第二个计划每天运行一次(每晚一次).

现在,如果我想将该配置移植到Jenkins Pipeline脚本中,我显然可以使用单独的脚本配置两个作业,但更有趣的部分是将它包装到Jenkins文件中,这样我就可以使用Multibranch Pipeline作业类型了不必重复SCM之外的任何配置.

问题是,如果可以将构建步骤(并将之前不再需要的构建中的步骤中止)推迟到另一个日程表 - 例如,仅在每晚的基础上运行集成测试?其他人如何采用快速构建检查的问题与在每次签入时可能没用的长期运行任务?

我还没有看到为Jenkins文件选择另一个名称的可能性(在multibranch管道作业类型中),因此可以有一个文件用于CI作业,另一个文件用于夜间.评估作业名称的脚本内部的条件可能是可能的,但对我来说看起来并不"正确",并且它不能解决每天晚上强制构建的问题.

感谢Daniel的任何想法

jenkins sonarqube jenkins-pipeline

8
推荐指数
2
解决办法
4683
查看次数

git-p4 消息和作者编码

今天我可以将一些相当旧的 perforce 存储库迁移到 git。虽然这确实很有趣,但有一件事引起了我的注意。提交消息中的所有特殊字符甚至作者姓名的编码都不正确。

所以我试图调查问题出在哪里。

  • 首先perforce服务器不支持unicode,所以设置P4CHARSET没有效果,但是Unicode clients require a unicode enabled server.
  • 然后我检查了简单命令的输出,例如p4 userswich 实际上在 ANSI 中(咨询 notepad++,或根据file -bi重定向输出的 ISO-8859-1)
  • 命令locale显示 LANG=en_US.UTF-8 ...

毕竟我的猜测是所有 p4 客户端输出都采用 ISO-8859-1 格式,但 git-p4 假定采用 UTF-8 格式。

我尝试重写提交消息

git filter-branch --msg-filter 'iconv -f iso-8859-1 -t utf-8' -- --all
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题,特别是因为它无意重写作者姓名。

有人猜测如何在 git-p4 接收输出之前强制将输出转换为 UTF-8 吗?

更新:

我试图用一个简单的 shell 脚本“覆盖”默认的 p4 命令输出,该脚本是我添加到 PATH 中的

/usr/bin/p4 $@ | iconv -f iso-8859-1 -t utf-8
Run Code Online (Sandbox Code Playgroud)

但这会破坏明显使用的编组Python对象:

  File "/usr/local/bin/git-p4", line 2467, in getBranchMapping
    for …
Run Code Online (Sandbox Code Playgroud)

python git bash perforce git-p4

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

如何获取Jenkins Multibranch管道作业的displayName

我把所有的Jenkins逻辑放在一个结构化的管道脚本(又名Jenkinsfile)中.

如果出现问题,我发送邮件.对于主题,我想使用displayName作业而不是作业ID env.JOB_NAME(因为它们是由访问控制模式驱动而不是可读性).

使用正常的管道作业我可以使用,currentBuild.rawBuild.project.displayName但对于多分支管道,这只是分支名称.

或者是否有更好的方法来获得用户友好的名称,然后遍历rawBuild?

jenkins jenkins-pipeline multibranch-pipeline

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