Jenkins 与 kotlin 共享库

Jenkins shared libraries with kotlin

我必须在 groovy 编写的共享库中添加一些 kotlin 编写的 类,以便在我的 jenkins 管道中使用它。但是,这些 类 不可用:

WorkflowScript: 19: unable to resolve class package.name.KotlinClass

我对 groovy 类 没有同样的问题。我认为问题是我没有声明任何像 compileKotlin 这样的任务,但我应该在哪里声明它?是什么推动了从共享插件库构建源代码,这个过程是可配置的吗?

如果我对问题的理解正确,你在 Jenkins 中有一个共享库,管道会使用它。在该共享库中,您希望 groovy 调用从 kotlin 编译的 类。

最好的方法是让一个单独的进程编译 kotlin 并将 JAR 发布到 Maven 存储库中。完成后,您的 groovy 共享库可以使用 @Grab 获取 JAR。 https://www.jenkins.io/doc/book/pipeline/shared-libraries/#using-third-party-libraries 中对此进行了介绍,其工作原理大致如下:

@Grab('org.apache.commons:commons-math3:3.4.1')
import org.apache.commons.math3.primes.Primes
void parallelize(int count) {
  if (!Primes.isPrime(count)) {
    error "${count} was not prime"
  }
  // …
}

如果您想从您自己的私有 Maven 存储库而不是 Maven Central 解析该 JAR,您还可以添加 @GrabResolver 注释,如此处 https://docs.groovy-lang.org/latest/html/documentation/grape.html#Grape-SpecifyAdditionalRepositories

@GrabResolver(name='restlet', root='http://maven.restlet.org/')
@Grab('org.apache.commons:commons-math3:3.4.1')

你会 运行 到这里的一个问题是你不能将凭据添加到那个 @GrabResolver 而且我不知道有什么方法可以将凭据放入 groovy 沙箱来制作适用于 Jenkins 共享库。

正如 Jenkins 自己的文档所暗示的,另一种方法是将所需的功能构建到它自己的可执行文件中,并确保可执行文件在 Jenkins 共享库被调用的构建过程中可用。