μ  ν‚¨μŠ€λ₯Ό μ‚¬μš©ν•΄μ„œ ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„μ΄ν…œμ„ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. μ•„μ΄ν…œμ„ 생성할 λ•Œμ—λŠ” ν”„λ‘œμ νŠΈ λΉŒλ“œ μœ ν˜•μ— 따라 μ›Ή UI λ°©μ‹μ˜ ν”„λ¦¬μŠ€νƒ€μΌ λ˜λŠ” 슀크립트둜 μž‘μ„±ν•˜λŠ” νŒŒμ΄ν”„λΌμΈ 등을 선택할 수 있게 μ§€μ›ν•˜κ³  μžˆλ‹€. 인터넷에 곡유된 λ‚΄μš©μ— λ”°λΌμ„œλŠ” νŒŒμ΄ν”„λΌμΈ 슀크립트λ₯Ό μž‘μ„±ν•˜λŠ” μ˜ˆμ œκ°€ 많이 λ³΄μ΄μ§€λ§Œ λͺΈμ„ λ‹΄κ³  μžˆλŠ” μ‘°μ§μ—μ„œλŠ” ν”„λ¦¬μŠ€νƒ€μΌ μœ ν˜•μœΌλ‘œλ„ κ°„λ‹¨ν•˜κ²Œ μ›ν•˜λŠ” λΉŒλ“œ κ²°κ³Όλ₯Ό κ΅¬μ„±ν•˜μ—¬ μ‚¬μš©ν•˜κ³  μžˆλ‹€.

λ³Έ κΈ€μ—μ„œ μ‚¬μš©λ  ν”„λ‘œμ νŠΈ : kdevkr/beanstalk-deploy-sample

μœ„ λ¦¬νŒŒμ§€ν† λ¦¬λŠ” μ˜ˆμ „μ— AWS Beanstalk Java SE Platform 으둜 λ°°ν¬ν•˜κΈ° μœ„ν•œ 예제λ₯Ό μž‘μ„±ν•œ κ°„λ‹¨ν•œ μŠ€ν”„λ§ λΆ€νŠΈ ν”„λ‘œμ νŠΈμ΄λ‹€. 별닀λ₯Έ κΈ°λŠ₯은 ν¬ν•¨ν•˜κ³  μžˆμ§€ μ•ŠμœΌλ©° build.gradle에 λͺ‡κ°€μ§€ ν”„λ‘œμ νŠΈ λΉŒλ“œλ₯Ό μœ„ν•œ 섀정을 ν•΄λ‘” μƒνƒœμ΄λ‹€. 예λ₯Ό λ“€μ–΄, -Pversion λΌλŠ” ν”„λ‘œμ νŠΈ 속성을 ν†΅ν•΄μ„œ λΉŒλ“œ 버전을 μ μš©ν•  수 μžˆμŒμ„ μ•Œ 수 μžˆλ‹€.

./gradlew zipBeanstalk -Pversion='1.0.1'
# build/distributions/beanstalk-1.0.1.zip
  • build/libs: .war 파일 및 Procfile이 μƒμ„±λ˜λŠ” 폴더
  • build/distributions: Beanstalk λ²ˆλ“€ 파일이 μƒμ„±λ˜λŠ” 폴더

λΉŒλ“œ μ‹œ λ§€κ°œλ³€μˆ˜λ‘œ κΉƒ νƒœκ·Έ μ„ νƒν•˜κΈ°

Parameterized Build 와 Git Parameter ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•΄μ„œ κΉƒ 컀밋에 릴리즈λ₯Ό μœ„ν•œ 버전을 νƒœκ·Έλ‘œ 달아놓고 μ  ν‚¨μŠ€μ—μ„œ κΉƒ νƒœκ·Έλ₯Ό ν•„ν„°ν•˜μ—¬ μ„ νƒν•¨μœΌλ‘œμ¨ μ›ν•˜λŠ” κΈ°μ€€μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό κ°€μ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•  수 μžˆλ‹€. μ•„λž˜μ™€ 같이 μ„€μ •ν•˜λ©΄ ν”„λ‘œμ νŠΈ λΉŒλ“œ μ‹œ κΉƒ νƒœκ·Έλ₯Ό μ°Ύμ•„μ„œ 선택할 수 있고 ν•΄λ‹Ή νƒœκ·Έκ°€ μžˆλŠ” μ»€λ°‹μ˜ μ†ŒμŠ€λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œλ‹€.



ν”„λ‘œμ νŠΈ λΉŒλ“œ 버전 μ μš©ν•˜κΈ°

