Using multiple languages in CI


I want to use Python for building pages with Mkdocs while automatically triaging issues and merger requests with GitLab Triage gem. Is it possible to use 2 or more programming languages without pulling 2+ Docker images or do I need to compile and build them manually?

The Full Story

On December 1 at 7:20, I committed 445 additions and 10 deletions to MadeByThePinsTeam-DevLabs/contributing's staging branch. I carefully watched the CI logs to write what happened.

Expectations vs. Reality on CI Logs

What I Expect: Successfully build the static files and deploy to GL Pages, while using GitLab Triage on schedules so I can merge it safely to master.

What Really Happened: The CI went berserk, echoing the service runner blah blah blah probably didn’t run errors.

Possible Solutions

  • Look for SSGs written in Ruby, which is too complicated.
  • Try GitLab Build Images, but images with Python included aren’t currently available as of the date when this thread posted.
  • Roam around DuckDuckGo and Docker Hub for any available solutions about the issue.
  • Temporary use Ruby first with GL Triage only in meanwhile (currently option using).

Related GitLab Runners Issues

This will be useful if you want to learn more about the issue. Feel free to update.


Answering just the question in your summary, why can’t you use a single image, e.g. alpine:latest and install the languages in your jobs’ scripts?

1 Like

Hmm, let me try that suggestion. Will be tested in near future? But before I can use a single image and install languages, do I need to sudo apt install blah blah blah or use Homebrew?

I know only sudo apt install blah blah blah. Homebrew is mostly for Mac, correct?

You somehow lost a slash in the commit link; it appears it should be

Anyway, you can’t use “services” like that. CI “services” are really only for servers (like, e.g., a MySQL server); the Docker images need to be set up right so that they start the service, and not just immediately exit.

Different jobs are run in different runners, there probably isn’t any reason not to just use a different image for each. Just specify an image: line in each job. You can pass data between jobs with artifacts.

1 Like

But Homebrew can also installed on Linux. Do you read the docs or are you busy triaging issues here?