This commit is contained in:
KLxHunter 2024-08-07 16:53:39 +07:00
parent eadbb15556
commit 70eaa5205a
9 changed files with 300 additions and 0 deletions

2
05-spawn-fcgi.sh Normal file
View File

@ -0,0 +1,2 @@
find /usr/share/nginx/html -type f -iname "*.sh" -exec chmod +x {} \;
/usr/bin/spawn-fcgi -s /var/run/fcgiwrap.socket -M 766 /usr/bin/fcgiwrap

9
Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM nginx:alpine
RUN apk add fcgiwrap spawn-fcgi bash
COPY ./05-spawn-fcgi.sh /docker-entrypoint.d/05-spawn-fcgi.sh
RUN chmod +x /docker-entrypoint.d/05-spawn-fcgi.sh
SHELL ["/bin/bash", "-c"]

33
default.conf Normal file
View File

@ -0,0 +1,33 @@
server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html;
location / {
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
# added example, any shell script in content root will be executable
location ~ \.sh$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
}
location ~ ^/azure/(.+)/notify$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param PROJECT $1;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/azure.sh;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

19
docker-compose.yml Normal file
View File

@ -0,0 +1,19 @@
version: '3'
services:
# https://mac-blog.org.ua/docker-nginx-shell-script/
# chmod +x html/*.sh
nginx-bash:
build:
context: ./
dockerfile: Dockerfile
image: nginx-bash
container_name: nginx-bash
restart: always
ports:
- 8081:80
volumes:
- ./html:/usr/share/nginx/html
- ./default.conf:/etc/nginx/conf.d/default.conf

19
html/50x.html Normal file
View File

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
<p>If you are the system administrator of this resource then you should check
the error log for details.</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>

146
html/azure.sh Executable file
View File

@ -0,0 +1,146 @@
#!/bin/bash
echo 'Content-Type: text/plain'
echo ''
# echo "PROJECT: $PROJECT"
object () {
# e.g account
kind=$1
# e.g leandroAccount
self=$2
shift
shift
# iterates over the remaining args
for arg in "$@"; do
# e.g name=Leandro becomes ARG_KEY=name ARG_VALUE=Leandro
read ARG_KEY ARG_VALUE <<< $(echo "$arg" | sed -E "s/(\w+)=(.*?)/\1 \2/")
if [[ ! -z "$ARG_KEY" ]] && [[ ! -z "$ARG_VALUE" ]]; then
# declare the object's state!!!!
# e.g export leandroAccount_balance=100
export ${self}_$ARG_KEY="$ARG_VALUE"
fi
done
}
notify () {
for i in `seq 1 30`;
do
local RESPONSE_HTTP_CODE=$(curl --max-time 5 -s -o /dev/null -i -w "%{http_code}" -X POST -H "Authorization: Bearer ${1}" -d "message=${3}" "https://notify-api.line.me/api/notify")
[[ "${RESPONSE_HTTP_CODE}" == "200" ]] && break
sleep 2
done
curl -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "{\"content\": \"$(echo ${3}| sed 's/%0A/\\n/g')\"}" https://discord.com/api/webhooks/${2}
}
cicd () {
local LINE_TOKEN=$1
local DISCORD_TOKEN=$2
local repoNameOrigin=$4
local branchName=$5
local BUILD_NUMBER=$6
local buildVersion=$7
local GIT_COMMIT=$8
local JOB_URL=$9
local BUILD_URL=${10}
case "$3" in
"success")
local MESSAGE_OPTION="✅✅✅✅✅%0A*CI DONE*"
;;
"unstable")
local MESSAGE_OPTION="💥💥💥💥💥💥%0A*CI Unstable*"
;;
"failure")
local MESSAGE_OPTION="🔥🔥🔥🔥🔥🔥%0A*CI Fail*"
;;
esac
notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${MESSAGE_OPTION}%0ARepositories: ${repoNameOrigin}%0ABranch: ${branchName}%0ABuild Number: ${BUILD_NUMBER}%0AImage Tag: ${buildVersion}%0ACommit ID: ${GIT_COMMIT}%0AJob URL: ${JOB_URL}%0ABuild Log: ${BUILD_URL}console"
}
pod () {
local LINE_TOKEN=$1
local DISCORD_TOKEN=$2
local POD_NAME=$4
local POD_IP=$5
local IMAGE_TAG=$6
local NODE=$7
case "$3" in
"start")
local MESSAGE_OPTION="🔆🟢🔆🟢🔆🟢🔆 Service UP"
;;
"stop")
local MESSAGE_OPTION="☠️🔴☠️🔴☠️🔴☠️ Service DOWN"
;;
esac
notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${MESSAGE_OPTION}%0APod NAME: ${POD_NAME}%0APod IP: ${POD_IP}%0AImage Tag: ${IMAGE_TAG}%0ANode: ${NODE}"
}
networkOutbound () {
local LINE_TOKEN=$1
local DISCORD_TOKEN=$2
local DURATION_MIN=$3
local DURATION_SEC=$4
local NOTIFY_RESPONSE=$(echo $5 | sed 's/-ONLINE/ ✅✅✅✅✅✅/g;s/-OFFLINE/ 🔥🔥🔥🔥🔥🔥/g;s/-:-/ : /g;s/-/ /g;')
notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${DURATION_MIN} min ${DURATION_SEC} sec${NOTIFY_RESPONSE}"
}
action () {
local LINE_TOKEN=$(eval echo \${${PROJECT}_line_${HTTP_ACTION}})
local DISCORD_TOKEN=$(eval echo \${${PROJECT}_discord_${HTTP_ACTION}})
case "${HTTP_ACTION}" in
"cicd")
cicd ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_ACTIONVAL} ${HTTP_REPO} ${HTTP_BRANCH} ${HTTP_BUILDNUM} ${HTTP_BUILDVER} ${HTTP_COMMIT} ${HTTP_JOBURL} ${HTTP_BUILDURL}
;;
"pod")
pod ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_ACTIONVAL} ${HTTP_PODNAME} ${HTTP_PODIP} ${HTTP_IMAGETAG} ${HTTP_NODE}
;;
"networkOutbound")
networkOutbound ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_DURATIONMIN} ${HTTP_DURATIONSEC} ${HTTP_NOTIFYRESPONSE}
;;
*)
echo '{"status":404,"message":"action type not found"}'
exit 0
;;
esac
}
case "${PROJECT}" in
"clm")
object lineToken \
${PROJECT}_line \
cicd=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \
pod=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \
networkOutbound=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da
object discordToken \
${PROJECT}_discord \
cicd=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \
pod=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \
networkOutbound=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta
action
;;
"ncs")
object lineToken \
${PROJECT}_line \
cicd=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \
pod=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \
networkOutbound=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da
object discordToken \
${PROJECT}_discord \
cicd=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \
pod=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \
networkOutbound=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta
action
;;
*)
echo '{"status":404,"message":"project not found"}'
exit 0
;;
esac
echo '{"status":200,"message":"ok"}'

