random app
This commit is contained in:
parent
94ed8943a9
commit
30ddcfdc1b
|
@ -0,0 +1,20 @@
|
||||||
|
# Use a Python base image
|
||||||
|
FROM python:3.9-slim
|
||||||
|
|
||||||
|
# Set the working directory in the container
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy the requirements file if you have one
|
||||||
|
#COPY requirements.txt requirements.txt
|
||||||
|
|
||||||
|
# Install any necessary packages
|
||||||
|
#RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy your HTML directory
|
||||||
|
COPY ./index.html ./index.html
|
||||||
|
|
||||||
|
# Expose the port you want to serve on
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
# Start the Python server
|
||||||
|
CMD ["python", "-m", "http.server", "8000"]
|
|
@ -0,0 +1,69 @@
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
label 'pi501.in.thelinuxpro.net'
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage("verify tooling") {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
docker version
|
||||||
|
docker info
|
||||||
|
docker compose version
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Build Containers and push to registry") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
def status = sh(returnStatus: true, script: 'docker images | grep random-number-web-server | grep $(grep image docker-compose.yml | awk -F\':\' \'{ print $4 }\')')
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
sh 'docker compose build --push'
|
||||||
|
} else {
|
||||||
|
echo "Primary Image version already exists, no need to rebuild."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Create contexts') {
|
||||||
|
steps {
|
||||||
|
sh 'docker context ls | grep pi503 || docker context create pi503 --docker "host=ssh://pi503.in.thelinuxpro.net"'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Stop container') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
def status = sh(returnStatus: true, script: 'grep $(docker --context pi503 compose ps | tail -n1 | awk \'{ print $2 }\') docker-compose.yml')
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
sh 'docker --context pi503 compose down'
|
||||||
|
sh 'sleep 5'
|
||||||
|
} else {
|
||||||
|
echo 'skip'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Start container') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
def status = sh(returnStatus: true, script: 'grep $(docker --context pi503 compose ps | tail -n1 | awk \'{ print $2 }\') docker-compose.yml')
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
sh 'docker --context pi503 compose up -d'
|
||||||
|
sh 'docker --context pi503 compose ps'
|
||||||
|
sh 'sleep 3'
|
||||||
|
sh 'docker --context pi503 compose logs'
|
||||||
|
} else {
|
||||||
|
echo 'skip'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
networks:
|
||||||
|
infra_dev_net:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
services:
|
||||||
|
random-number-web-server:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: random-number-web-server
|
||||||
|
image: docker-registry1.in.thelinuxpro.net:5000/tlp/random-number-web-server:250102.0.1
|
||||||
|
networks:
|
||||||
|
infra_dev_net:
|
||||||
|
ipv4_address: 10.99.23.100
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
|
@ -0,0 +1,74 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Random Number Generator with Countdown</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: #3f3f3f;
|
||||||
|
}
|
||||||
|
#randomNumber {
|
||||||
|
font-size: 384px;
|
||||||
|
padding: 40px;
|
||||||
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
width: 50%;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#countdown {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="randomNumber">Loading...</div>
|
||||||
|
<div id="countdown">Next refresh in: loading...</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const countdownElement = document.getElementById('countdown');
|
||||||
|
const randomNumberElement = document.getElementById('randomNumber');
|
||||||
|
|
||||||
|
let countdownTime;
|
||||||
|
|
||||||
|
function generateRandomNumber() {
|
||||||
|
const min = 1;
|
||||||
|
const max = 12;
|
||||||
|
const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
|
||||||
|
randomNumberElement.textContent = randomNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateCountdown() {
|
||||||
|
if (countdownTime <= 0) {
|
||||||
|
generateRandomNumber();
|
||||||
|
// Generate a new random countdown time between 10 and 30 seconds
|
||||||
|
countdownTime = Math.floor(Math.random() * (30 - 10 + 1)) + 10;
|
||||||
|
} else {
|
||||||
|
countdownElement.textContent = `Next refresh in: ${countdownTime} seconds`;
|
||||||
|
countdownTime--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate an initial random number and countdown time
|
||||||
|
generateRandomNumber();
|
||||||
|
countdownTime = Math.floor(Math.random() * (30 - 10 + 1)) + 10; // Initial random countdown
|
||||||
|
|
||||||
|
// Update countdown and refresh the number every second
|
||||||
|
setInterval(updateCountdown, 1000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue