하나의 인스턴스에서 모든 작업을 진행하던 구조를 분리하여 젠킨스를 보다 효율적으로 운영하고자 에이전트를 사용하여 부하를 분담하고자 합니다.
SSH 프로토콜을 이용 해서 Jenkins agent 를 설치하는 방법에 대해 기술하고자 합니다.
본 문서를 바탕으로 젠킨스의 에이전트를 구성 할 수 있습니다.
본 문서에서는 Jenkins ( version 2.385 ) 버전을 이용해서 구현하였습니다.
JDK 는 최소 11버전을 권장합니다.
또한, AWS Cloud 환경에서 진행하므로 구성에 필요한 IAM 권한이 필요합니다.
기존 운영하던 젠킨스가 존재하는 환경에서 인프라 구성을 진행합니다.
마스터와 node에서 각각 작업을 진행합니다.
node와 연결에 사용할 SSH Key를 생성합니다.
$ ssh-keygen
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:epaCi0xTGP0s/XG+mbQwVJN3VcEHMQCavt51NGf601o Jenkins@Jenkins
The key's randomart image is:
+---[RSA 3072]----+
| ....=+=|
| . o . +.|
| . . o + . . .|
| o + . . o . |
| . o + S . o o|
| . o + * . = |
| o . o O o . o E|
| o o . = = * . +.|
| o . . * ..o|
+----[SHA256]-----+
id_rsa.pub의 내용을 node의 authorized_keys에 저장합니다.
# id_rsa.pub ( @ node )
cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPSJ1El8LOmETZ0wfGCqKwZbXezn1h+zcC/DtlCycduWbIoDoLtkQtI2M8c2OJX6stgqdyHqh0JT+/YF9vnt5d8H/T20hASnqcVLryA8iRWi/Nx6tq7UVKyFUzsz8vKwwrhmWMUp6w0pEETBU4Z+d8ixcRGWD/JTODRT2GYk6WSknzRZ+W3L1pHrYhJFrPpyR80fFCgRoSdiHJ2XRB1eWS8dbR8aH5ycISK1xm5HKE8Xjv5sF6z90XOAPHBZpu6ug2kTOL7Taajhy3HVJE6PbSZKPfDXrfrx2x4Hw+7ow9H/JChbQ1SKO95By2Nh2NsSsfg4OJxPJaV1G31eI0ugpZ9Rvp/8Muz6Ew5v4DGDCMEFb20PLF4beVkawkzi7hc4URSiBHVa/94vR4G3lkDL0yY0a0YkiJoM0EU4X4FSv7jEU/VedbMMC2hYEqhNq9N6JxSglNpL4JmTLiUtlNRuJpYp1hs6bVyeMoKuO9US7ZeTHMV3McgUO/8oEhp3OpCm0= ubuntu@nbhodoo009
마스터 젠킨스의 Credentials 메뉴에서 Global credentials 생성합니다.
(Required) Kind
SSH Username with private key
(Required) Scope
(default) Global
(Required) ID
Key의 네이밍을 할당합니다 ( ex Jenkins-agent-ssh )
(Optional) Description
해당 키의 설명을 작성합니다
(Required) Username
Slave에 접근할 사용자명을 입력합니다.
# 예시. 접근할 인스턴스의 IP 앞에 명시되는 사용자 이름
ssh -i "~/.ssh/id_rsa" Jenkins@<Private IP>
(Required) Private Key
마스터에서 <Step 01> 과정에서 발급한 id_rsa의 전체 값을 붙여넣습니다.
💡 주의 할 점 !
- id_rsa.pub 이 아닌, id_rsa의 내용을 사용합니다.
- 반드시 전체 내용을 복사합니다. —-BEGIN 내용 포함
----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
Enter directly
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAz0idRJfCzphE2dMHxgqisGW13s59Yfs3Avw7ZQsnHblmyKA6C7ZE
LSNjPHNjiV+rLYKnch6odCU/v2Bfb57eXfB/09tIQEp6nFS68gPIkVovzcerau1FSshVM7
M/LysMK4ZljFKesNKRBEwVOGfnfIsXERlg/yUzg0U9hmJOlkpJ80Wflty9aR62ISRaz6ck
fNHxQoEaEnYhydl0QdXlkvHW0fGh+cnCEitcZuRyhPF47+bBes/dFzgDxwWaburoNpEzi+
...
...
GSUk+f6PUaUpHeE++qZu7NU7NdWbZ/L5k9Z6FlvzXgioRKos2YxceBABtTSY8FZUt/6kUG
1oe/5x4NxUmCKesVCeFeokeH+EVuUBfpAqYw0UKjeYcNd8QVTO6VLV2AUnhgBc5kVVSWUg
HtF5mMTIPnsDHvAAAAEXVidW50dUBuYmhvZG9vMDA5AQ==
-----END OPENSSH PRIVATE KEY-----
SSH Key를 통한 준비가 완료되었으니 node를 추가하겠습니다.
Jenkins 관리 > Nodes > [ New Node ]
생성할 Node의 이름을 입력합니다.
Permanent Agent를 활성화합니다.
Create를 클릭하면 다음과 같은 화면이 디스플레이 됩니다.
파라미터의 내용은 다음과 같습니다
(Required) Name
노드의 이름을 명시합니다.
(Optional) Description
노드의 설명을 추가합니다.
(Required) Number of executors
노드에서 동시에 실행 할 수 있는 실행자의 개수를 설정합니다.
최소값은 1입니다.
(Required) Remote root directory
노드에서 기본 디렉토리로 사용할 경로를 지정합니다
예시 ) /home/jenkins/workDir
(Optional) Labels
Pipeline 이나 Jobs에서 특정 노드를 사용하기 위해서 지정할때 사용하는 이름입니다.
(Default) Usage
두가지 옵션이 있습니다.
하나의 에이전트에서 모든 잡을 수행할 예정이므로, 첫번째인 Use this node as much as possible
옵션을 선택합니다.
Use this node as much as possible
잡에서 노드를 명시하지 않거나 파이프라인에서 agent any 사용시 마스터가 노드가 사용가능한 상태일때 무작위로 해당 노드를 사용합니다.
Only build jobs with label expressions matching this node
라벨이 명시되어 해당 노드와 일치 하는 경우에만 실행합니다.
(Required) Launch method
인스턴스에 젠킨스 마스터와 통신을 위한 에이전트를 설치하는 방법을 선택 합니다.
본 문서에서는 Launch agents via SSH 를 선택합니다.
Host
연결하고자 하는 에이전트 인스턴스의 Private IP를 입력합니다.
Credentials
<Step 02>에서 추가한 Credential을 선택합니다.
Host Key Verification Strategy
Non verifying Verification Strategy
를 선택하고 'Save' 버튼을 클릭합니다.
(Default) Availability
기본 값인 Keep this agent online as much as possible 을 선택합니다.
모든 설정을 끝마쳤습니다.
다시 Jenkins 관리 > Nodes 창으로 돌아가 생성된 노드를 클릭하여 Launch agent
를 선택하여 에이전트를 설치합니다.
위 과정을 모두 수행하였다면 ssh 프로토콜을 통한 젠킨스 node가 정상적으로 추가 됩니다.