├── Dockerfile ├── package.json ├── source └── index.js ├── .gitlab-ci.yml ├── .circleci └── config.yml ├── readme.md ├── .travis.yml └── Makefile /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts-alpine 2 | 3 | EXPOSE 8080 4 | 5 | ARG CI_NAME=local 6 | ENV CI_NAME=${CI_NAME} 7 | ENV PORT=8080 8 | 9 | WORKDIR /code 10 | COPY . /code 11 | 12 | CMD ["npm", "start"] 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-on-ci", 3 | "version": "1.0.0", 4 | "description": "Just a hello world api", 5 | "main": "source/index.js", 6 | "scripts": { 7 | "start": "node source/index.js" 8 | }, 9 | "author": "Jeremie Drouet ", 10 | "license": "ISC" 11 | } 12 | -------------------------------------------------------------------------------- /source/index.js: -------------------------------------------------------------------------------- 1 | const http = require('http'); 2 | 3 | const port = process.env.PORT || 8080; 4 | const ci = process.env.CI_NAME || 'local'; 5 | 6 | http.createServer((req, res) => { 7 | res.writeHead(200, {'Content-Type': 'text/plain'}); 8 | res.write(`Hello World from ${ci}!`); 9 | res.end(); 10 | }).listen(port); 11 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: docker:stable 2 | 3 | variables: 4 | CI_NAME: gitlab 5 | DOCKER_HOST: tcp://docker:2375/ 6 | DOCKER_DRIVER: overlay2 7 | IMAGE_BASE: registry.gitlab.com/jeremie.drouet/docker-on-ci 8 | 9 | services: 10 | - docker:dind 11 | 12 | before_script: 13 | - apk add curl make 14 | - docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD 15 | - docker run --rm --privileged hypriot/qemu-register 16 | 17 | build: 18 | stage: build 19 | script: 20 | - make prepare 21 | - make build-push 22 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | jobs: 4 | build: 5 | docker: 6 | - image: jdrouet/docker-with-buildx:stable 7 | steps: 8 | - checkout 9 | - setup_remote_docker: 10 | version: 18.09.3 11 | - run: docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" 12 | - run: | 13 | docker buildx build --push \ 14 | --build-arg CI_NAME=circleci \ 15 | --platform linux/arm/v7,linux/arm64/v8,linux/386,linux/amd64 \ 16 | --tag jdrouet/docker-on-ci:circleci . 17 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Docker on CI 2 | 3 | [![Github Action](https://github.com/jdrouet/docker-on-ci/workflows/build/badge.svg)](https://github.com/jdrouet/docker-on-ci/actions) 4 | [![GitlabCI](https://gitlab.com/jeremie.drouet/docker-on-ci/badges/master/pipeline.svg)](https://gitlab.com/jeremie.drouet/docker-on-ci/pipelines) 5 | [![CircleCI](https://circleci.com/gh/jdrouet/docker-on-ci.svg?style=svg)](https://circleci.com/gh/jdrouet/docker-on-ci) 6 | [![travis](https://api.travis-ci.org/jdrouet/docker-on-ci.svg?branch=master)](https://travis-ci.org/jdrouet/docker-on-ci/builds) -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: bash 2 | 3 | dist: bionic 4 | 5 | env: 6 | - CI_NAME=travis DOCKER_CLI_EXPERIMENTAL=enabled 7 | 8 | before_install: 9 | - sudo rm -rf /var/lib/apt/lists/* 10 | - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 11 | - lsb_release -cs 12 | - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge" 13 | - sudo apt-get update 14 | - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce 15 | - docker run --rm --privileged multiarch/qemu-user-static:register --reset 16 | 17 | script: 18 | - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" 19 | - docker version 20 | - make prepare 21 | - make build-push 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | BUILDX_VER=v0.3.0 2 | CI_NAME?=local 3 | IMAGE_NAME=jdrouet/docker-on-ci 4 | VERSION?=latest 5 | 6 | install: 7 | mkdir -vp ~/.docker/cli-plugins/ ~/dockercache 8 | curl --silent -L "https://github.com/docker/buildx/releases/download/${BUILDX_VER}/buildx-${BUILDX_VER}.linux-amd64" > ~/.docker/cli-plugins/docker-buildx 9 | chmod a+x ~/.docker/cli-plugins/docker-buildx 10 | 11 | prepare: install 12 | docker buildx create --use 13 | 14 | prepare-old: install 15 | docker context create old-style 16 | docker buildx create old-style --use 17 | 18 | build-push: 19 | docker buildx build --push \ 20 | --build-arg CI_NAME=${CI_NAME} \ 21 | --platform linux/arm/v7,linux/arm64/v8,linux/386,linux/amd64 \ 22 | -t ${IMAGE_NAME}:${VERSION}-${CI_NAME} . 23 | --------------------------------------------------------------------------------