Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
jairomr authored Sep 25, 2024
1 parent e54beae commit 7212242
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 56 deletions.
113 changes: 58 additions & 55 deletions .github/workflows/prod.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
name: Build and Deploy in Production Server app_lapig_jobs
name: Build and Deploy in Server Lapig Jobs

on:
push:
branches:
- main

jobs:
build-and-deploy:
build:
runs-on: ubuntu-latest
env:
REGISTRYSERVER: ${{secrets.REGISTRYPROD}}
SERVER_KNOWN: ${{secrets.SERVER_PROD_KNOWN}}
DOCKER_SERVER: ${{secrets.SERVER_PROD}}
SSH_SERVER: ${{secrets.SERVER_PROD_SSH}}
DOCKER_PATH: "prod"


outputs:

APPLICATION_NAME: ${{ steps.creat_env.outputs.APPLICATION_NAME }}
DOCKER_PATH: ${{ steps.creat_env.outputs.DOCKER_PATH }}

START_TIME: ${{ steps.creat_env.outputs.START_TIME }}
LAST_COMMIT_HASH: ${{ steps.creat_env.outputs.LAST_COMMIT_HASH }}

Expand All @@ -26,7 +23,7 @@ jobs:
LAPIG_COMMIT_DATE: ${{ steps.creat_env.outputs.LAPIG_COMMIT_DATE }}

CREATE_STATUS: ${{steps.deploy_container.outputs.CREATE_STATUS}}
DELETE_STATUS: ${{steps.deploy_container.outputs.DELETE_STATUS}}
DELETE_STATUS: ${{steps.delete_container.outputs.DELETE_STATUS}}
START_STATUS: ${{steps.start_container.outputs.START_STATUS}}


Expand All @@ -39,12 +36,14 @@ jobs:
id: creat_env
run: |
echo "START_TIME=$(date -u +%s)" >> "$GITHUB_OUTPUT"
echo "DOCKER_PATH=prod" >> $GITHUB_ENV
echo "DOCKER_PATH=prod" >> $GITHUB_OUTPUT
repo_full_name=$GITHUB_REPOSITORY
repo_name=${repo_full_name##*/}
echo "Nome do repositório: $repo_name"
echo "application_name=app_lapig_jobs" >> $GITHUB_ENV
echo "APPLICATION_NAME=app_lapig_jobs" >> $GITHUB_OUTPUT
echo "LAST_COMMIT_HASH=$(git log --pretty=format:%h -n 1)" >> $GITHUB_ENV
Expand All @@ -70,67 +69,71 @@ jobs:
- name: Build Server and client
run: |
npm set progress=false
cd ${{ github.workspace }}
npm install
cd ${{ github.workspace }}/src/server && npm install
cd ${{ github.workspace }}/src/client && npm install
npm install -g @angular/cli@12.2.16
cd ${{ github.workspace }}/src/client && ng build --stats-json --source-map=false --no-progress
- name: Build Docker
run: |
docker build -t $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH} -t $REGISTRYSERVER/$application_name:latest -f docker/$DOCKER_PATH/Dockerfile . --no-cache
docker build -t lapig/$application_name:${DOCKER_PATH}_${LAST_COMMIT_HASH} -t lapig/$application_name:${DOCKER_PATH}_latest -f docker/$DOCKER_PATH/Dockerfile . --no-cache
- name: Login to Docker Registry
run: echo "${{ secrets.HARBOR_PASS }}" | docker login -u "${{ secrets.HARBOR_USER }}" --password-stdin "${{ secrets.URL_PRIVATE_REGISTRY }}"
run: echo "${{ secrets.DOCKERHUB_PASS }}" | docker login -u "lapig" --password-stdin

- name: Push Image to Registry
run: |
docker push $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH}
docker push $REGISTRYSERVER/$application_name:latest
docker push lapig/$application_name:${DOCKER_PATH}_${LAST_COMMIT_HASH}
docker push lapig/$application_name:${DOCKER_PATH}_latest
- name: Remove image locally
run: |
docker rmi $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH}
docker rmi $REGISTRYSERVER/$application_name:latest
- name: Add SSH key to known_hosts
docker rmi lapig/$application_name:${DOCKER_PATH}_${LAST_COMMIT_HASH}
docker rmi lapig/$application_name:${DOCKER_PATH}_latest
deploy:
needs: build
runs-on: self-hosted

