"우리는 무슨 기준으로 배포를 해야 할까요?"라는 질문에서 시작해서,
.gitlab-ci.yml
에 이르기까지
공부를 하는 과정 중에
분명한 것은(분명히 내가 몰랐던 것은),
CI/CD가 문제가 아니라(이것도 뭐 몰랐던 건 맞음)
Docker를, 정확히는 Docker image와 container가 무엇인지 하는 것에 있었던 것 같다.
또,
깃랩 도큐먼트를 수십 번을 들락날락하며 페이지를 옮겨다니며,
("로봇이 아닙니까" 물어볼 법도)
도큐먼트 지옥에 빠져있는 동안,
내가 확실하게 아는 것(기정사실)을 고정해 두고,
추론을 해 나가야 하는 과정에서,
그 것을 어렵게, 힘들게, 괴롭게했던 키워드는
image
container
docker
service
instance
요노마들이었는데,
어떤 상황에서 누가
어디서
무엇을
왜
하는 누구인지를 알아내는 것은
여간 쉬운 일이 아니었다
@그림 한 오천장 그린 듯 흫
@찐 막 찐찐찐 막.....
GitLab CI/CD에서 runner는 run jobs 하는데, executor로 하여금 gitlab-ci.yml
의 script를 실행시킨다...는 알겠는데,
config.toml
은 또 뭔지docker run
인지도큐먼트 무한 뺑뺑이를 돌리고 나서,
runner를 register
하고,
config.toml
를 보면 유추 해 볼 수 있는데,
(응 너 말고 니 사수 ^^)
#runner register
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image docker:latest \
--url "https://gitlab.com/" \
--registration-token "니 토큰" \
--description "docker-runner" \
--tag-list "dev" \
--docker-privileged
gitlab/gitlab-runner
docker image로 띄워지는 containerdocker:latest
docker image로 띄워지는 또 containerdocker:dind
docker image로 띄워지는 또또또 container로 executor가 script를 실행시킬 때, 이용할 놈으로 build
할 때만 있었다 없어지는 놈죽일까 흫 ^^
그리고, runner를 install & register 하는 일은 결국,
GitLab CI/CD를
어떤 runner가 할 것이고,
그 runner는 내 repo를 아는 놈이고,
executor는 누구라는,
config.toml
를 만드는 일
docker container 안에서,,,
부록
아니 privileged로 register해야 된다고 하면서(정확히는 runners.docker
를)
-it
)에서는 나한테 안 물어봤고,false
라고만 하고,아무리 뒤져도 config.toml
로 수정하라는 말 밖에는 어디에도 나오질 않는데,
config.toml
을 보면 privileged
flag는 원뎁쓰 더 들어가서 runners.docker
에 설정이 되어야 되는 건 알겠는데,
난 지금 runner을 register 하고 있는데 도대체 어떻게 하라는 건지 알 수가 없고,
(나 근데 다른거 찾다가 --docker-privileged
전혀 상관 없는데서 이거 봐 버렸어 와씨- 어디였는지 기억도 안남 흫)
document에서는 config.toml
를 수정하는 건 구리다고 흫
Some runner configuration settings can’t be set with environment variables or command line options.
Environment variables do not support slices.
The only solution was to manually update the config.toml file after the runner was registered. This is less than ideal, error-prone, and not reliable.
그러면서 non-interactive로 하는 예제도 안 알려줌
-
를 사용해서 하면 안되는 애들 있을거야 ^^
근데 모는 되고 모는 안되고는 안 알려 줄꼬얌
그런데 --docker-image docker:latest
라고 하면
runners.docker
로 설정이 되는 것을 보고
(응 너 말고 니 사수 ^^)
--docker-privileged
로 성공.....흫
아니 다 끝난 줄 알았지,
그런데 .yml
을 적다가
가만히...가만히...가마니...
나는 지금 어디에 있는가.....에 대하여 생각을 하다가
아니 잠깐 근데 내가 배포할 instance는 runner가 설치 된 instance랑
다른 곳인거 아니야?
어떻게 가서 붙어?라는 생각으로
또 시작 흫
아니 ssh -i pem key 넣고, ec2-user@instance IP 넣고 하는거
이걸 스크립트 안에서 어떻게 하냐고오.....
@참고
https://docs.gitlab.com/ee/ci/ssh_keys/
#.gitlab-ci.yml
script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y)'
- eval $(ssh-agent -s)
- echo "$SSH_TEST_KEY" | tr -d '/r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan $EC2_IP >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
ssh를 사용해서 다른 어떤 machine으로 붙는 과정에서의 인가(authentication)는 public key
와 private key
가 필요한데,
(암호, 복호 어쩌고 저쩌고 그런거)
이 때, ssh-agent는 내 private key
를 ssh-add -
명령어로 담고,
ssh-keyscan으로 EC2의 IP에서 public key
를 뽑아내는 것
@참고
https://linux.die.net/man/1/ssh-agent
https://linux.die.net/man/1/ssh-keyscan
이건 아직 document에서 찾질 못했는데,
스택오브플로우 형님은
repo를 clone하는 container가 또 있을 것이다, shared disk가 있을 것이라고 했다
하.
내가 싫어지는 방법은 멀리 있지 않다 흫
모든 출처는 GitLab 공식문서
뒤지면 다나온다 with 개먼사님의 추론능력
배운 것 추가+)
블로그 믿지 말자.....
제 블로그도 믿지 마세요..... 흫
내 껀 나만 믿으면 되지..... 흫