| 제목 | 젠킨스 배포 질문이요 | ||
|---|---|---|---|
| 카테고리 | PHP | ||
| 글쓴이 | 우왕 | 작성시각 | 2022/08/30 11:45:12 |
|
|
|||
|
안녕하세요. 먼저 무식한 질문 죄송합니다. php, nginx, aws로 웹페이지 띄우고 젠킨스와 깃헙 연동까지는 했습니다. 그런데 배포가 문제입니다.. 제가 원하는건 깃헙 푸시 후에 젠킨스에서 aws로 웹페이지 경로로 소스 반영이 되었으면 좋겠는데 젠킨스 workspace 경로의 소스 반영까지만 되고 있습니다. 그래서 아무리 깃헙에 푸시해도 aws웹까지 반영은 안 되고 있는데요. 검색해보니 .sh을 등록을 해서 cp나 mv로 파일을 처리하면 될 것 같긴한데요 .sh로 배포 쉘스크립트를 짜면 되는 건가요? 다들 배포는 어떻게 처리하셨나요? 초보라서 검색을 해봐도 이해가 안 가네요ㅜ 도와주세요..
|
|||
| 다음글 | php을 공부하고 있는데 어떻게 공부를 해야할까요.. (3) | ||
| 이전글 | MySQL 사용자 특정 ip만 외부 접속 가능하게 하기 (3) | ||
|
한대승(불의회상)
/
2022/08/30 15:24:18 /
추천
0
.sh로 배포 스크립트를 짜시면 됩니다.
|
|
tuyitu719
안녕하세요. 핵심부터 말씀드리면, 지금 Jenkins는 “소스를 가져오는 것(checkout)”까지만 하고 있고, “배포(deploy)” 단계가 아직 없는 상태입니다. Jenkins Pipeline에서는 그래서 질문 주신 내용에 답하면, 네, 초보자 기준으로는 경우는 2가지로 나눠서 생각하시면 됩니다. 1) Jenkins 와 웹서버가 같은 서버에 있는 경우이 경우가 가장 단순합니다. 예를 들면 #!/bin/bash
set -e TARGET_DIR="/var/www/html/your-project" WORK_DIR="$WORKSPACE" rsync -av --delete \ --exclude=".git" \ --exclude=".github" \ --exclude="Jenkinsfile" \ "$WORK_DIR"/ "$TARGET_DIR"/ sudo chown -R www-data:www-data "$TARGET_DIR" 그리고 Jenkinsfile 에서는: pipeline {
agent any stages { stage('Deploy') { steps { sh 'chmod +x deploy.sh' sh './deploy.sh' } } } } 이렇게 하면 됩니다. 2) Jenkins 와 AWS 웹서버(EC2)가 다른 서버에 있는 경우이 경우는 Jenkins workspace 에서 끝나는 게 당연합니다. 이럴 때는 보통 다음 중 하나로 배포합니다.
Jenkins 쪽에서는 SSH 자격 증명을 써서 원격 서버에 접속할 수 있고, Jenkins 의 예를 들어 Jenkinsfile 에서 이런 식으로 할 수 있습니다. pipeline {
agent any stages { stage('Deploy') { steps { sshagent(credentials: ['ec2-ssh-key']) { sh ''' rsync -av --delete \ --exclude=".git" \ --exclude=".github" \ --exclude="Jenkinsfile" \ ./ ubuntu@YOUR_EC2_IP:/var/www/html/your-project/ ''' } } } } } 즉, 지금 상황은 이상한 게 아니라 “배포 단계가 아직 없어서” 그런 것입니다. 실무에서는 어떻게 많이 하느냐?초보자 입장에서는 보통 아래 순서로 갑니다.
AWS CodeDeploy 는 EC2 등에 애플리케이션 배포를 자동화하는 서비스이고, 소스 파일과 스크립트가 들어 있는 revision 을 S3 나 GitHub 에 올린 뒤 배포할 수 있습니다. AWS 문서상 CodeDeploy 는 EC2/온프레미스 배포를 지원하고, 롤링 업데이트나 블루/그린 배포로 다운타임 최소화와 롤백도 지원합니다. 그래서 나중에 서버가 늘어나거나 배포를 더 안정적으로 하고 싶다면 Jenkins 에서 직접 제 추천은 이렇습니다.
한 줄로 정리하면: 참고 사이트:
|