steps:
- name: Load env
run: |
mkdir -p ~/.ssh
ssh-keyscan -t rsa $SERVER_KNOWN >> ~/.ssh/known_hosts 2>/dev/null
chmod 644 ~/.ssh/known_hosts
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo "application_name=${{needs.build.outputs.APPLICATION_NAME}}" >> $GITHUB_ENV
echo "DOCKER_PATH=${{needs.build.outputs.DOCKER_PATH}}" >> $GITHUB_ENV
- name: Pull Image on Server
run: |
ssh $SSH_SERVER "docker pull $REGISTRYSERVER/$application_name:latest"
docker pull lapig/$application_name:${DOCKER_PATH}_latest
- name: Deploy Container
id: deploy_container
- name: Delete Container
id: delete_container
continue-on-error: true
run: |
delete_status=$(ssh $SSH_SERVER "curl -v -X DELETE -w "%{http_code}" http://$DOCKER_SERVER/containers/$application_name?force=true 2>/dev/null")
create_status=$(ssh $SSH_SERVER "curl -v -X POST -H 'Content-Type: application/json' -d @${{secrets.CONFIG_FILES}}$application_name.json -s -o /dev/null -w "%{http_code}" http://$DOCKER_SERVER/containers/create?name=$application_name 2>/dev/null")
delete_status=$(curl -v -X DELETE -w "%{http_code}" http://$DOCKER_HOST/containers/$application_name?force=true 2>/dev/null)
case $delete_status in
204) delete_status_text="OK";;
*) delete_status_text="ERROR";;
esac
echo "del $delete_status"
echo "DELETE_STATUS=$delete_status_text" >> "$GITHUB_OUTPUT"

- name: Deploy Container
id: deploy_container
run: |
create_status=$(curl -v -X POST -H 'Content-Type: application/json' -d @/compose/$application_name.json -s -o /dev/null -w "%{http_code}" http://$DOCKER_HOST/containers/create?name=$application_name 2>/dev/null)
case $create_status in
201) create_status_text="OK";;
*) create_status_text="ERROR";;
esac
echo "del $delete_status"
echo "creat $create_status"
echo "CREATE_STATUS=$create_status_text" >> "$GITHUB_OUTPUT"
echo "DELETE_STATUS=$delete_status_text" >> "$GITHUB_OUTPUT"
- name: Start Container
id: start_container
run: |
start_status=$(ssh $SSH_SERVER "curl -v -X POST -s -o /dev/null -w "%{http_code}" http://$DOCKER_SERVER/containers/$application_name/start 2>/dev/null")
start_status=$(curl -v -X POST -s -o /dev/null -w "%{http_code}" http://$DOCKER_HOST/containers/$application_name/start 2>/dev/null)
case $start_status in
204) start_status_text="OK";;
*) start_status_text="ERROR";;
Expand All @@ -142,28 +145,28 @@ jobs:

