Jenkins Node 추가하기 (via SSH)

xgro·2023년 1월 13일
0

Jenkins

목록 보기
2/2

📌 작성하게 된 이유?

하나의 인스턴스에서 모든 작업을 진행하던 구조를 분리하여 젠킨스를 보다 효율적으로 운영하고자 에이전트를 사용하여 부하를 분담하고자 합니다.

SSH 프로토콜을 이용 해서 Jenkins agent 를 설치하는 방법에 대해 기술하고자 합니다.

본 문서를 바탕으로 젠킨스의 에이전트를 구성 할 수 있습니다.

📌 Jenkins Node 란?

  • 젠킨스는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 오픈소스 툴입니다.
  • 젠킨스를 이용하여 소규모 개발, 더 나아가 회사의 개발 프로세스를 자동화 할 수 있기 때문에 젠킨스는 일반적으로 master - node 의 구조로 구성하여 사용합니다.
  • 해당 구조로 사용시 마스터의 부하를 node에 분산하므로, 재해나 장애로 부터 시스템을 보호 할 수 있습니다.

👉 Requirement

본 문서에서는 Jenkins ( version 2.385 ) 버전을 이용해서 구현하였습니다.

JDK 는 최소 11버전을 권장합니다.

또한, AWS Cloud 환경에서 진행하므로 구성에 필요한 IAM 권한이 필요합니다.

📌 Usage

기존 운영하던 젠킨스가 존재하는 환경에서 인프라 구성을 진행합니다.

마스터와 node에서 각각 작업을 진행합니다.

👉 Step 01. SSH Key Generation

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

👉 Step 02. Credentials 추가

마스터 젠킨스의 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의 전체 값을 붙여넣습니다.

    💡 주의 할 점 !

    1. id_rsa.pub 이 아닌, id_rsa의 내용을 사용합니다.
    2. 반드시 전체 내용을 복사합니다. —-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-----

👉 Step 03. Agent 노드 추가

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 을 선택합니다.

👉 Step 04. Slave agent Launch

모든 설정을 끝마쳤습니다.

다시 Jenkins 관리 > Nodes 창으로 돌아가 생성된 노드를 클릭하여 Launch agent를 선택하여 에이전트를 설치합니다.

📌 결과

위 과정을 모두 수행하였다면 ssh 프로토콜을 통한 젠킨스 node가 정상적으로 추가 됩니다.

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글