如何从jenkins全局库生成groovydoc

时间:2017-06-29 10:48:32

标签: jenkins-pipeline groovydoc

我有jenkins global library,我想记录它。我想使用groovydoc。

该库包含类和全局变量

src/<package-name>
vars

为类生成文档没有问题:

groovydoc -sourcepath src -d doc 'main.pipeline' '*.groovy'

但是如何为变量生成文档呢?

5 个答案:

答案 0 :(得分:1)

Maven解决方案:

<plugin>
    <groupId>org.codehaus.gmavenplus</groupId>
    <artifactId>gmavenplus-plugin</artifactId>
    <version>1.7.1</version>
    <executions>
      <execution>
        <goals>
          <goal>addSources</goal>
          <goal>addTestSources</goal>
          <goal>compile</goal>
          <goal>compileTests</goal>
          <goal>groovydoc</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <sources>
        <source>
          <directory>${project.basedir}/vars</directory>
          <includes>
            <include>**/*.groovy</include>
          </includes>
        </source>
        <source>
          <directory>${project.basedir}/src</directory>
          <includes>
            <include>**/*.groovy</include>
          </includes>
        </source>
      </sources>
      <testSources>
        <testSource>
          <directory>${project.basedir}/test</directory>
          <includes>
            <include>**/*.groovy</include>
          </includes>
        </testSource>
      </testSources>
      <docTitle>Jenkins Shared Libs</docTitle>
      <header>${titre}</header>
      <footer>${titre}</footer>
      <windowTitle>${titre}</windowTitle>
    </configuration>
  </plugin>

答案 1 :(得分:0)

今天在工作中遇到同样的问题,遗憾的是现在无法尝试我的解决方案,但请尝试使用包含function getObject(str) { var temp = document.createElement("div") temp.innerHTML = str var data = { type: undefined, time: undefined }; var elems = temp.getElementsByTagName("p") var match = elems[0].textContent.match(/::([^\/]+)\/(.+)/); if (match) { data.type = match[1] data.time = match[2] elems[0].remove() } data.content = temp.innerHTML; console.log(data) return data } var str1 = "<p>::type/12</p><p>Some content</p><p>Some more content</p>" var str2 = "<p>Some content</p><p>Some more content</p>" getObject(str1) getObject(str2)src的目录作为vars。然后,您可以在命令中引用sourcepathsrc子目录,如下所示:

vars

如果这不起作用,请尝试单独引用每个包,如下所示:

groovydoc -sourcepath [PATH_TO_YOUR_LIB] -d doc src\ vars\

或者,或者作为变通方法,您可以使用IntelliJ IDE及其“Generate GroovyDoc ...” - 工具:

  1. 启动IntelliJ并打开任何Groovy项目(如果没有现有项目,请创建一个新项目)
  2. 从菜单栏groovydoc -sourcepath [PATH_TO_YOUR_LIB] -d doc src\org.foo.some_package src\org.foo.some_other_package vars\
  3. 选择包含jenkins管道库的源路径为Tools > Generate GroovyDoc...(包含Input directorysrc),任何路径为vars
  4. Output directory
  5. GroovyDoc应该在指定的Start

答案 2 :(得分:0)

我面临着同样的问题。我只需要概述一下参数。我知道有很多改进的空间,但是适用于我的用例:

import groovy.io.FileType
import java.util.regex.*;

class DocGenerator {
    String run(String root_path) {


        def list = []

        def dir = new File(root_path)
        dir.eachFileRecurse(FileType.FILES) { file ->
            if (file.name.contains("groovy"))
                list << file
        }

        String output = "| Method | Doc |\n"
        output += "| ------ | ------ |\n"

        list.each {
            output += "| ${it.name.replace(".groovy","")} | ${getComment(it.text.replace("\r\n","<br>"))} |\n"
        }

        println(output)
        return output
    }

    String getComment(String txt) {


        String re1 = "(\\/\\*[\\d\\D]*?\\*\\/)";    // C Comment 1
        String re2 = ".*?";    // Non-greedy match on filler
        String re3 = "def";    // Word 1
        String re4 = ".*?";    // Non-greedy match on filler
        String re5 = "call";    // Word 2

        Pattern p = Pattern.compile(re1 + re2 + re3 + re4 + re5, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
        Matcher m = p.matcher(txt);
        if (m.find()) {
            String ccomment1 = m.group(1);

            return m.group(1)
        }

    }

}

app = new DocGenerator()
app.run "C:\\Git\\JenkinsSharedLibrary\\vars"

我的输出旨在添加到 readme.md 中。但是我想你明白了

答案 3 :(得分:0)

对我有用的东西

groovydoc -d docs -sourcepath "src;." my.package vars

vars中的所有内容导出为DefaultPackage,并将my.package文件夹中包含的src导出。

答案 4 :(得分:0)

为了确保在正确的程序包中报告所有内容,而不必枚举所有程序包,我使用了:

mkdir -p doc/

groovydoc -d doc -private -nomainforscripts -sourcepath src:vars \
    $(find src/ vars/ -name \*.groovy -printf '%P\n')

这个咒语使Groovydoc说服了正确的软件包,而又不需要我单调乏味地列出所有软件包,这是主要的挑战。

如果您的find没有-printf,请用-printf '%P\n'替换| cut -d '/' -f 2-。效果是一样的。除去开头的src/vars/