Skip to content

Helm Update [Prod] #364

Helm Update [Prod]

Helm Update [Prod] #364

Workflow file for this run

name: Helm Update [Prod]
on:
push:
paths:
- "deploy/helm/**"
- ".github/workflows/helm_prod.yml"
branches: [ "master" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# job은 사용자가 정한 플랫폼을 통해 steps 라는 일련의 과정을 실행.
# 여러 개의 job 을 사용할 수 있으며, 여러 개의 job 을 사용할 때는 서로 정보도 교환 가능.
# 각각 독립적으로도 실행 가능.
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
# 레파지터리 체크 아웃
- name: Check out source code
uses: actions/checkout@v4
# Necessary dir Check
- name: media dir check
uses: garygrossgarten/github-action-ssh@release
with:
host: ${{ secrets.NFS_HOST }}
username: ${{ secrets.NFS_USER }}
password: ${{ secrets.NFS_PASS }}
command: |
cd ${{ secrets.NFS_PATH }}/prod
mkdir -p ./app/django/media
echo '${{ secrets.NFS_PASS }}' | sudo -S chmod -R 755 ./app/django/media
# Helm source to CI/CD server copy transfer
- name: Copy helm, to CI/CD server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.CICD_HOST }}
username: ${{ secrets.CICD_USER }}
password: ${{ secrets.CICD_PASS }}
source: 'deploy'
target: ${{ secrets.CICD_PATH }}/prod/
# helm upgrade --> install
- name: SSH Remote Commands from ci/cd server
uses: garygrossgarten/github-action-ssh@release
with:
host: ${{ secrets.CICD_HOST }}
username: ${{ secrets.CICD_USER }}
password: ${{ secrets.CICD_PASS }}
command: |
cd ${{ secrets.CICD_PATH }}/prod
mkdir -p ./volume/mysql; cd deploy/helm
helm upgrade ${{ secrets.DATABASE_USER }} . -f ./values-prod.yaml \
--install -n prod-hrebs --create-namespace --history-max 5 --wait --timeout 10m \
--set global.dbPassword=${{ secrets.DATABASE_PASS }} \
--set global.cicdPath=${{ secrets.CICD_PATH }} \
--set global.cicdServerHost=${{ secrets.CICD_HOST }} \
--set global.nfsPath=${{ secrets.NFS_PATH }} \
--set global.nfsServerHost=${{ secrets.NFS_HOST }} \
--set global.domainHost=${{ secrets.DOMAIN_HOST }} \
--set global.emailHost=${{ secrets.EMAIL_HOST }} \
--set global.emailHostUser=${{ secrets.EMAIL_HOST_USER }} \
--set global.emailHostPassword=${{ secrets.EMAIL_HOST_PASSWORD }} \
--set global.emailDefaultSender=${{ secrets.EMAIL_DEFAULT_SENDER }} \
--set 'nginx.ingress.tls[0].hosts[0]'=${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.tls[0].hosts[1]'=www.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.tls[0].hosts[2]'=api.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.tls[0].hosts[3]'=info.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.hosts[0].host'=${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.hosts[1].host'=www.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.hosts[2].host'=api.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.hosts[3].host'=info.${{ secrets.DOMAIN_NAME }} \
--set 'nginx.ingress.hosts[0].paths[0].path'=/ \
--set 'nginx.ingress.hosts[0].paths[0].pathType'=ImplementationSpecific \
--set 'nginx.ingress.hosts[1].paths[0].path'=/ \
--set 'nginx.ingress.hosts[1].paths[0].pathType'=ImplementationSpecific \
--set 'nginx.ingress.hosts[2].paths[0].path'=/ \
--set 'nginx.ingress.hosts[2].paths[0].pathType'=ImplementationSpecific \
--set 'nginx.ingress.hosts[3].paths[0].path'=/ \
--set 'nginx.ingress.hosts[3].paths[0].pathType'=ImplementationSpecific
# slack --> notification
- name: Send slack when failed
if: ${{ failure() }} # 실패했을 때 실행
uses: ./.github/actions/slack-notify # 직접 '만든' Action이므로 uses 키워드를 이용해서 아래 경로를 입력해줍니다.
with:
slack_incoming_url: ${{ secrets.SLACK_INCOMING_URL }}
- name: Send slack if completed
if: ${{ success() }} # 성공할 때만 실행
uses: ./.github/actions/slack-notify
with:
status: success # status input은 받는 쪽에서 default 값을 정해놨기 때문에 success일 때만 전달.
slack_incoming_url: ${{ secrets.SLACK_INCOMING_URL }}