μœ„μ—μ„œ v1.0.0 νƒœκ·Έλ₯Ό λ²„μ „μœΌλ‘œ 선택할 수 있으며 이 버전을 λΉŒλ“œλ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 버전에도 μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ·Έλž˜λ“€ ν”„λ‘œμ νŠΈ λΉŒλ“œ μ‹œ ν”„λ‘œμ νŠΈ μ†μ„±μœΌλ‘œμ¨ μ§€μ •λ˜λ„λ‘ ν•΄μ•Όν•œλ‹€. λΉŒλ“œ λ‹¨κ³„μ—μ„œ Invoke Gradle script의 κ³ κΈ‰ μ˜΅μ…˜μ„ 열어보면 λͺ¨λ“  작 νŒŒλΌλ―Έν„°λ₯Ό ν”„λ‘œμ νŠΈ μ†μ„±μœΌλ‘œ μ „λ‹¬ν•˜λŠ” ν•­λͺ©μ„ 선택할 수 μžˆλ‹€.

# λ§Œμ•½, κ·Έλž˜λ“€ μŠ€ν¬λ¦½νŠΈκ°€ μ•„λ‹Œ 직접 μ‰˜μ—μ„œ λΉŒλ“œ λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 μ„ νƒν•œ νƒœκ·Έ νŒŒλΌλ―Έν„°λ₯Ό μ μš©μ‹œν‚¬ 수 μžˆλ‹€. 
./gradlew -Pversion=$version zipBeanstalk

ν”„λ‘œμ νŠΈ λΉŒλ“œ κ²°κ³Όλ₯Ό μŠ¬λž™μœΌλ‘œ 보내기

ν”„λ‘œμ νŠΈ 규λͺ¨μ— 따라 λΉŒλ“œ μˆ˜ν–‰ μ‹œκ°„μ΄ μƒλ‹Ήνžˆ μ†Œμš”λ  수 μžˆμœΌλ―€λ‘œ ν”„λ‘œμ νŠΈ 릴리즈λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 인원듀이 릴리즈 버전 λΉŒλ“œμ— 성곡 λ˜λŠ” μ‹€νŒ¨ 유무λ₯Ό 확인할 수 μžˆλ„λ‘ μŠ¬λž™ λ©”μ‹ μ €(ꡬ글 μ±—μ΄λ‚˜ 이메일도 κ°€λŠ₯)둜 λ©”μ‹œμ§€λ₯Ό 보내도둝 μ•Œλ¦Ό 섀정을 ν•˜λŠ” 것이 μ’‹λ‹€. Jenkins CI μŠ¬λž™ μ•± 그리고 Slack Notification ν”ŒλŸ¬κ·ΈμΈκ³Ό ν•¨κ»˜ μ»€μŠ€ν…€ λ©”μ‹œμ§€λ₯Ό ν™œμš©ν•œλ‹€λ©΄ SFTP μ„œλ²„λ₯Ό μ‚¬μš©ν•΄μ„œ λ³„λ„λ‘œ λΉŒλ“œλœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ „λ‹¬ν•˜κ³  μˆ˜λ™ 배포λ₯Ό ν•΄μ•Όν•œλ‹€λ©΄ μ—…λ‘œλ“œλœ SFTP 경둜λ₯Ό λ©”μ‹œμ§€λ‘œ μ „λ‹¬ν•œλ‹€κ±°λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포λ₯Ό μœ„ν•΄μ„œ μ‹€ν–‰ν•΄μ•Όν•  λͺ…λ Ήμ–΄λ₯Ό μ•ˆλ‚΄ν•˜λ„λ‘ ꡬ성할 μˆ˜λ„ μžˆλ‹€.


λΉŒλ“œ νŒŒμΌμ„ 원격 호슀트둜 μ „λ‹¬ν•˜κΈ°

AWS Beanstalk ν™˜κ²½μ— λ°°ν¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” AWS Elastic Beanstalk Publisher ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜κ² μ§€λ§Œ λ³΄μ•ˆ μƒμ˜ 문제둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ νŒŒμΌμ„ SFTP μ„œλ²„λ‘œ μ—…λ‘œλ“œν•΄μ•Όν•  ν™˜κ²½μ΄λΌλ©΄ Publish Over SSH ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•΄μ„œ PEM μΈμ¦μ„œλ₯Ό 톡해 λΉŒλ“œ νŒŒμΌμ„ 원격 호슀트둜 μ „λ‹¬ν•˜λ„λ‘ ꡬ성할 수 μžˆλ‹€.

  • AWS Elastic Beanstalk Publisher
  • S3 publisher
  • Publish Over SSH

이에 λŒ€ν•œ λ‹€μ–‘ν•œ μ˜ˆμ œλŠ” kdevkr/mambo-box/jenkins에 κΈ°λ‘ν•΄λ†“κ³ μž ν•œλ‹€.