首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Concourse在源内部构建工件,将所有内容传递给下一个任务。

Concourse在源内部构建工件,将所有内容传递给下一个任务。
EN

Stack Overflow用户
提问于 2016-06-10 14:13:12
回答 2查看 4.2K关注 0票数 4

我想为我的web应用程序在Concourse中设置一个构建管道。应用程序是使用Node构建的。

我们的计划是这样做:

代码语言:javascript
复制
                                        ,-> build style guide -> dockerize
source code -> npm install -> npm test -|
                                        `-> build website -> dockerize

问题是,在npm安装之后,将创建一个新容器,从而丢失node_modules目录。我想将node_modules传递给后面的任务,但是因为它“在”源代码中,所以它不喜欢它,并给了我

代码语言:javascript
复制
invalid task configuration:
  you may not have more than one input or output when one of them has a path of '.'

这是我的工作安排

代码语言:javascript
复制
jobs:
  - name: test
    serial: true
    disable_manual_trigger: false
    plan:
      - get: source-code
        trigger: true

      - task: npm-install
        config:
          platform: linux
          image_resource:
            type: docker-image
            source: {repository: node, tag: "6" }
          inputs:
            - name: source-code
              path: .
          outputs:
            - name: node_modules
          run:
            path: npm
            args: [ install ]

      - task: npm-test
        config:
          platform: linux
          image_resource:
            type: docker-image
            source: {repository: node, tag: "6" }
          inputs:
            - name: source-code
              path: .
            - name: node_modules
          run:
            path: npm
            args: [ test ]

更新2016-06-14

输入和输出只是目录。因此,将所需输出放入输出目录,然后将其传递给同一作业中的另一个任务。输入和输出不能重叠,因此要使用npm,必须将node_modules或整个源文件夹从输入文件夹复制到输出文件夹,然后在下一个任务中使用它。

不过,这在两种工作之间不起作用。到目前为止,我看到的最好的建议是使用临时的git存储库或桶来推动一切。必须有更好的方法来做到这一点,因为我想要做的部分是避免大量的网络IO。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-27 09:14:32

在作业之间有专门为npm的这种用例设计的资源。我已经用了几个星期了:

https://github.com/ymedlop/npm-cache-resource

它基本上允许您缓存npm的第一次安装,并将其作为文件夹注入到管道的下一个作业中。如果您希望缓存比node_modules更多的话,您也可以轻松地从读取该资源的源中设置自己的缓存资源。

实际上,我正在结合Nexus代理使用这个npm缓存资源,以进一步加快初始npm的安装速度。

请注意,有些npm包具有本机绑定,需要使用与linux版本标准库相匹配的标准库构建,因此,如果您经常在不同类型的容器之间移动,您可能会遇到libmusl等方面的一些问题,在这种情况下,我建议您通过管道使用相同的容器类型,或者重新构建有关的node_modules .

对于gradle ( npm是以其为基础的) https://github.com/projectfalcon/gradle-cache-resource也有类似的

票数 4
EN

Stack Overflow用户

发布于 2016-08-19 14:39:18

不过,这在两种工作之间不起作用。

这是故意的。作业中的每个步骤(get、任务、put)都在一个孤立的容器中运行。输入和输出仅在单个作业中有效。

把乔布斯联系在一起的是资源。推动git是一种方式。几乎可以肯定的是,使用blob存储(例如S3)或文件存储(例如FTP)会更快、更容易。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37750463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档