"우리는 무슨 기준으로 배포를 해야 할까요?"라는 질문에서 시작해서,
.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 개먼사님의 추론능력
배운 것 추가+)
블로그 믿지 말자.....
제 블로그도 믿지 마세요..... 흫
내 껀 나만 믿으면 되지..... 흫