8. WorkFolws 분할하기
1. WorkFlows 분할하기
CI/CD는 성공했지만, git flows를 적용하여 develop 브랜치로 commit 하면 build만 수행하고,
release 브랜치로 commit하면 build와 release가 수행되게 하고 싶었다.
workflows를 두 개로 분할하여 작성하였다.
workflows_CI.yml
name: Java CI with Gradle
on:
push:
branches: { "브랜치 명" }
pull_request:
env:
S3_BUCKET_NAME: { "S3 버키 명" }
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# Github submodule
- name: Checkout repo
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
submodules: true
# Gradle 유효성 검사
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
# Gradle 빌드 & 테스트
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
- name: Run the Gradle package task
run: ./gradlew build
workflows_CI_CD.yml
name: Java CD with AWS
on:
push:
branches: { "브랜치 명" }
env:
S3_BUCKET_NAME: { "S3 버킷 명" }
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# Github submodule
- name: Checkout repo
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
submodules: true
# Gradle 유효성 검사
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
# Gradle 빌드 & 테스트
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
- name: Run the Gradle package task
run: ./gradlew build
# before_deploy 디렉토리 생성
- name: Make Directory
run: mkdir -p before-deploy
# deploy.sh, appspec.yml, jar파일 복사 후, before-deploy 내부의 모든 파일을 압축
- name: Copy files to deploy directory
run: |
cp scripts/*.sh before-deploy/
cp appspec.yml before-deploy/
cp build/libs/*.jar before-deploy/
cd before-deploy && zip -r before-deploy.zip .
cd ../ && mkdir -p deploy
mv before-deploy/before-deploy.zip deploy/{"압축파일 명"}.zip
- 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: ap-northeast-2
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 deploy/{"압축파일 명"}.zip s3://$S3_BUCKET_NAME/
develop:
runs-on: ubuntu-latest
needs: build
steps:
# Deploy
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws deploy create-deployment \
--application-name github-actions \
--deployment-group-name github-actions-group \
--file-exists-behavior OVERWRITE \
--s3-location bucket={ "S3 버킷 명" },bundleType=zip,key={ "압축 파일 명"}.zip \
--region ap-northeast-2
workflows_CI.yml Event 트리거 조건
- develop 브랜치 : push, pull_reqest
- release 브랜치 : pull_reqeust
workflows_CI_CD.yml 조건
- release 브랜치 : push
위와 같이 Event발동 조건을 주어 내가 의도 한대로 release 브랜치에 push가 될 때만 배포가 되도록 설정하고,
나머지 행동은 build 테스트만 하도록 해주었다.
2. push와 pull_request 확인해보기
1. build만 수행할 브랜치에 푸시해 보기
push 하면 build만 수행한다.
2. build만 수행한 브랜치에서 배포용 브랜치로 pull_request 해보기
pull_request의 open을 감지하고 build만 수행한다.
merge를 할 경우 push가 되어 build와 release가 수행된다.
'깃 탐구' 카테고리의 다른 글
GitHub Actions) 7. 자동 배포 Script 작성하기 및 CI/CD 확인해보기 (0) | 2023.08.26 |
---|---|
GitHub Actions) 6. AWS CodeDeploy Application 생성 (0) | 2023.08.26 |
GitHub Actions) 5. EC2 서버 설정하기 (0) | 2023.08.26 |
GitHub Actions) 4. IAM 역할 생성하기 (0) | 2023.08.26 |
GitHub Actions) 3. S3 Bucket 생성하고 업로드하기 (0) | 2023.08.25 |