我想为我的web应用程序在Concourse中设置一个构建管道。应用程序是使用Node构建的。
我们的计划是这样做:
,-> build style guide -> dockerize
source code -> npm install -> npm test -|
`-> build website -> dockerize问题是,在npm安装之后,将创建一个新容器,从而丢失node_modules目录。我想将node_modules传递给后面的任务,但是因为它“在”源代码中,所以它不喜欢它,并给了我
invalid task configuration:
you may not have more than one input or output when one of them has a path of '.'这是我的工作安排
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。
发布于 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也有类似的
发布于 2016-08-19 14:39:18
不过,这在两种工作之间不起作用。
这是故意的。作业中的每个步骤(get、任务、put)都在一个孤立的容器中运行。输入和输出仅在单个作业中有效。
把乔布斯联系在一起的是资源。推动git是一种方式。几乎可以肯定的是,使用blob存储(例如S3)或文件存储(例如FTP)会更快、更容易。
https://stackoverflow.com/questions/37750463
复制相似问题