post-deploy:
runs-on: ubuntu-latest
needs: build-and-deploy
if: ${{ always() || needs.build-and-deploy.result == 'failure' }}
needs: deploy
if: ${{ always() || needs.build.result == 'failure' ||needs.deploy.result == 'failure' }}
steps:
- name: Load env
run: |
echo "LAST_COMMIT_HASH=${{needs.build-and-deploy.outputs.LAST_COMMIT_HASH}}" >> $GITHUB_ENV
echo "LAST_COMMIT_HASH=${{needs.build.outputs.LAST_COMMIT_HASH}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_NAME=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_NAME}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_EMAIL=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_EMAIL}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_DATE=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_DATE}}" >> $GITHUB_ENV
echo "LAPIG_PROJECT_NAME=${{needs.build-and-deploy.outputs.LAPIG_PROJECT_NAME}}" >> $GITHUB_ENV
echo "LAPIG_COMMIT_DATE=${{needs.build-and-deploy.outputs.LAPIG_COMMIT_DATE}}" >> $GITHUB_ENV
echo "CREATE_STATUS=${{needs.build-and-deploy.outputs.CREATE_STATUS}}" >> $GITHUB_ENV
echo "DELETE_STATUS=${{needs.build-and-deploy.outputs.DELETE_STATUS}}" >> $GITHUB_ENV
echo "START_STATUS=${{needs.build-and-deploy.outputs.START_STATUS}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_NAME=${{needs.build.outputs.LAPIG_AUTHOR_NAME}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_EMAIL=${{needs.build.outputs.LAPIG_AUTHOR_EMAIL}}" >> $GITHUB_ENV
echo "LAPIG_AUTHOR_DATE=${{needs.build.outputs.LAPIG_AUTHOR_DATE}}" >> $GITHUB_ENV
echo "LAPIG_PROJECT_NAME=${{needs.build.outputs.LAPIG_PROJECT_NAME}}" >> $GITHUB_ENV
echo "LAPIG_COMMIT_DATE=${{needs.build.outputs.LAPIG_COMMIT_DATE}}" >> $GITHUB_ENV
echo "CREATE_STATUS=${{needs.deploy.outputs.CREATE_STATUS}}" >> $GITHUB_ENV
echo "DELETE_STATUS=${{needs.deploy.outputs.DELETE_STATUS}}" >> $GITHUB_ENV
echo "START_STATUS=${{needs.deploy.outputs.START_STATUS}}" >> $GITHUB_ENV
- name: Send message to Telegram
run: |
end_time=$(date -u +%s)
echo "LAPIG_DURATION=$((end_time - $START_TIME))" >> $GITHUB_ENV
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_API_KEY }}/sendMessage" -d "chat_id=${{ secrets.CHAT_ID }}" -d "parse_mode=markdown" -d "text=*Project*: *${LAPIG_PROJECT_NAME}*\
*Status:*${{ needs.build-and-deploy.result }}\
*Status:*${{ needs.deploy.result }}\
*Branch*: ${LAPIG_BRANCH_NAME}\
*Author*: *${LAPIG_AUTHOR_NAME}*\
*Author_Email*: *${LAPIG_AUTHOR_EMAIL}*\
Expand All @@ -173,7 +176,7 @@ jobs:
- name: creat message to Discord
run: |
if [[ "${{ needs.build-and-deploy.result }}" == "success" && "$START_STATUS" == "OK" && "$DELETE_STATUS" == "OK" && "$CREATE_STATUS" == "OK" ]]; then
if [[ "${{ needs.deploy.result }}" == "success" && "$START_STATUS" == "OK" && "$DELETE_STATUS" == "OK" && "$CREATE_STATUS" == "OK" ]]; then
echo "avatar_url=${{vars.LAPIG_SUCCESS}}" >> $GITHUB_ENV
status_geral="Sucesso"
else
Expand Down Expand Up @@ -209,4 +212,4 @@ jobs:
echo "{\"content\": \"$discordTitle\", \"embeds\": [ { \"title\": \"$discordTitle\", \"description\": \"$discordDesc\", \"footer\": { \"text\": \"$discordFooter\" }, \"thumbnail\": { \"url\":\"$avatar_url\"} }, $EMBEDS_STATUS] ], \"username\": \"GitHub Actions\", \"avatar_url\": \"$avatar_url\" }"
curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"$discordTitle\", \"embeds\": [ $EMBEDS_STATUS { \"title\": \"$discordTitle\", \"description\": \"$discordDesc\", \"footer\": { \"text\": \"$discordFooter\" }, \"thumbnail\": { \"url\":\"$avatar_url\"} }], \"username\": \"GitHub Actions\", \"avatar_url\": \"$avatar_url\" }" https://discord.com/api/webhooks/${{ secrets.DISCORD_KEY }}
2 changes: 1 addition & 1 deletion docker/prod/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM registry.lapig.iesa.ufg.br/lapig-images-prod/app_lapig_jobs:base
FROM lapig/app_lapig_jobs:base

# Clone app and npm install on server
ENV URL_TO_APPLICATION_GITHUB="https://github.com/lapig-ufg/lapig-jobs.git"
Expand Down

0 comments on commit 7212242

Please sign in to comment.