[CI/CD] GitLab Runner + Nexus 도커이미지 빌드 후 배포

 

 

etc-image-0

 

도커 이미지 및 Node.js  소스코드는 아래 사이트를 참조하였다.

 

 

wickedev / CI-CD-Tutorial · GitLab

Gitlab CI/CD Tutorial

gitlab.com

 

또한, 해당 실습은 아래 내용이 선행되었다고 가정하여 진행한다.

etc-image-1
etc-image-2

 

1. GitLab Project 생성

etc-image-3

 

2. GitLab Nexus 배포 프로젝트 가져오기

 

Nexus 에 도커 이미지 빌드 후 배포하는 코드는 아래에서 클론하여 가져오면 된다.

 

GitHub - jiwonYun9332/CICD

Contribute to jiwonYun9332/CICD development by creating an account on GitHub.

github.com

 

etc-image-4

 

3. 환경변수 설정

환경변수를 미리 선언하여, 코드 내에서 가져다 사용할 수 있다.

필자는 Nexus IP:PORT, Nexus ID, Nexus PW 에 대하여 먼저 환경변수를 선언하였다.

etc-image-5

 

환경변수 설정

 

DOCKER_PRIVATE_HOST

: Nexus IP:Port 를 적는다.

ex) 192.168.0.100:5443

 

DOCKER_PRIVATE_PASSWORD

: Nexus 패스워드

 

DOCKER_PRIVATE_USER

: Nexus ID

 

4. 코드분석

 

.gitlab-ci.yml

image: monoless/ansible-docker:18.09.9-dind-03

services:
  - name: monoless/ansible-docker:18.09.9-dind-03
    command: ["--insecure-registry={nexus_ip}:5443"]

stages:
  - build

variables:
  IMAGE_NAME: $DOCKER_PRIVATE_HOST/openstack:$CI_PIPELINE_ID

build:
  stage: build
  script:
    - docker build . -t $IMAGE_NAME
    - docker login -u $DOCKER_PRIVATE_USER -p $DOCKER_PRIVATE_PASSWORD $DOCKER_PRIVATE_HOST
    - docker push $IMAGE_NAME

 

Dockerfile

# This file is a template, and might need editing before it works on your project.
FROM node:latest

WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .

# replace this with your application's default port
EXPOSE 8080
CMD [ "npm", "start" ]

 

index.js

const express = require('express')
const app = express()

app.get('/', function(req, res) {
    res.send('Hello Gitlab!')
})

app.listen(8080, function() {
    console.log('Example app listening on port 8080!')
})

 

package.json

{
  "name": "CI-CD-Tutorial",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

 

.gitignore

tmp
.DS_Store

 

5. 'docker daemon. Is 'docker daemon running on this host?' 와 같은 에러 발생 시

etc-image-6

 

config.toml (GitLab Runner 설정파일)

[runners.docker]
  volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

 

호스트의 Docker 소켓(/var/run/docker.sock)을 Runner 컨테이너 내부로 마운트하여 사용
 

6. 빌드 후 도커 이미지 생성 확인 

Nexus 에 정상적으로 이미지가 배포된 것을 알 수 있다.

etc-image-7

 

 

etc-image-8