Skip to content

Commit e0544b4

Browse files
authored
Merge pull request #3 from Sigmapitech/dev
link-project complete refactor
2 parents 1dc1d3c + da4e061 commit e0544b4

5 files changed

Lines changed: 117 additions & 3 deletions

File tree

infra/jenkins/Dockerfile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ USER root
1414
RUN mkdir -p /var/jenkins_home && chown -R jenkins:jenkins /var/jenkins_home
1515
USER jenkins
1616

17-
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
17+
COPY infra/jenkins/plugins.txt /usr/share/jenkins/ref/plugins.txt
1818
RUN jenkins-plugin-cli --plugin-file /usr/share/jenkins/ref/plugins.txt
1919

2020
ENV CASC_JENKINS_CONFIG=/usr/share/jenkins/ref/jenkins.yaml
21+
COPY script /usr/share/jenkins/ref/script
22+
2123
COPY --chown=jenkins:jenkins \
22-
./job_dsl.groovy \
24+
./infra/jenkins/job_dsl.groovy \
2325
/usr/share/jenkins/ref/init.groovy.d/job_dsl.groovy

infra/jenkins/docker-compose.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
services:
22
jenkins:
3-
build: .
3+
build:
4+
context: ../../
5+
dockerfile: infra/jenkins/Dockerfile
46
container_name: jenkins
57
ports:
68
- "8080:8080"
79
- "50000:50000"
810
volumes:
911
- ./jenkins_home:/var/jenkins_home
1012
- ./jenkins.yaml:/var/jenkins_home/casc_configs/jenkins.yaml:ro
13+
- ./../..:/workspace
1114
- /var/run/docker.sock:/var/run/docker.sock # Docker in docker
1215
- ../../images:/images
1316
environment:

infra/jenkins/jenkins.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,9 @@ appearance:
2424
unclassified:
2525
location:
2626
url: http://localhost:8080/
27+
28+
security:
29+
scriptApproval:
30+
approvedScriptHashes:
31+
- "SHA512:4221429e203439d7010910774f0ef107c56e054eb7001881a02852d108c03fb8d8470c15e2a6d27141b604075db9c09223a7e5c083478dcef770f84b733ceb2a"
32+
forceSandbox: false

infra/jenkins/job_dsl.groovy

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,58 @@ folder('Projects') {
4545
displayName(name)
4646
description('Available projects in whanos')
4747
}
48+
49+
freeStyleJob('link-project') {
50+
displayName('Link Project')
51+
description('Links a repository to the Whanos infrastructure by creating a corresponding Jenkins project job.')
52+
53+
parameters {
54+
stringParam('PROJECT_NAME', '', 'Name of the project (e.g. my-app)')
55+
stringParam('GIT_URL', '', 'Git repository URL to link')
56+
stringParam('GIT_BRANCH', 'main', 'Branch to monitor (default: main)')
57+
stringParam('ROOT_FOLDER', '', 'Root folder in the repository (if applicable)')
58+
credentialsParam('GIT_CREDENTIALS_ID') {
59+
description('Credentials ID for accessing the Git repository (if private)')
60+
defaultValue('')
61+
}
62+
}
63+
64+
steps {
65+
shell('''
66+
#!/bin/bash
67+
set -e
68+
69+
rm -rf repo
70+
git clone "$GIT_URL" repo
71+
cd repo
72+
git checkout "$GIT_BRANCH"
73+
74+
echo "Detecting language..."
75+
WHANOS_DIR=$PWD
76+
if [ -n "$ROOT_FOLDER" ]; then
77+
cd "$ROOT_FOLDER"
78+
79+
fi
80+
81+
LANG_DETECTED=$("$WHANOS_DIR/script/detect_language")
82+
EXIT_CODE=$?
83+
84+
if [ $EXIT_CODE -ne 0 ]; then
85+
echo "Error: repository is not Whanos-compatible"
86+
exit 1
87+
fi
88+
89+
echo "Detected language: $LANG_DETECTED"
90+
echo "$LANG_DETECTED" > $WHANOS_DIR/detected_language.txt
91+
export LANG_DETECTED=$(cat $WHANOS_DIR/detected_language.txt)
92+
93+
# Copy DSL script to workspace
94+
cp /workspace/infra/jenkins/project_job.groovy $WORKSPACE/project_job.groovy
95+
''')
96+
dsl {
97+
external("project_job.groovy")
98+
additionalClasspath("project_job.groovy/lives")
99+
ignoreExisting(false)
100+
}
101+
}
102+
}

infra/jenkins/project_job.groovy

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
def String projectName = binding.variables['PROJECT_NAME']
2+
def String gitUrl = binding.variables['GIT_URL']
3+
def String gitBranch = binding.variables['GIT_BRANCH']
4+
def String credentialsId = binding.variables['GIT_CREDENTIALS_ID']
5+
def File languageFile = new File("${WORKSPACE}/repo/detected_language.txt")
6+
def String language = languageFile.text.trim().toLowerCase()
7+
def String baseImage = "whanos-${language}"
8+
9+
folder('Projects') {
10+
displayName('Projects')
11+
description('Available projects in Whanos')
12+
}
13+
14+
freeStyleJob("Projects/${projectName}") {
15+
displayName("${projectName}")
16+
description('Linked project managed by Whanos')
17+
18+
scm {
19+
git {
20+
remote {
21+
url("${gitUrl}")
22+
if (credentialsId) {
23+
credentials(credentialsId)
24+
}
25+
}
26+
branch("*/${gitBranch}")
27+
}
28+
}
29+
30+
triggers {
31+
scm('* * * * *') // every minute
32+
}
33+
34+
steps {
35+
shell("echo Building ${projectName} using ${baseImage}")
36+
shell("docker build -t ${projectName}:${language} --build-arg BASE_IMAGE=${baseImage} .")
37+
shell("""
38+
#!/bin/bash
39+
set -e
40+
// if [ -f whanos.yml ]; then
41+
// echo "Deploying ${projectName} to Kubernetes..."
42+
// kubectl apply -f whanos.yml
43+
// else
44+
// echo "No whanos.yml found, skipping deployment."
45+
// fi
46+
""")
47+
}
48+
}

0 commit comments

Comments
 (0)