1
1
name : Build and Deploy in Production Server AGROTÓXICOS
2
-
3
2
on :
4
3
push :
5
4
branches :
6
5
- main
7
-
8
6
jobs :
9
- build-and-deploy :
7
+ build :
10
8
runs-on : ubuntu-latest
11
- env :
12
- REGISTRYSERVER : ${{secrets.REGISTRYPROD}}
13
- SERVER_KNOWN : ${{secrets.SERVER_PROD_KNOWN}}
14
- DOCKER_SERVER : ${{secrets.SERVER_PROD}}
15
- SSH_SERVER : ${{secrets.SERVER_PROD_SSH}}
16
- DOCKER_PATH : " prod"
17
-
18
-
19
9
outputs :
20
- START_TIME : ${{ steps.creat_env.outputs.START_TIME }}
10
+ APPLICATION_NAME : ${{ steps.creat_env.outputs.APPLICATION_NAME }}
11
+ DOCKER_PATH : ${{ steps.creat_env.outputs.DOCKER_PATH }}
21
12
LAST_COMMIT_HASH : ${{ steps.creat_env.outputs.LAST_COMMIT_HASH }}
22
13
23
- LAPIG_AUTHOR_NAME : ${{ steps.creat_env.outputs.LAPIG_AUTHOR_NAME }}
24
- LAPIG_AUTHOR_EMAIL : ${{ steps.creat_env.outputs.LAPIG_AUTHOR_EMAIL }}
25
- LAPIG_AUTHOR_DATE : ${{ steps.creat_env.outputs.LAPIG_AUTHOR_DATE }}
26
- LAPIG_PROJECT_NAME : ${{ steps.creat_env.outputs.LAPIG_PROJECT_NAME }}
27
- LAPIG_COMMIT_DATE : ${{ steps.creat_env.outputs.LAPIG_COMMIT_DATE }}
28
-
29
- CREATE_STATUS : ${{steps.deploy_container.outputs.CREATE_STATUS}}
30
- DELETE_STATUS : ${{steps.deploy_container.outputs.DELETE_STATUS}}
31
- START_STATUS : ${{steps.start_container.outputs.START_STATUS}}
32
-
33
-
34
14
steps :
35
15
- name : Checkout code
36
16
uses : actions/checkout@v2
37
17
38
-
39
- - name : Define a variável application_name
18
+ - name : Define environment variables
40
19
id : creat_env
41
20
run : |
42
- echo "START_TIME=$(date -u +%s)" >> "$GITHUB_OUTPUT"
43
-
44
- repo_full_name=$GITHUB_REPOSITORY
45
- repo_name=${repo_full_name##*/}
46
- echo "Nome do repositório: $repo_name"
47
-
48
- echo "application_name=app_agrotoxico" >> $GITHUB_ENV
49
-
50
- echo "LAST_COMMIT_HASH=$(git log --pretty=format:%h -n 1)" >> $GITHUB_ENV
51
-
52
- echo "LAST_COMMIT_HASH=$(git log --pretty=format:%h -n 1)" >> "$GITHUB_OUTPUT"
53
-
54
- echo "LAPIG_AUTHOR_NAME=$(git show -s --pretty=%an)" >> "$GITHUB_OUTPUT"
55
- echo "LAPIG_AUTHOR_EMAIL=$(git show -s --pretty=%ae)" >> "$GITHUB_OUTPUT"
56
- echo "LAPIG_AUTHOR_DATE=$(git log -1 --format=%cd --date=local)" >> "$GITHUB_OUTPUT"
57
- echo "LAPIG_PROJECT_NAME=$repo_name" >> "$GITHUB_OUTPUT"
58
- echo "LAPIG_COMMIT_DATE=$(git show -s --format=%ci)" >> "$GITHUB_OUTPUT"
59
-
60
-
61
- echo "NODE_OPTIONS=--max-old-space-size=8096" >> $GITHUB_ENV
21
+ # Função para definir variáveis no GITHUB_ENV e GITHUB_OUTPUT
22
+ set_var() {
23
+ echo "$1=$2" >> $GITHUB_ENV
24
+ echo "$1=$2" >> $GITHUB_OUTPUT
25
+ }
26
+ # Defina as variáveis
27
+ set_var "DOCKER_PATH" "prod"
28
+ set_var "APPLICATION_NAME" "app_agrotoxico"
29
+ set_var "LAST_COMMIT_HASH" "$(git log --pretty=format:%h -n 1)"
62
30
63
31
- name : Create version.json
64
32
run : echo "{\"commitId\":\"$LAST_COMMIT_HASH\"}" > version.json
65
33
66
- - name : Configurar Node.js
34
+ - name : Setup Node.js
67
35
uses : actions/setup-node@v2
68
36
with :
69
37
node-version : ' 16.4.2'
70
38
71
- - name : Build Server and client
39
+ - name : Build Server and Client
72
40
run : |
41
+ export NODE_OPTIONS=--max-old-space-size=8096
73
42
npm set progress=false
74
43
cd ${{ github.workspace }}/src/server && npm install
75
44
cd ${{ github.workspace }}/src/client && npm install
76
45
npm install -g @angular/[email protected]
77
46
cd ${{ github.workspace }}/src/client && ng build --stats-json --source-map=false --no-progress
78
47
79
-
80
- - name : Build Docker
48
+ - name : Build Docker image
81
49
run : |
82
- docker build -t $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH} -t $REGISTRYSERVER/$application_name:latest -f docker/$DOCKER_PATH/Dockerfile . --no-cache
83
-
50
+ docker build -t lapig/$APPLICATION_NAME:${DOCKER_PATH}_${LAST_COMMIT_HASH} \
51
+ -t lapig/$APPLICATION_NAME:${DOCKER_PATH}_latest \
52
+ -f docker/$DOCKER_PATH/Dockerfile . --no-cache
84
53
85
54
- name : Login to Docker Registry
86
- run : echo "${{ secrets.HARBOR_PASS }}" | docker login -u "${{ secrets.HARBOR_USER }} " --password-stdin "${{ secrets.URL_PRIVATE_REGISTRY }}"
55
+ run : echo "${{ secrets.DOCKERHUB_PASS }}" | docker login -u "lapig " --password-stdin
87
56
88
57
- name : Push Image to Registry
89
58
run : |
90
- docker push $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH}
91
- docker push $REGISTRYSERVER/$application_name:latest
92
-
93
- - name : Remove image locally
94
- run : |
95
- docker rmi $REGISTRYSERVER/$application_name:${LAST_COMMIT_HASH}
96
- docker rmi $REGISTRYSERVER/$application_name:latest
97
-
98
-
99
- - name : Add SSH key to known_hosts
100
- run : |
101
- mkdir -p ~/.ssh
102
- ssh-keyscan -t rsa $SERVER_KNOWN >> ~/.ssh/known_hosts 2>/dev/null
103
- chmod 644 ~/.ssh/known_hosts
104
- echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
105
- chmod 600 ~/.ssh/id_rsa
59
+ docker push lapig/$APPLICATION_NAME:${DOCKER_PATH}_${LAST_COMMIT_HASH}
60
+ docker push lapig/$APPLICATION_NAME:${DOCKER_PATH}_latest
106
61
107
- - name : Pull Image on Server
108
- run : |
109
- ssh $SSH_SERVER "docker pull $REGISTRYSERVER/$application_name:latest"
110
-
111
-
112
- - name : Deploy Container
113
- id : deploy_container
114
- run : |
115
- delete_status=$(ssh $SSH_SERVER "curl -v -X DELETE -w "%{http_code}" http://$DOCKER_SERVER/containers/$application_name?force=true 2>/dev/null")
116
- 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")
117
- case $delete_status in
118
- 204) delete_status_text="OK";;
119
- *) delete_status_text="ERROR";;
120
- esac
121
-
122
- case $create_status in
123
- 201) create_status_text="OK";;
124
- *) create_status_text="ERROR";;
125
- esac
126
-
127
- echo "del $delete_status"
128
- echo "creat $create_status"
129
-
130
- echo "CREATE_STATUS=$create_status_text" >> "$GITHUB_OUTPUT"
131
- echo "DELETE_STATUS=$delete_status_text" >> "$GITHUB_OUTPUT"
132
-
133
- - name : Start Container
134
- id : start_container
135
- run : |
136
- 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")
137
- case $start_status in
138
- 204) start_status_text="OK";;
139
- *) start_status_text="ERROR";;
140
- esac
141
- echo $start_status
142
-
143
- echo "START_STATUS=$start_status_text" >> "$GITHUB_OUTPUT"
144
-
145
-
146
- post-deploy :
147
- runs-on : ubuntu-latest
148
- needs : build-and-deploy
149
- if : ${{ always() || needs.build-and-deploy.result == 'failure' }}
62
+ deploy :
63
+ needs : build
64
+ runs-on : self-hosted
65
+
150
66
steps :
151
- - name : Load env
152
- run : |
153
- echo "LAST_COMMIT_HASH=${{needs.build-and-deploy.outputs.LAST_COMMIT_HASH}}" >> $GITHUB_ENV
154
-
155
- echo "LAPIG_AUTHOR_NAME=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_NAME}}" >> $GITHUB_ENV
156
- echo "LAPIG_AUTHOR_EMAIL=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_EMAIL}}" >> $GITHUB_ENV
157
- echo "LAPIG_AUTHOR_DATE=${{needs.build-and-deploy.outputs.LAPIG_AUTHOR_DATE}}" >> $GITHUB_ENV
158
- echo "LAPIG_PROJECT_NAME=${{needs.build-and-deploy.outputs.LAPIG_PROJECT_NAME}}" >> $GITHUB_ENV
159
- echo "LAPIG_COMMIT_DATE=${{needs.build-and-deploy.outputs.LAPIG_COMMIT_DATE}}" >> $GITHUB_ENV
160
- echo "CREATE_STATUS=${{needs.build-and-deploy.outputs.CREATE_STATUS}}" >> $GITHUB_ENV
161
- echo "DELETE_STATUS=${{needs.build-and-deploy.outputs.DELETE_STATUS}}" >> $GITHUB_ENV
162
- echo "START_STATUS=${{needs.build-and-deploy.outputs.START_STATUS}}" >> $GITHUB_ENV
163
-
164
- - name : Send message to Telegram
165
- run : |
166
- end_time=$(date -u +%s)
167
- echo "LAPIG_DURATION=$((end_time - $START_TIME))" >> $GITHUB_ENV
168
- 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}*\
169
- *Status:*${{ needs.build-and-deploy.result }}\
170
- *Branch*: ${LAPIG_BRANCH_NAME}\
171
- *Author*: *${LAPIG_AUTHOR_NAME}*\
172
- *Author_Email*: *${LAPIG_AUTHOR_EMAIL}*\
173
- *Commit_ID*: *${LAST_COMMIT_HASH}*\
174
- *Date_Commit*: *${LAPIG_COMMIT_DATE}*\
175
- *Duration*: *${LAPIG_DURATION}*"
176
-
177
- - name : creat message to Discord
67
+ - name : Pull Image on Server
178
68
run : |
179
- if [[ "${{ needs.build-and-deploy.result }}" == "success" && "$START_STATUS" == "OK" && "$DELETE_STATUS" == "OK" && "$CREATE_STATUS" == "OK" ]]; then
180
- echo "avatar_url=${{vars.LAPIG_SUCCESS}}" >> $GITHUB_ENV
181
- status_geral="Sucesso"
182
- else
183
- echo "avatar_url=${{vars.LAPIG_ERROR}}" >> $GITHUB_ENV
184
- status_geral="Falhou"
185
- fi
186
-
187
- case $START_STATUS in
188
- "OK") START_STATUS_D="{ \"title\": \"DOCKER START OK!\",\"color\": 65280},";;
189
- *) START_STATUS_D="{ \"title\": \"DOCKER START ERROR!\",\"color\": 16711680},";;
190
- esac
191
-
192
- case $DELETE_STATUS in
193
- "OK") DELETE_STATUS_D="{ \"title\": \"DOCKER DELETE OK!\",\"color\": 65280},";;
194
- *) DELETE_STATUS_D="{ \"title\": \"DOCKER DELETE ERROR!\",\"color\": 16711680},";;
195
- esac
196
-
197
- case $CREATE_STATUS in
198
- "OK") CREATE_STATUS_D="{ \"title\": \"DOCKER CREATE OK!\",\"color\": 65280},";;
199
- *) CREATE_STATUS_D="{ \"title\": \"DOCKER CREATE ERROR!\",\"color\": 16711680},";;
200
- esac
201
-
202
- echo "EMBEDS_STATUS=$DELETE_STATUS_D $CREATE_STATUS_D $START_STATUS_D" >> $GITHUB_ENV
203
-
204
-
205
- echo "discordDesc=Result: $status_geral\nProject: $LAPIG_PROJECT_NAME\nCommit: $LAST_COMMIT_HASH\nAuthor: $LAPIG_AUTHOR_NAME\nAuthor_Email: $LAPIG_AUTHOR_EMAIL\nDate: $LAPIG_COMMIT_DATE\nDuration: $LAPIG_DURATION seconds" >> $GITHUB_ENV
206
-
207
- echo "discordFooter=${{ github.workflow }} (#${{ github.run_number }})" >> $GITHUB_ENV
208
- echo "discordTitle=${{ github.workflow }} (build #${{ github.run_number }})" >> $GITHUB_ENV
69
+ docker pull lapig/${{ needs.build.outputs.APPLICATION_NAME }}:${{ needs.build.outputs.DOCKER_PATH }}_latest
209
70
210
- - name : Send menssage to Discord
71
+ - name : Restart Application
211
72
run : |
212
- echo "{\"content\": \"$discordTitle\", \"embeds\": [ { \" title\": \"$discordTitle\", \"description\": \"$discordDesc\", \"footer\": { \"text\": \"$discordFooter\" }, \"thumbnail\": { \"url\":\"$avatar_url\"} }, $EMBEDS_STATUS] ], \"username\": \"GitHub Actions\", \"avatar_url\": \"$avatar_url\" }"
213
-
214
- 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 }}
215
-
73
+ /compose/resetapp.sh -- title "Plataforma Agrotóxicos" \
74
+ --github "https://github.com/${{ github.repository }}" \
75
+ --commit "${{ needs.build.outputs.LAST_COMMIT_HASH }}" \
76
+ ${{ needs.build.outputs.APPLICATION_NAME }}
0 commit comments