일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 일대다
- 스토어드 프로시저
- dfs
- shared lock
- FetchType
- BOJ
- 이진탐색
- CHECK OPTION
- 연관관계
- execute
- JPQL
- 힙
- 다대일
- 연결리스트
- exclusive lock
- 지연로딩
- SQL프로그래밍
- 백트래킹
- eager
- 유니크제약조건
- fetch
- 비관적락
- 다대다
- querydsl
- 스프링 폼
- PS
- 데코레이터
- 낙관적락
- 즉시로딩
- 동적sql
- Today
- Total
흰 스타렉스에서 내가 내리지
Github Actions :: 깃허브 액션, CodeDeploy&Docker 본문
1.
2.
3. gradle.yml 수정
이거 됨 됨 됨!!!!
name: Deploy to Amazon EC2
on:
push:
branches:
- main
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
env :
working-directory: ./
APPLICATION: ${{ secrets.APPLICATION }}
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v3
# (2) JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- uses: actions/checkout@v3
- run: touch ./src/main/resources/application.yml
- run: echo "${{env.APPLICATION}}" > ./src/main/resources/application.yml
- uses: actions/upload-artifact@v3
with:
name: application.yml
path: ./src/main/resources/application.yml
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
shell: bash
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
# (3) Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean build -x test
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
# (4) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용 )
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
# (5) 빌드 결과물을 S3 버킷에 업로드
- name: Upload to AWS S3
run: |
aws s3 cp --region ${{ secrets.AWS_REGION }} ./$GITHUB_SHA.zip s3://${{ secrets.S3_BUCKET_NAME }}/$GITHUB_SHA.zip
# (6) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \
--application-name ${{ secrets.CODE_DEPLOY_APPLICATION_NAME }} \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name ${{ secrets.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
--s3-location bucket=${{ secrets.S3_BUCKET_NAME }},key=$GITHUB_SHA.zip,bundleType=zip
name: Deploy to Amazon EC2
on:
push:
branches:
- main
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
env :
working-directory: ./
APPLICATION: ${{ secrets.APPLICATION }}
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v3
# (2) JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- uses: actions/checkout@v3
- run: touch ./src/main/resources/application.yml
- run: echo "${{env.APPLICATION}}" > ./src/main/resources/application.yml
- uses: actions/upload-artifact@v3
with:
name: application.yml
path: ./src/main/resources/application.yml
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
shell: bash
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
# (3) Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean build -x test
- name: Cleanup Gradle Cache
if: ${{ always() }}
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
- name: Docker build
run: |
sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
sudo docker build -t ${{ secrets.PROJECT_NAME }} .
sudo docker tag ${{ secrets.PROJECT_NAME }} ${{ secrets.DOCKER_HUB_REPO }}:${GITHUB_SHA::7}
sudo docker push ${{ secrets.DOCKER_HUB_REPO }}:${GITHUB_SHA::7}
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_SERVER_HOST }}
username: ec2-user
key: ${{ secrets.KEY }}
envs: GITHUB_SHA
script: |
sudo docker stop $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q)
sudo docker rmi $(sudo docker images -q)
sudo docker pull ${{ secrets.DOCKER_HUB_REPO }}:${GITHUB_SHA::7}
sudo docker tag ${{ secrets.DOCKER_HUB_REPO }}:${GITHUB_SHA::7} ${{ secrets.PROJECT_NAME }}
sudo docker stop ${{ secrets.PROJECT_NAME }}
sudo docker rm ${{ secrets.PROJECT_NAME }}
sudo docker run -d -p 80:8080 --name ${{ secrets.PROJECT_NAME }} ${{ secrets.PROJECT_NAME }}
# - name: Make zip file
# run: zip -r ./$GITHUB_SHA.zip .
# shell: bash
# # (4) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용 )
# - name: Configure AWS credentials
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: ${{ secrets.AWS_REGION }}
#
# # (5) 빌드 결과물을 S3 버킷에 업로드
# - name: Upload to AWS S3
# run: |
# aws s3 cp --region ${{ secrets.AWS_REGION }} ./$GITHUB_SHA.zip s3://${{ secrets.S3_BUCKET_NAME }}/$GITHUB_SHA.zip
#
# # (6) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
# - name: Deploy to AWS EC2 from S3
# run: |
# aws deploy create-deployment \
# --application-name ${{ secrets.CODE_DEPLOY_APPLICATION_NAME }} \
# --deployment-config-name CodeDeployDefault.AllAtOnce \
# --deployment-group-name ${{ secrets.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
# --s3-location bucket=${{ secrets.S3_BUCKET_NAME }},key=$GITHUB_SHA.zip,bundleType=zip
on 에서는 워크플로우를 수행할 이벤트를 결정한다.
위 코드는 main을 베이스 브랜치로 한 pull request를 생성하였을 때 수행된다는 뜻이다.
jobs 에서는 수행할 워크플로우를 차례대로 입력하면 된다.
4. commit 하고 pull request 까지 한다.
PR을 하면 자동으로 Github Actions가 동작하여 빌드를 실행한다.
모든 워크 플로우가 성공하면 녹색으로 성공 여부를 알려준다.
근데 나는 에러가 발생했는데,
당연한거다. application.yml이 깃허브에 업로드 되어 있지 않으니.
5. application.yml 넣기
settings → Security.Actions
APPLICATION 에 application.yml 넣고, 각종 환경변수 넣기
# AWS
0. EC2에서 Tag 추가 (CodeDeploy 에서 어떤 인스턴스에 실행할 지 구분하는 값)
1. IAM에서 CodeDeploy, S3 권한 주기
- EC2 전용 role 추가
- ec2 인스턴스로 가서 IAM ROLE 수정
2.3. CodeDeploy Agent 설치
sudo yum update
sudo yum install ruby
sudo yum install wget
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile
sudo service codedeploy-agent status
CodeDeploy 에이전트가 설치되어 실행 중이면 "The AWS CodeDeploy agent is running"와 같은 메시지가 표시되어야 합니다.
CodeDeploy 전용 IAM 역할 만들기
2. jar 파일을 담을 S3 버킷을 새로 만듦
3. aws CodeDeploy 이동 → Deploy.Applications.[Create application]
4. create deployment group
5. Github Actions 에서 사용할 IAM 사용자 추가
- S3FullAccess, CodeDeployFullAccess 권한을 주는 user를 생성한 후, 키 발급.
받은 키를 깃허브 레포 환경변수로 저장
7.3. build.gradle 파일 수정
위 스크립트를 보면 /build/libs/*.jar 파일을 $JAR_FILE 파일로 복사합니다.
그런데 Spring Boot 2.5 버전부터는 빌드 시 일반 jar 파일 하나와 -plain.jar 파일 하나가 함께 만들어집니다.
그래서 빌드 시 plain jar 파일은 만들어지지 않도록 build.gradle 파일에 다음 내용을 추가해야 합니다.
jar {
enabled = false
}
6. AppSpec 파일 작성
이제 CodeDeploy 에서 배포를 위해 참조할 appspec.yml 작성합니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/action
overwrite: yes
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStart:
- location: scripts/deploy.sh
timeout: 60
runas: ec2-user
파일위치
scripts/deploy.sh 를 안에 둔다.
appspec.yml도 위에.
application-prod.yml 에 로그찍는 부분 다음과 같이 수정
🤬 도커 해보자.....ㅡㅡ
환경변수 KEY에는 .pem 내용 넣어주고,
DOCKER_PASSWORD는 도커 허브에서 받은 access_token을 넣어줬음
$ sudo systemctl start docker
$ sudo systemctl enable docker
ec2에서 도커 켜주고 (설치하고)
<<<<에러 이거 뜨면요>>>>
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied
sudo chmod 666 /var/run/docker.sock
ec2에서 이거 하시면 됩니다.
docker login 커맨드로 오류 안뜨는지 확인!
Dockerfile
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
build.gradle 에 이거 넣어줘야함
jar {
enabled = false
}
'web.etc' 카테고리의 다른 글
CGI : 서버에서 프로그램을 실행시키자 (0) | 2023.05.06 |
---|---|
JWT (0) | 2023.02.28 |
80번포트로 들어오는 요청을 8080번포트로보내라! (0) | 2023.02.15 |
세션 저장소로 데이터베이스 사용하기 (0) | 2023.01.18 |
pythonanywhere - 배포하기 (0) | 2022.06.09 |