리셋 되지 말자

[Jenkins] publish over SSH를 이용한 Docker 서비스 배포(2) 본문

CI CD

[Jenkins] publish over SSH를 이용한 Docker 서비스 배포(2)

kyeongjun-dev 2021. 5. 27. 00:43

ssh key 생성 및 key 분배

Jenkins 서버에서 원격 서버에 접속하기 위한 ssh key를 생성하고 분배한다.

 

1. ssh key 생성

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7Uyw1gKDpfynlmREqLueyWJgEd6bt57N7FDZCQXmxag ubuntu@kkj-jenkins
The key's randomart image is:
+---[RSA 2048]----+
|     .oo+o       |
| . ..=o.o.       |
|. o.+ =o.        |
| o.. E o+=.      |
|  ..o +oSo+      |
|...o +.= =       |
|o  ...=   o      |
|.o.o o*          |
|.o= .o.=         |
+----[SHA256]-----+

Jenkins 서버에서 ssh-keyjen -t rsa 명령어로 ssh key를 생성한다. 여기서는 모든 항목을 Enter를 입력해서 넘어갔다. 중간에 passphrase를 입력해도 상관 없지만, Jenkins에 private key를 등록할때 추가로 passphrase를 입력해주어야 한다.

 

$ ls .ssh/
id_rsa  id_rsa.pub

private key인 id_rsa와 public key인 id_rsa.pub가 생성된 것을 확인한다.

 

2. public key 전송

Jenkins 서버가 아닌 원격 서버에 Jenkins에서 ssh 연결을 할 계정으로 접속해서 public key를 등록해야 한다.
만약 계정 이름이 'ubuntu'라면 /home/ubuntu/.ssh/ 디렉토리에 있는 'authorized_keys'파일에 위에서 생성한 public key를 등록한다. 만약 'authorized_keys' 파일이 존재하지 않으면 직접 생성하여 public key 내용을 복사해서 붙여넣어주면 된다.

$ cat authorized_keys 
ssh-rsa AXXXXXD(생략) jenkins서버계정명@jenkins서버호스트네임

위와같은 형태로 등록이 되면 된다.

 

publish over SSH 설정

'Jenkins 관리' 선택

 

'시스템 설정' 선택

1. 하단의 'Publish over SSH' 항목에 id_rsa key 내용 전체를 복사해서 붙여 넣어준다.
2. 'SSH Servers' 무구 아래에 있는 '추가' 버튼을 선택한다.

위에서 추가한 private  key를 이용해 실제로 접속할 원격 서버의 정보를 입력한다.

1. Name에는 아무 이름이나 넣어줘도 된다.
2.  Hostname에는 ssh로 접속해야 하는 서버의 ip 주소를 입력한다.
3. 접속해야 하는 서버의 계정이름을 입력한다.

ssh 접속의 경우 기본으로 22번 포트를 이용하는데, 만약 접속해야 하는 서버의 ssh 접속 포트를 변경했다면 아래의 과정을 추가로 진행한다. ('Test Configuration' 버튼 위에 있는 '고급...' 버튼 선택)
포트를 따로 변경하지 않았다면 우측 하단의 'Test Configuration'을 클릭하여, 위의 정보대로 서버에 ssh 접속이 가능한지 테스트를 할 수 있다. 'success' 문구가 출력된다면 성공이다.

 

'Port' 항목을 ssh 접속이 가능한 Port 번호로 변경한 뒤, 우측 하단의 'Test Configuration'을 클릭하여 ssh 접속이 되는지 테스트한다.
위의 그림과 같이 좌측 하단에 'Success'문구가 출력되면 Test 성공이다.
Test 성공이 되면 '저장' 버튼을 선택하여 수정 사항들을 저장한다.

 

 

Item 생성

'새로운 Item' 선택

 

1. Item name 입력
2. 'Freestyle project' 선택
3. 하단의 'OK' 선택

 

하단의 'Build' 항목에서 'Add build step' 선택, 'Send files or execute commands over SSH' 선택

 

  1. SSH Server의 'Name' 항목에서 위에서 추가한 SSH Server를 선택한다. SSH Server가 한 개 뿐이라면 자동으로 선택되었을 것이다.
  2. 아직 Github repository와 연동하지 않았음으로, 간단하게 hello world를 출력하고 출력된 내용을 txt 파일로 저장하는 명령어를 'Exec command'에 넣어준 뒤 '저장'버튼으로 저장한다.

 

새롭게 생성한 Item인 'node_practice'에서 'Build Now'를 클릭하면 'Build History'에 '#1'로 표시되는 항목이 추가되는 것을 확인할 수 있다.
초록색 체크표시가 나타나면 빌드에 성공했다는 것을 의미한다.
빌드 과정을 확인하기 위해 초록색 체크표시를 클릭한다.

 

콘솔 출력을 확인하면 빌드 과정을 확인할 수 있다.
하지만 ssh를 이용해 원격으로 command를 실행하므로, Jenkins 콘솔에서는 확인이 되지 않는다.
실제로 command가 잘 수행되었는지 원격 서버에 직접 접속하여 txt 파일이 생성 되었는지 확인한다.

 

$ ls
helloworld.txt
$ cat helloworld.txt
hello world

원격 서버 ubuntu 계정으로 접속해서 홈 디렉토리(cd ~)를 확인해보면, txt 파일이 잘 생성된 것을 확인할 수 있다.

다음은 github repository와의 연동이다.

Comments