Goal
이전에 몇번 git blog를 만들어 보려 hexo를 사용했었다.
Gatsby는 Static Site Generator 이다. Jekyll & Hexo 또한 같은 정적 사이트 생성기이며 처음에는 Hexo를 이용해서 블로그를 만들었었다. Jekyll 은 Ruby on Rails 기반이며, Hexo는 Node.js기반이여서 나는 고치기 쉬울것 같은 Hexo를 선택해서 사용하였다. 사용하던 중 프론트엔드 쪽 지식이 별로 없어 Hexo theme가 맘에 안들어도 꾸역꾸역 쓰고 있었는데.. 그 와중에 맘에 드는 템플릿(https://gatsby-starter-bee.netlify.com/)을 만나 바꾸게 되었다.
첫번째 방법으로는
두번째 방법으로는
주소는 htttps://[username].github.io/[repository-name]이다.
원래부터 첫번째 방법을 사용해 왔기에 github에 내 서버 ssh key를 등록 했다.
등록 방법은 : https://jootc.com/p/201905122827 참고하기 바란다.
Docker를 사용한 이유는 AWS를 EC2서버를 사용하다 바꾸는 경우가 가끔 있었고 다양한 환경의 서버들을 다루기 꺼려져 Docker를 사용하였습니다. Docker의 경우 설치하고 한번 사용한 이미지 그대로 가져와서 사용하면 되서 환경에 영향을 받지 않기 때문이다. 삽질을 줄일 수 있다는 점이나 안정성에서 만족하며 사용하고 있다.
# Docker CE (Community Edition) install
$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce # Docker CE (Community Edition)
확인을 위해
$ docker --version
도커를 깔았으면 Docker hub에 있는 Jenkins image
를 받는다.
$ docker pull jenkins/jenkins
[!NOTE] 주의할점은 jenkinsci 와 jenkins:latest등 다른 이미지들은 deprecated 됐다. 삽질하지 말고 jenkins/jenkins를 받자.
$ docker pull jenkins/jenkins
jenkins을 실행시키려면 Docker run!
$ docker run -it\
-u root \
-p [setting-port]:8080 -p setting-port]:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v /home/jenkins_home:/var/jenkins_home \
jenkins/jenkins
도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가MB에 이릅니다. 처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백메가를 다시 다운받는다면 매우 비효율적일 수 밖에 없다.
도커는 이런 문제를 해결하기 위해 레이어(layer)
라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 했다.
FROM ubuntu:16.04
USER root
# Setup node.js build env
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN apt-get install -y nodejs build-essential git python
RUN node -v && npm -v
RUN npm install -g yarn
# Use --build-arg ~/.ssh/id_rsa
ARG ssh_prv_key
ARG ssh_pub_key
# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
chmod 0700 /root/.ssh && \
ssh-keyscan github.com > /root/.ssh/known_hosts
# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
chmod 600 /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa.pub
# git config
RUN git config --global user.email "kkyeongin@gmail.com"
USER ubuntu:16.04
Jenkins에서 Docker를 띄워 빌드를 진행할 예정이여서 추가적으로 Docker이미지를 만들었다. 기본으로 ubuntu:16.04를 받아서 추가적으로 필요한 Node.js 프로젝트 빌드 환경과 GitHub Publishing 레파지토리에 Deploy할때 쓸 ssh key도 등록 하였다.
$ docker build \
-t [dockr image name:tag] \
--build-arg ssh_prv_key=[private ssh key pwd]\
--build-arg ssh_pub_key=[public ssh key pwd]\
[Dockerfile pwd]
이렇게 이미지 까지 만들면 이제 Jenkins만 실행해 설정해 주면 된다.