random app

This commit is contained in:
Kameron Kenny 2025-01-02 19:07:25 -05:00
parent 94ed8943a9
commit 30ddcfdc1b
4 changed files with 181 additions and 0 deletions

20
Dockerfile Normal file
View File

@ -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"]

69
Jenkinsfile vendored Normal file
View File

@ -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'
}
}
}
}
}
}

18
docker-compose.yml Normal file
View File

@ -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

74
index.html Normal file
View File

@ -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>