How to use stages in multi language builds


I can’t quite wrap my head around the documentation and the examples to figure out what I need.
I have a repo that contains golang and node_js code. I want to run two stages that

  1. tests/builds the go code
  2. tests/builds the js code
    and then the output of both those builds should run in an after_success step to build a single docker image with the compiled files.

I’ve tried with the matrix but am getting two docker images built:

  - docker

    - language: go
        - "1.11"
        - make test
        - make build

    - language: node_js
        - "7"
      script: yarn run build

  - docker build


What does this configuration give you, and how does it fall short of your expectations?


The problem is that the js build takes a little bit longer to execute, but the after_success executes before yarn run build is complete, and the files generated are not in the docker image.

My expectation is that after_success only runs once, after all jobs are complete and successful.


If you want these two jobs to be in different stages (and guarantee sequential execution), you need to define different stage values. This is explained in


The ordering of the jobs doesn’t matter, they just have to all run before after_success

But, since running them sequentially isn’t a hard requirement at this point, using stages would be ok with me. However the documentation of stages (or any examples I found) does not show me how to use multiple languages. Can you take my example and convert it to use stages?


I think I was overlooking a critical element of your question.

Jobs are run independently within a build. One job does not have any clue as to what the rest are doing. So,

This is not possible.

I suggest combining the builds into a single job. Use nvm to manage Node.js versions if necessary.


ok, that was something I looked into for a workaround already.
What I wanted to do was use a go image as a base, then install node on it, and then use that to build the jobs, but using a custom image seemed like a lot more overhead to do this.

so…can you give me an example of running these two languages in one job?