11
html/demo.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
echo 'Content-Type: text/plain'
echo ''
echo 'Hello, world!'
echo 'KLxHunter'
echo 'Environment:'
env
# notify_token=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da
# curl -X POST -H "Authorization: Bearer ${notify_token}" -F "message=return of the mount hua sect มาแว๊ววว" https://notify-api.line.me/api/notify

22
html/index.html Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

39
test.sh Normal file
View File

@ -0,0 +1,39 @@
#!/bin/bash
Object () {
# e.g account
kind=$1
# e.g leandroAccount
self=$2
shift
shift
# iterates over the remaining args
for arg in "$@"; do
# e.g name=Leandro becomes ARG_KEY=name ARG_VALUE=Leandro
read ARG_KEY ARG_VALUE <<< $(echo "$arg" | sed -E "s/(\w+)=(.*?)/\1 \2/")
if [[ ! -z "$ARG_KEY" ]] && [[ ! -z "$ARG_VALUE" ]]; then
# declare the object's state!!!!
# e.g export leandroAccount_balance=100
export ${self}_$ARG_KEY="$ARG_VALUE"
fi
done
}
Object account leandroAccount name=Leandro balance=500
echo $leandroAccount_name # prints Leandro
echo $leandroAccount_balance # prints 500
Object account carlosAccount name=Carlitos balance=800
echo $carlosAccount_name # prints Carlitos
echo $carlosAccount_balance # prints 800
# curl -H "ACTION: cicd" -H "ACTIONVAL: success" -H "REPO: complaint-backend-complaint" -H "BRANCH: develop" -H "BUILDNUM: 478" -H "BUILDVER: develop-0.0.478" -H "COMMIT: 3634e06b2c7b93cf146530917a93a30de25943e0" -H "JOBURL: https://jenkins-back.devopsnonprd.vayuktbcs:8080/job/complaint/job/backend/job/complaint-backend-complaint/job/develop/" -H "BUILDURL: https://jenkins-back.devopsnonprd.vayuktbcs:8080/job/complaint/job/backend/job/complaint-backend-complaint/job/develop/478/" -H "Content-Type: application/json" localhost:8081/azure/clm/notify
# curl -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "{\"content\": \"✅✅✅✅✅\n*CI DONE*\nRepositories: ${repoNameOrigin}\nBranch: ${branchName}\nBuild Number: ${BUILD_NUMBER}\nImage Tag: ${buildVersion}\nCommit ID: ${GIT_COMMIT}\nJob URL: ${JOB_URL}\nBuild Log: ${BUILD_URL}console\"}" https://discord.com/api/webhooks/1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta