Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
83c8da5
Create Jenkinsfile
laraadeboye Nov 29, 2024
b482356
Create .env.sample
laraadeboye Nov 29, 2024
bfb159b
Update Jenkinsfile
laraadeboye Nov 29, 2024
772175c
Update .env.sample
laraadeboye Nov 29, 2024
320d23f
Update Jenkinsfile
laraadeboye Nov 29, 2024
3b9bbf0
Merge pull request #1 from laraadeboye/feature/integrate-jenkins-arti…
laraadeboye Nov 29, 2024
f2ed9af
Update Jenkinsfile
laraadeboye Nov 29, 2024
ba50a22
Merge pull request #2 from laraadeboye/main
laraadeboye Nov 29, 2024
4dbe645
Merge pull request #3 from laraadeboye/feature/integrate-jenkins-arti…
laraadeboye Nov 29, 2024
d349515
Update Jenkinsfile
laraadeboye Nov 29, 2024
d676e82
Update Jenkinsfile
laraadeboye Nov 29, 2024
1decd35
Update Jenkinsfile
laraadeboye Nov 29, 2024
41575d2
Update Jenkinsfile
laraadeboye Nov 29, 2024
f62b7e3
Update composer.json
laraadeboye Nov 29, 2024
b5487d3
Update .env.sample
laraadeboye Nov 30, 2024
56ef9bc
Update Jenkinsfile
laraadeboye Nov 30, 2024
b72bc76
Update Jenkinsfile
laraadeboye Nov 30, 2024
ac1ec19
Update Jenkinsfile
laraadeboye Nov 30, 2024
550f179
Update Jenkinsfile
laraadeboye Nov 30, 2024
bb0923b
Update Jenkinsfile
laraadeboye Nov 30, 2024
6c1c62f
Update Jenkinsfile
laraadeboye Nov 30, 2024
74f204f
Merge pull request #4 from laraadeboye/feature/integrate-jenkins-arti…
laraadeboye Nov 30, 2024
0ca9435
Update composer.lock to match composer.json after merge
Nov 30, 2024
5c3ab0f
Updat composer.json
Nov 30, 2024
b90de16
Remove vendor directory from version control
Nov 30, 2024
67ecc9c
Add gitignore
Nov 30, 2024
0dc4c48
Add storage folder to gitignore
Nov 30, 2024
6b7e181
Revert "Feature/integrate jenkins articatory"
laraadeboye Nov 30, 2024
5eb0e0f
Merge pull request #5 from laraadeboye/revert-4-feature/integrate-jen…
laraadeboye Nov 30, 2024
0d89f29
composer.json and composer.lock files
Nov 30, 2024
f9629d3
Update Jenkinsfile
laraadeboye Nov 30, 2024
582648e
Update Jenkinsfile
laraadeboye Nov 30, 2024
c810c0f
Update Jenkinsfile
laraadeboye Dec 2, 2024
d97694c
Update Jenkinsfile
laraadeboye Dec 3, 2024
5526412
Update Jenkinsfile
laraadeboye Dec 3, 2024
2ec88b9
Update Jenkinsfile
laraadeboye Dec 3, 2024
af50883
Update Jenkinsfile
laraadeboye Dec 5, 2024
06e91b7
Update Jenkinsfile
laraadeboye Dec 5, 2024
b39b12c
Update Jenkinsfile
laraadeboye Dec 5, 2024
9d4d52d
Update Jenkinsfile
laraadeboye Dec 5, 2024
54aa00b
Update Jenkinsfile
laraadeboye Dec 5, 2024
c918312
Update Jenkinsfile
laraadeboye Dec 5, 2024
bb45636
Update Jenkinsfile
laraadeboye Dec 5, 2024
2d75e2f
Update Jenkinsfile
laraadeboye Dec 5, 2024
64ba1d7
Update Jenkinsfile
laraadeboye Dec 5, 2024
a9a43b2
Update Jenkinsfile
laraadeboye Dec 6, 2024
3bb980a
Update Jenkinsfile
laraadeboye Dec 6, 2024
28611cc
Update Jenkinsfile
laraadeboye Dec 6, 2024
36aa385
Update Jenkinsfile
laraadeboye Dec 6, 2024
63882be
Update Jenkinsfile
laraadeboye Dec 6, 2024
b7517c6
Update Jenkinsfile
laraadeboye Dec 6, 2024
f2063cb
Update Jenkinsfile
laraadeboye Dec 8, 2024
fcc02f6
Update Jenkinsfile
laraadeboye Dec 8, 2024
9073b58
Update Jenkinsfile
laraadeboye Dec 8, 2024
b06dfd3
Update Jenkinsfile
laraadeboye Dec 8, 2024
23bf9ae
Update Jenkinsfile
laraadeboye Dec 8, 2024
7ab2313
Update Jenkinsfile
laraadeboye Dec 8, 2024
942d968
Update Jenkinsfile
laraadeboye Dec 8, 2024
b3b68b1
Update Jenkinsfile
laraadeboye Dec 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
DB_HOST=172.31.35.70
DB_DATABASE=db-name
DB_USERNAME=db-username
DB_PASSWORD=Sample-password
DB_CONNECTION=mysql
DB_PORT=3306
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
vendor/
storage/
bootstrap/cache/
build/
composer.lock.bak
339 changes: 339 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,339 @@
pipeline {
agent any
stages {
stage('Initial Cleanup') {
steps {
dir("${WORKSPACE}") {
deleteDir()
}
}
}
stage('Checkout SCM') {
steps {
git branch: 'main', url: 'https://github.com/laraadeboye/php-todo-app.git'
}
}
stage('Prepare Dependencies') {
steps {
script {
// Move .env.sample to .env and set environment variables
sh '''
mv .env.sample .env
echo "DB_HOST=${DB_HOST}" >> .env
echo "DB_PORT=${DB_PORT}" >> .env
echo "DB_DATABASE=${DB_DATABASE}" >> .env
echo "DB_USERNAME=${DB_USERNAME}" >> .env
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env
echo "APP_ENV=${APP_ENV}" >> .env
echo "APP_DEBUG=${APP_DEBUG}" >> .env
echo "LOG_LEVEL=${LOG_LEVEL}" >> .env
echo "APP_KEY=${APP_KEY}" >> .env
echo "APP_URL=${APP_URL}" >> .env
echo "CACHE_DRIVER=${CACHE_DRIVER}" >> .env
echo "SESSION_DRIVER=${SESSION_DRIVER}" >> .env
echo "QUEUE_DRIVER=${QUEUE_DRIVER}" >> .env
'''

// Create storage and bootstrap directories with appropriate permissions
sh '''
mkdir -p bootstrap/cache
mkdir -p storage/framework/sessions
mkdir -p storage/framework/views
mkdir -p storage/framework/cache
chown -R jenkins:jenkins bootstrap storage
chmod -R 775 bootstrap storage
'''

// Install Composer dependencies with error handling
sh '''
set -e
composer install
'''

// Run Laravel artisan commands
sh '''
php artisan migrate --force
php artisan db:seed --force
'''
}
}
}
stage('Execute Unit Tests') {
steps {
sh './vendor/bin/phpunit'
}
}
stage('Code Analysis') {
steps {
sh 'phploc app/ --log-csv build/logs/phploc.csv'
}
}
stage('Plot Code Coverage report') {
steps {
script {
// Plot phploc metrics
plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'A- Lines of Code',
style: 'line',
yaxis: 'Lines of Code',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Lines of Code (LOC), Comment Lines of Code (CLOC), Non-Comment Lines of Code (NLOC), Logical Lines of Code (LLC)',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'B - Structures Containers',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Directories, Files, Namespaces',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'C - Average Length',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Average Class Length (LLOC), Average Method Length (LLOC), Average Function Length (LLOC)',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'D - Relative Cyclomatic Complexity',
style: 'line',
yaxis: 'Cyclomatic Complexity by Structure',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Cyclomatic Complexity / Lines of Code, Cyclomatic Complexity / Number of Methods',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'E - Types of Classes',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Classes, Abstract Classes, Concrete Classes',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'F - Types of Methods',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Methods, Non-Static Methods, Public Methods, Non-Public Methods',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'G - Types of Constants',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Constants, Global Constants, Class Constants',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'H - Types of Functions',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Functions, Named Functions, Anonymous Functions',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'I - Testing',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Test Classes, Test Methods',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'AB - Code Structure by Logical Lines of Code (LLOC)',
style: 'line',
yaxis: 'Logical Lines of Code',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Logical Lines of Code (LLOC), Classes Length, Functions Length, LLOC outside functions or classes',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

plot(
csvFileName: 'phploc.csv',
group: 'Code Metrics',
numBuilds: '100',
title: 'BB - Structure Objects',
style: 'line',
yaxis: 'Count',
csvSeries: [
[
displayTableFlag: false,
exclusionValues: 'Interfaces, Traits, Classes, Methods, Functions, Constants',
file: 'build/logs/phploc.csv',
inclusionFlag: 'INCLUDE_BY_STRING',
url: ''
]
]
)

// Plot code coverage
plot(
csvFileName: 'coverage.csv',
group: 'Code Coverage',
title: 'Test Coverage',
style: 'bar',
csvSeries: [
[
file: 'build/logs/clover.xml',
inclusionFlag: 'OFF',
url: ''
]
]
)
}
}
}
stage('Package Artifact') {
steps {
sh 'zip -qr php-todo.zip ${WORKSPACE}/*'
}
}

stage('Upload Artifact to Artifactory') {
steps {
script {
def server = Artifactory.server 'artifactory-server'
def uploadSpec = """{
"files": [
{
"pattern": "php-todo.zip",
"target": "todo-artifact-local/php-todo",
"props": "type=zip;status=ready"
}
]
}
"""
server.upload(uploadSpec)
}
}
}
stage('Deploy to Dev environment') {
steps {
build job: 'ansible-config-mgt/main', parameters: [
[
$class: 'StringParameterValue', name: 'inventory', value: 'dev'
],
[
$class: 'StringParameterValue', name: 'tags', value: 'todo'
]
], propagate:false, wait:true

}
}
stage('SonarQube Quality Gate') {
environment {
scannerHome = tool 'SonarQubeScanner'
}
steps {
withSonarQubeEnv('sonarqube') {
sh "${scannerHome}/bin/sonar-scanner"
}

}
}
}
}
2 changes: 2 additions & 0 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.