name: Deploy TO EC2 on: push: branches: - main jobs: Deploy: runs-on: ubuntu-latest # SSH로 접속하는 명령어를 쳐주자. # 일일이 다 쳐도 되지만 불편하기때문에 github actions의 라이브러리를 사용하면 편하다 # uses는 내가 어떤 라이브러리를 쓸 건지 기재하는 곳이다. steps: # SSH는 다른 원격 컴퓨터로 접속하는 프로토콜이다. # Github Actions도 하나의 컴퓨터고, EC2도 하나의 컴퓨터이므로 SSH를 통해서 원격 접속을 진행해주자. - name: SSH(원격 접속)로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST }} # IP 주소를 말함 username: ${{ secrets.EC2_USERNAME }} # EC2를 연결할 때 사용자 이름 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2에 접근할 때 사용하는 키 페어 script_stop: true # run이 아닌 script로 실행하는 라이브러리도 있으니 예제파일을 참고하자 # EC2에 접속해서 실행한 명령어들을 차례대로 작성해주자 # 1. 프로젝트의 해당 경로로 이동 # 2. github에서 프로젝트 pull # 3. gradlew 재 빌드 # 4. 포트번호 8080서버를 끄거나 서버가 이미 꺼져있어도 true # 5. SNAPSHOT.jar로 끝나는 파일을 실행. 로그는 output이라는 파일에 남김 script: | cd /home/ubuntu/personal-cicd-server git pull origin main ./gradlew clean build sudo fuser -k -n tcp 8080 || true sudo java -jar /personal-cicd-server/build/libs/*SNAPSHOT.jar > ./output.log 2>&1 & 메모리 부족 문젠가 싶어서 https://velog.io/@kwontae1313/AWS-EC2-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4 위 링크를 보며 메모리 용량 증설 도 해주었으나, 이후에도 안되어서 t3.small로 인스턴스 유형을 변경하였습니다. 근데 계속 Killed이 뜨네요..ㅠㅠ 다시 서버를 실행시키면 코드가 변경은 되어있구요.. 왜 계속 프로세스가 죽는걸까요..??
안녕하세요, 강의 잘 듣고 있습니다 ! Dockerfile과 githubActions의 yml 파일의 경계를 잘 모르겠습니다. Dockerfile을 통해 jar를 만들어서 실행할 수도 있고, 강의처럼 yml 파일에서 jar파일을 만들 수도 있는데, 현업에서는 이 두 방식 중 어떤 걸 사용하는지 또, 어떤 이점 때문에 사용하는지 궁금합니다...! 추가로, mysql이나 redis 같은 경우는 따로 Dockerfile을 작성하지 않고 compose.yml 에서 바로 이미지 생성을 하고 있는데 이렇게 되는 경우, EC2에서 이미지가 만들어지니 각각의 Dockerfile을 만들어서 gitActions 단계에서 처리하는 게 좋을까요...?
현업에서는 그러면 누가 PUSH를 해서 CI/CD로 적용을 시키나요? 아무나 다 깃 푸쉬로 cicd를 적용하면 깃헙에 merge나 충돌이 날거같은데 그러면 막상 깃헙에 올라온 코드랑 ec2 올라가있는 코드가 다를거같은데 이 부분이 잘 안그려지네요... 질문이 두서가 없어서 죄송합니다 ㅠㅠ 어떤식으로 현업에선 흘러가는지 궁금합니다,.
docker 실습을 위해서 Windows 환경에 WSL v2 버전 설치 후 docker를 올렸습니다. docker search 시에는 검색이 되는데 docker pull 을 하면 아래의 에러가 발생됩니다. "Error response from daemon: Get " https://registry-1.docker.io/v2/ ": net/http: TLS handshake timeout" 😢 인터넷에 찾아보니 인터넷 속도가 느려서라는데 인터넷 속도는 100Mbps로 늦을 이유가 없습니다. 혹시 다른 해결책이 있을까요? 실습이 불가능하여 이론 공부만 계속 하고 있어요 ㅠㅠ
실무에서 도커를 사용하고 있지만 intelliJ 에서 spring app을 실행하고 개발환경을 맞출 수 있다는 생각은 안해봤습니다. 좋은 내용 감사합니다. 다만 remote JVM Debug 설정을 추가할 때 before launch 설정중 '+'에서 'Lanch Docker Before Debug' 옵션이 없는데 왜그런걸까요? 확인해주시면 감사하겠습니다. 좋은 하루 되세요
Run ./gradlew clean build 2 ./gradlew clean build 3 shell: /usr/bin/bash -e {0} 4 env: 5 JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.7-6/x64 6 JAVA_HOME_21_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.7-6/x64 7 /home/runner/work/_temp/ 24e2a6f8-136d-471b-b2ea-6203042af791.sh : line 1: ./gradlew: Permission denied Error: Process completed with exit code 126. 찾아보니깐 실행 권한이 없어서 ./gradlew 스크립트를 실행하지 못했다는 뜻이라고 하는데 즉, Gradle Wrapper 파일에 실행 권한이 없어서 생긴 문제가 맞을까요? - name: gradlew 실행 권한 부여 run: chmod +x ./gradlew 이렇게 붙여줬더니 되긴 하더라고요. 맞는 방법이 몰라서 여쭤봅니다.
빌드 방식 설명에서 도커 파일을 작성해서 이미지 빌드 명령을 실행하면 도커가 임시 컨테이너를 실행하고 도커 파일에 정의된 작업을 수행 및 커밋하여 새로운 레이어를 생성하고 임시 컨테이너를 삭제한다. 이렇게 그림으로 되어있는데, 커밋을 했다는게 새로운 레이어가 포함된 이미지를 만들었다는 건가요? 임시 컨테이너 생성, 커밋, 임시 컨테이너 삭제가 반복 저 과정이 반복되는 거면 지시어 한 문장을 만날 때마다 수행 및 커밋하고 임시 컨테이너 삭제하고를 반복한다고 이해했는데, 이러면 지시어가 많을 수록 임시 컨테이너 생성, 삭제가 많이 반복되는 건가요?
The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems. CodeDeploy Agent는 EC2에서 active 상태이고, S3에 업로드도 잘 되었으며, IAM 역할도 다음과 같이 설정했습니다: - EC2 인스턴스 역할: code-deploy-ec2-role (정책: code-deploy-ec2-policy 세부 S3 ) - CodeDeploy 서비스 역할: AWSCodeDeployRole 포함 하지만 배포 시 아래와 같은 에러가 납니다: > The overall deployment failed because too many individual instances failed deployment, or too few healthy instances... 추가로 EC2 내에서 /var/log/aws/codedeploy-agent/ 로그 폴더가 존재하지 않습니다. appspec.yml 및 start.sh 도 정상 포함했고, S3에 .tar.gz 도 업로드 확인했습니다.
안녕하세요! 강의 잘 들었습니다. 저는 여기에 추가로 rds로 db 연결, 그리고 Dockerfile 세팅작업에서 나아가 compose.yml로 nginx,redis 등 세팅 해주려 하는데 그것도 이 기본 세팅 위에서 작업하면 되는건가요..? 감사합니다. 그리고 단일 프로젝트에서는 codedeploy까지는 안해도 괜찮은 건지 궁금하고 추후 무중단 배포로 갈때는 blue/green 이런 전략을 찾아보고 채택하면 되는지 질문드립니다!
https://jungle-case-018.notion.site/SSH-11a35c9c2899808aa2e3fefac15f5c87 의 내용을 바탕으로 윈도우에서 SSH 접속이 가능하게 하려고 설정중인데, 확장자명이 없는 config파일을 만드는 법을 아무래도 모르겠습니다. (더보기 클릭)도 안되어서 도저히 못찾겠네요.. 도움 부탁드립니다.
안녕하세요 강의 잘 봤습니다. 제가 토이프로젝트에서 작업했을 때는 깃허브에 직접 들어가 Pull requests 메뉴에 들어가서 버튼누르니까 자동으로 merge하고 테스트, 실행까지 다하던데 pull requests 역할이 무슨 뜻이고, 이것도 설정을 어떻게 하는건지 궁금합니다. 그리고 강의에서는 merge까지는 안 알려주시던데 deploy.yml에서 코드 작성하면 되는건가요?
안녕하세요 강의 잘 보고 있습니다. 예전 회사에서 깃허브 대신 Aws의 CodeCommit을 이용하여 코드 보관했는데 이때 git action이 사용가능한지 궁금합니다. 만약에 안되면 다른 방식으로 어떻게 CI/CD 를 구현하는지 궁금합니다. 하는 방법 링크좀 부탁드립니다 그리고 다른 회사들도 git hub 말고 svn 등 다른것도 쓸텐데 이때는 젠킨스를 쓸 수밖에 없는건지 궁금하네요