Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github组织中所有存储库的单个jenkins作业_Git_Jenkins - Fatal编程技术网

Github组织中所有存储库的单个jenkins作业

Github组织中所有存储库的单个jenkins作业,git,jenkins,Git,Jenkins,我们拥有一个Github组织,拥有数百个由贡献者编写的存储库。我们希望设置一个Jenkins服务器,为Github组织中任何repo中的每次提交执行特定的标准任务。预期的CI流非常简单: 用户提交对repomyorg/foobar的更改 Github组织范围内的webhook formyorg调用Jenkins服务器 Jenkins运行docker命令为myorg/foobar Jenkins将提交状态设置为挂起,包括指向命令进度输出的链接 完成后,Jenkins将最终提交状态更新为成功或失败

我们拥有一个Github组织,拥有数百个由贡献者编写的存储库。我们希望设置一个Jenkins服务器,为Github组织中任何repo中的每次提交执行特定的标准任务。预期的CI流非常简单:

  • 用户提交对repo
    myorg/foobar的更改
  • Github组织范围内的webhook for
    myorg
    调用Jenkins服务器
  • Jenkins运行docker命令为
    myorg/foobar
  • Jenkins将提交状态设置为挂起,包括指向命令进度输出的链接
  • 完成后,Jenkins将最终提交状态更新为成功或失败
  • 我是詹金斯的新手,完全不知道我需要设置哪些插件或工作类型

    我尝试为我的GitHub组织创建一个Jenkins“GitHub组织”,但它告诉我“这个文件夹是空的,没有找到包含可构建项目的存储库”。我也不清楚github组织webhook的配置位置


    我们不想为所有repo设置单独的jobs/jenkinsfiles/webhook,只需使用一个标准脚本,在每个repo中运行任何提交,并通过单个webhook触发它。这可能吗?

    您在这里有多个要求。让我们一个接一个地看

    a) Jenkins GitHub组织:这将扫描所有GitHub组织,并创建构建存储库所需的任意多个作业,因为Jenkins上只有一个作业不是标准。基本上,您丢失了历史数据(Jenkins不知道每次迭代都在构建不同的东西)。它在帮助中说“扫描GitHub组织(或用户帐户)以查找与某些已定义标记匹配的所有存储库。”

    b) 试着将Jenkins视为一个自动机,而不是承载所有构建/部署逻辑的东西。我所做的是创建诸如“build.sh”、“deploy.sh”等文件。这样,我就可以直接从shell构建和部署。因此,只有在这之后,我才为Jenkins创建脚本,它只调用构建/部署脚本,而不管它们实际做什么。詹金斯不需要知道。一个副作用是,您的所有项目“都可以以相同的方式构建”,不管它们是NodeJS、Python还是其他什么。当然,在某些情况下,您可能需要额外的依赖项,Docker在这方面确实可以提供帮助

    c) 我在过去也做过类似的事情,工作比存储库/分支/拉请求少。Jenkins有点像垃圾堆,一些插件可以帮上忙。但在你的情况下,如果你真的想要一份工作,你只需要一份常规的参数化工作。诀窍在于,您的Github组织global webhook不会指向Jenkins。它需要指向其他地方,一些您维护的代码。这段代码可以解析Github负载,对其进行分析,最终可以回调Github(“有此分支的请求吗?没有?然后忘记它”),以增强其决策树,并在最后使用您能够捕获的所有参数在Jenkins上触发单个作业。这些参数将告诉单个作业要克隆的repo、要部署到的env,即它。您已经知道脚本名称,因为它们是标准的

    d) 也就是说,我会问。。。你需要一个詹金斯吗?这个解析器小软件真的可以克隆您的repo,并在Docker容器中运行一些脚本吗?一个内部有所有依赖项的生成器docker容器

    e) 关于对GitHub的“回话”,我使用Python实现了这一点。有GitHub库,所以我能够从Jenkins那里得到一些东西,并通过API发布为GitHub提供构建状态。因为我实际上使用的是Jenkins实例,所以我的工具是中间人。在您的情况下,对于单个作业,Docker容器将很好地发挥作用

    希望这能从另一个角度有所帮助


    如果您真的想使用Jenkins实例,我在这里所说的大部分内容仍然可以使用。

    我不确定这个答案对您有多大帮助,但即使它提供了一些关于Jenkins管道的见解,我也会很高兴

    我正在使用Jenkins pipelines详细说明要遵循的过程,如果不是现在,您需要将构建和部署到pipelines以作为代码进行基础设施

    从Jenkins插件开始,以下是我将在这里解释的过程的必需插件

    • Github组织-用于扫描具有多个回购协议的组织
    • 多分支管道-用于为回购中的所有分支/PRs自动创建管道。这有助于验证功能分支和PR更改
    詹金斯构型

  • 从以下选项创建
    Github组织
  • 从上述步骤配置新创建的组织<代码>所有者应该是你的
    组织
    ,那里有上百份回购协议
  • 另外,配置什么文件和什么分支以查看repo以触发构建<代码>脚本路径是为repo执行步骤(可能是构建和部署)的文件。因此,只有当repos中有一个具有此名称的文件可用时,才会在Jenkins中检测或显示所有repos

    Jenkins按照此处提到的间隔扫描配置的组织。它检测任何回购的添加/删除,并提交。可以根据需要配置要存储的构建数量

    Git回购/组织配置

    在github中配置Webhook

    配置需要通知Jenkins的事件

    PRs的分支保护和状态检查

    保护b
    curl -i -u "user":"password" "https://github.com/your_organization" | grep "codeRepository" | awk -F '"' '{print $8}' | while read line; do
        mkdir "_temp_repo"
        cd "_temp_repo"
    
        # `--depth=1` clones the last commit only improving the speed of the clone
        # if you want to clone a specific branch add `-b branch` to the command below
        git clone --depth=1 "https://github.com"$line .
    
        # execute here your peding commands...
    
        git add .
        git commit -am "[pending] XPTO..."
    
        git push
    
        # execute here your success/failure commands...
    
        git add .
        git commit -am "[success/failure] XPTO..."
    
        git push
    
        cd ..
        rm -rfv "_temp_repo"
    done