GitHub Action으로 빌드 자동화 - CI
# 스크립트
deploy.yaml
name: CQRE-CI
env:
CQRE_JASYPT_PASSWORD: ${{ secrets.CQRE_JASYPT_PASSWORD }}
on: # 지정한 이벤트가 해당 브랜치에서 발생할 때 Github Action 동작
push:
branches:
- master
pull_request:
branches:
- master
jobs: # 여러 Step으로 구성되고, 각 step 들은 가상 환경의 인스턴스에서 실행됨.
build:
runs-on: ubuntu-20.04 # 가상환경 OS
steps:
- name: Checkout
uses: actions/checkout@v2
- name: create mysql docker container # 가상환경에 mysql 컨테이너 생성
run: |
sudo docker run -d -p 3306:3306 --env MYSQL_DATABASE=cqre --env MYSQL_ROOT_PASSWORD=1234 mysql:8.0.23
- name : Set up JDK 11 # 자바 버전
uses: actions/setup-java@v1
with:
distribution: 'adopt'
java-version: '11'
- name : Grant execute permission for gradlew # 권한 추가
run: chmod +x ./gradlew
shell: bash
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name : Build with Gradle # gradle로 빌드
run: ./gradlew clean build
shell: bash
- name: Set up Docker Buildx # Dockerfile 빌드로 DockerImage 생성
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub # DockerHub 로그인
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push # DockerHub로 DockerImage Push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: ${{ secrets.DOCKERHUB_TAG }}
- name: Get Current Time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
shell: bash
#Docker hub
- 빌드 후 Docker image를 생성해서 지정된 Docker Hub 저장소에 이미지를 push 하도록
스크립트에 추가했다. 이를 위해서 필요한 작업들이 있다.
사용자 추가
- 저장소는 디폴트가 퍼블릭
- Collaborators 탭에서 사용자 추가해줘야, 다른 사용자도 이 저장소에 도커 이미지 올릴 수 있다.
- 혼자라면 상관없다.
토큰 발급
-
Account Settings → Security → New Access Token
-
발급받은 토큰을 Github Action Secretes에 넣어놓고 사용하면 된다.
# 중요정보 암호화
JASYPT_PASSWORD
, secrets.DOCKERHUB_TOKEN
이런 중요 정보들은
github action에 넣어놓고 사용한다.
- 저장소 → Settings → Secrets → New repository secret
name에는 스크립트에서 사용한 이름이랑 매핑, value에는 실제 값
- 주의! DockerHub_Tag값은 [DOCKER HUB 계정 이름]/[DOCKER HUB 저장소]:[TAG] 형태로 값을 지정해야 한다.
#이슈 - 프로퍼티 지정
deploy.yaml
name: CQRE-CI
env:
CQRE_JASYPT_PASSWORD: ${{ secrets.CQRE_JASYPT_PASSWORD }}
on: # 지정한 이벤트가 해당 브랜치에서 발생할 때 Github Action 동작
push:
branches:
- master
pull_request:
branches:
- master
jobs: # 여러 Step으로 구성되고, 각 step 들은 가상 환경의 인스턴스에서 실행됨.
build:
runs-on: ubuntu-20.04 # 가상환경 OS
steps:
- name: Checkout
uses: actions/checkout@v2
- name: create mysql docker container # 가상환경에 mysql 컨테이너 생성
run: |
sudo docker run -d -p 3306:3306 --env MYSQL_DATABASE=cqre --env MYSQL_ROOT_PASSWORD=1234 mysql:8.0.23
- name : Set up JDK 11 # 자바 버전
uses: actions/setup-java@v1
with:
distribution: 'adopt'
java-version: '11'
- name : Grant execute permission for gradlew # 권한 추가
run: chmod +x ./gradlew
shell: bash
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name : Build with Gradle # gradle로 빌드
run: ./gradlew clean build
shell: bash
- name: Set up Docker Buildx # Dockerfile 빌드로 DockerImage 생성
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub # DockerHub 로그인
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push # DockerHub로 DockerImage Push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: ${{ secrets.DOCKERHUB_TAG }}
- name: Get Current Time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
shell: bash
- 빌드 후 Docker image를 생성해서 지정된 Docker Hub 저장소에 이미지를 push 하도록
스크립트에 추가했다. 이를 위해서 필요한 작업들이 있다.
사용자 추가
- 저장소는 디폴트가 퍼블릭
- Collaborators 탭에서 사용자 추가해줘야, 다른 사용자도 이 저장소에 도커 이미지 올릴 수 있다.
- 혼자라면 상관없다.
토큰 발급
-
Account Settings → Security → New Access Token
-
발급받은 토큰을 Github Action Secretes에 넣어놓고 사용하면 된다.
# 중요정보 암호화
JASYPT_PASSWORD
, secrets.DOCKERHUB_TOKEN
이런 중요 정보들은
github action에 넣어놓고 사용한다.
- 저장소 → Settings → Secrets → New repository secret
name에는 스크립트에서 사용한 이름이랑 매핑, value에는 실제 값
- 주의! DockerHub_Tag값은 [DOCKER HUB 계정 이름]/[DOCKER HUB 저장소]:[TAG] 형태로 값을 지정해야 한다.
#이슈 - 프로퍼티 지정
JASYPT_PASSWORD
, secrets.DOCKERHUB_TOKEN
이런 중요 정보들은github action에 넣어놓고 사용한다.
name에는 스크립트에서 사용한 이름이랑 매핑, value에는 실제 값
- 프로퍼티 파일에 있는 정보들을 가져오지 못하는 에러가 발생했다.
- 이유는 프로퍼티 파일을 로컬, 개발환경별로 분리했는데 빌드 시 두 프로퍼티 파일 중 어떤 프로퍼티 파일을 선택해야 할지 몰라서 발생한 에러이다.
- 빌드 파일에 프로퍼티 파일을 지정해 주면 된다.
test {
useJUnitPlatform()
systemProperty "file.encoding", "utf-8"
systemProperty 'spring.profiles.active', 'local'
}
#캐싱
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
-
캐싱이 적용된 후 약 1분가량 빨라진걸 확인할 수 있다.
-
방법은 공식문서에 잘 나와있다.
#ETC
-
테스트, 빌드 작업은 GitHub Action에서 만든 가상환경에서 진행된다는 점을 꼭 기억하자.
이 글에는 포함하지 않았지만 이 때문에 3일동안 삽질했다.
-
빌드 실패 시 정확한 에러 메시지를 보려면 로컬에서는 index.html
파일을 보면 알 수 있지만, GitHub Action으로 빌드하면 해당 가상환경에 남기는 index.html
파일을 확인해야 하는데, 공식문서와 구글링을 다 뒤져봤지만 가상환경에서 생성된 index.html
파일을 확인할 수 있는 방법을 찾지 못했다.
그래서 어떤부분에서 에러가 발생했는지 추측으로만 해결해야 했다.
Author And Source
이 문제에 관하여(GitHub Action으로 빌드 자동화 - CI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@znftm97/GitHub-Action으로-빌드-자동화-CI
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
테스트, 빌드 작업은 GitHub Action에서 만든 가상환경에서 진행된다는 점을 꼭 기억하자.
이 글에는 포함하지 않았지만 이 때문에 3일동안 삽질했다.
빌드 실패 시 정확한 에러 메시지를 보려면 로컬에서는 index.html
파일을 보면 알 수 있지만, GitHub Action으로 빌드하면 해당 가상환경에 남기는 index.html
파일을 확인해야 하는데, 공식문서와 구글링을 다 뒤져봤지만 가상환경에서 생성된 index.html
파일을 확인할 수 있는 방법을 찾지 못했다.
그래서 어떤부분에서 에러가 발생했는지 추측으로만 해결해야 했다.
Author And Source
이 문제에 관하여(GitHub Action으로 빌드 자동화 - CI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@znftm97/GitHub-Action으로-빌드-자동화-CI저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)