Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use GitLab CI with a custom Docker image?

I made a simple Dockerfile:

FROM openjdk
EXPOSE 8080

and built an image using:

docker build -t test .

I installed and configured a docker GitLab CI runner and now I would like to use this runner with my test image. So I wrote the following .gitlab-ci.yml file:

image: test

run:
  script:
    - echo "Hello world!"

But to my disappointment, the local test image that I can use on my machine was not found.

Running with gitlab-ci-multi-runner 9.4.2 (6d06f2e)
  on martin-docker-rawip (70747a61)
Using Docker executor with image test ...
Using docker image sha256:fa91c6ea64ce4b9b44672c6e56eed8312d0ec2afc80730cbee7754bc448ea22b for predefined container...
Pulling docker image test ...
ERROR: Job failed: Error response from daemon: repository test not found: does not exist or no pull access

I do not even know what is going on anymore. How can I make the runner aware of this image that I made?

like image 978
Martin Drozdik Avatar asked Aug 10 '17 13:08

Martin Drozdik


People also ask

Can we push Docker image to GitLab?

You can build your own Docker images and publish them in the GitLab Container Registry, which can act as a private registry. Maybe you are wondering if there is a way to store Docker images at GitLab and use them in pipelines. There are many reasons why you may want to use the GitLab Container Registry.

What is Docker image in GitLab CI?

GitLab CI in conjunction with GitLab Runner can use Docker Engine to test and build any application. Docker is an open-source project that allows you to use predefined images to run applications in independent "containers" that are run within a single Linux instance.


1 Answers

I had the same question. And I found the answer here: https://forum.gitlab.com/t/runner-cant-use-local-docker-images/5507/6

Add the following in the /etc/gitlab-runner/config.toml

[runners.docker]
# more config for the runner here...
pull_policy = "if-not-present"

More info here: https://docs.gitlab.com/runner/executors/docker.html#how-pull-policies-work

My Dockerfile

FROM node:latest
RUN apt-get update -y && apt-get install openssh-client rsync -y

On the runner I build the image:

docker build -t node_rsync .

The .gitlab-ci.yml in the project using this runner.

image: node_rsync

job:
  stage: deploy
  before_script:
    # now in the custom docker image
    #- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - mkdir -p ~/.ssh
    - eval $(ssh-agent -s)
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh-add <(tr '@' '\n' <<< "$STAGING_PRIVATE_KEY" | base64 --decode)
    # now in the custom docker image
    #- apt-get install -y rsync
  script:
    - rsync -rav -e ssh --exclude='.git/' --exclude='.gitlab-ci.yml' --delete-excluded ./ $STAGING_USER@$STAGING_SERVER:./deploy/
  only:
    - master
  tags:
    - ssh
like image 52
Sylvain Avatar answered Sep 18 '22 14:09

Sylvain