Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
85db20e
Update Jenkinsfile
sdgcpbs Jan 21, 2021
4c0bbe1
Update Jenkinsfile
sdgcpbs Jan 21, 2021
b4de25c
Update Jenkinsfile
sdgcpbs Jan 21, 2021
c2e9b37
Update Jenkinsfile
sdgcpbs Jan 21, 2021
babcd17
Update Jenkinsfile
sdgcpbs Jan 21, 2021
74a6959
Merge pull request #3 from sdgcpsb/develop
sdgcpbs Jan 21, 2021
b400f8f
Update Jenkinsfile
sdgcpbs Jan 22, 2021
9772e28
Update Jenkinsfile
sdgcpsb Jan 22, 2021
8a04e60
Update Jenkinsfile
sdgcpbs Jan 27, 2021
59ef8a6
Update Jenkinsfile
sdgcpbs Jan 28, 2021
7918a7e
Update Jenkinsfile
sdgcpbs Jan 28, 2021
f12413e
Update Jenkinsfile
sdgcpbs Jan 28, 2021
104999c
Update Jenkinsfile
sdgcpbs Jan 29, 2021
b9173be
Update Jenkinsfile
sdgcpbs Feb 1, 2021
e400da3
Update Jenkinsfile
sdgcpbs Feb 1, 2021
0288b59
Update Jenkinsfile
sdgcpbs Feb 1, 2021
0d80b22
Update Jenkinsfile
sdgcpbs Feb 1, 2021
f118ea2
Update Jenkinsfile
sdgcpsb Feb 2, 2021
0e47ef0
Update Jenkinsfile
sdgcpsb Feb 2, 2021
0381b37
Update Jenkinsfile
sdgcpbs Feb 3, 2021
cf5302a
Update Jenkinsfile
sdgcpbs Feb 4, 2021
a83bf6e
Update Jenkinsfile
sdgcpbs Feb 5, 2021
0e18278
Update Jenkinsfile
sdgcpbs Feb 5, 2021
ece2161
Update Jenkinsfile
sdgcpbs Feb 5, 2021
402ec6c
Update Jenkinsfile
sdgcpbs Feb 5, 2021
a0e2c4d
Update Jenkinsfile
sdgcpbs Feb 5, 2021
d6a4062
Update Jenkinsfile
sdgcpbs Feb 5, 2021
36c1129
Update Jenkinsfile
sdgcpbs Feb 8, 2021
03354f5
Update Jenkinsfile
sdgcpbs Feb 8, 2021
34676dc
Update Jenkinsfile
sdgcpbs Feb 8, 2021
3c6c20d
Update Jenkinsfile
sdgcpbs Feb 8, 2021
0f797b2
Update Jenkinsfile
sdgcpbs Feb 8, 2021
eacbc22
Update Jenkinsfile
sdgcpbs Feb 8, 2021
e04cae1
Update Jenkinsfile
sdgcpbs Feb 8, 2021
b428b6a
Update Jenkinsfile
sdgcpbs Feb 8, 2021
19adbbb
Update Jenkinsfile
sdgcpbs Feb 8, 2021
a0654d9
Update Jenkinsfile
sdgcpbs Feb 8, 2021
08b1b9e
Update Jenkinsfile
sdgcpbs Feb 8, 2021
0108a78
Update Jenkinsfile
sdgcpbs Feb 8, 2021
97eeacc
Update Jenkinsfile
sdgcpbs Feb 8, 2021
2184145
Update Jenkinsfile
sdgcpbs Feb 8, 2021
35c5ea0
Update package.json
sdgcpbs Feb 8, 2021
4e0ff4e
Update Jenkinsfile
sdgcpbs Feb 8, 2021
b4a57e8
Update Jenkinsfile
sdgcpbs Feb 8, 2021
9c0963f
Update Jenkinsfile
sdgcpbs Feb 8, 2021
e724287
Update package.json
sdgcpbs Feb 8, 2021
b2185fe
Update Jenkinsfile
sdgcpbs Feb 8, 2021
8e29eef
Create Gruntfile.js
sdgcpbs Feb 8, 2021
e7077f2
Delete bin/custom/training/trainingstorefront/module.exports = functi…
sdgcpbs Feb 8, 2021
33ef8fa
Create Gruntfile.js
sdgcpbs Feb 8, 2021
3ba8cc7
Update Jenkinsfile
sdgcpbs Feb 8, 2021
e7c5253
Update Jenkinsfile
sdgcpbs Feb 8, 2021
2658f77
Update Gruntfile.js
sdgcpbs Feb 8, 2021
8c19bdb
Update Gruntfile.js
sdgcpbs Feb 8, 2021
cb4de8b
Update Gruntfile.js
sdgcpbs Feb 8, 2021
9d8d820
Update Gruntfile.js
sdgcpbs Feb 8, 2021
ca2fc2b
Update Jenkinsfile
sdgcpbs Feb 8, 2021
6a294b4
Update Gruntfile.js
sdgcpbs Feb 8, 2021
4d713d3
Update Gruntfile.js
sdgcpbs Feb 8, 2021
f2a4003
Update package.json
sdgcpbs Feb 8, 2021
92fa82f
Update Jenkinsfile
sdgcpbs Feb 8, 2021
74a4a00
Update Jenkinsfile
sdgcpbs Feb 8, 2021
cc0bb7e
Update Jenkinsfile
sdgcpbs Feb 9, 2021
f595df0
Update Jenkinsfile
sdgcpbs Feb 9, 2021
8823fa2
Update Jenkinsfile
sdgcpbs Feb 9, 2021
09567a2
Update Jenkinsfile
sdgcpbs Feb 9, 2021
6a6e9a9
Update Jenkinsfile
sdgcpbs Feb 9, 2021
28378e1
Update Jenkinsfile
sdgcpbs Feb 10, 2021
60ba973
Create devops.properties
sdgcpbs Feb 10, 2021
fee0f31
Update Jenkinsfile
sdgcpbs Feb 10, 2021
d15df69
Update Jenkinsfile
sdgcpbs Feb 10, 2021
ff87842
Update Jenkinsfile
sdgcpbs Feb 10, 2021
0cedd15
Update Jenkinsfile
sdgcpbs Feb 10, 2021
d7af522
Update Jenkinsfile
sdgcpbs Feb 11, 2021
f70cacb
Update Jenkinsfile
sdgcpbs Feb 11, 2021
24a4084
Update Jenkinsfile
sdgcpbs Feb 11, 2021
bea8695
Update Jenkinsfile
sdgcpbs Feb 12, 2021
670582c
Update Jenkinsfile
sdgcpbs Feb 12, 2021
d0f4d23
Update Jenkinsfile
sdgcpbs Feb 12, 2021
6827f16
Update Jenkinsfile
sdgcpbs Feb 12, 2021
e7e2473
Update Jenkinsfile
sdgcpbs Feb 12, 2021
b5e7fe5
Update Jenkinsfile
sdgcpbs Feb 12, 2021
6e0b048
Update Jenkinsfile
sdgcpbs Feb 12, 2021
7a22ee3
Update Jenkinsfile
sdgcpbs Feb 12, 2021
a0ee45b
Update Jenkinsfile
sdgcpbs Feb 12, 2021
4064eaf
Update Jenkinsfile
sdgcpbs Feb 12, 2021
6df866d
Update Jenkinsfile
sdgcpbs Feb 12, 2021
54148ac
Update Jenkinsfile
sdgcpbs Feb 12, 2021
ee59fe3
Update Jenkinsfile
sdgcpbs Feb 12, 2021
09bebcd
Update Jenkinsfile
sdgcpbs Feb 12, 2021
422dddf
Update Jenkinsfile
sdgcpbs Feb 12, 2021
835ef70
Update Jenkinsfile
sdgcpbs Feb 12, 2021
1a15b5f
Update Jenkinsfile
sdgcpbs Feb 12, 2021
d2040c9
Update Jenkinsfile
sdgcpbs Feb 12, 2021
5d8e44a
Update Jenkinsfile
sdgcpbs Feb 12, 2021
0e0bba5
Update Jenkinsfile
sdgcpbs Feb 12, 2021
1aad980
Update Jenkinsfile
sdgcpbs Feb 12, 2021
7c4e818
Update Jenkinsfile
sdgcpbs Feb 12, 2021
7468b69
Update Jenkinsfile
sdgcpbs Feb 12, 2021
33a9eca
Update Jenkinsfile
sdgcpbs Feb 12, 2021
3c6efa2
Update Jenkinsfile
sdgcpbs Feb 12, 2021
874fab8
Update Jenkinsfile
sdgcpbs Feb 15, 2021
10d1ad4
Update Jenkinsfile
sdgcpbs Feb 15, 2021
8304796
Update Jenkinsfile
sdgcpbs Feb 15, 2021
62eb419
Update Jenkinsfile
sdgcpbs Feb 15, 2021
0df3138
Update Jenkinsfile
sdgcpbs Feb 15, 2021
731ed95
Update Jenkinsfile
sdgcpbs Feb 15, 2021
8d1a13e
Update Jenkinsfile
sdgcpbs Feb 15, 2021
afeaa8f
Update Jenkinsfile
sdgcpbs Feb 15, 2021
30fbea1
Update Jenkinsfile
sdgcpbs Feb 15, 2021
99119c8
Update Jenkinsfile
sdgcpbs Feb 15, 2021
4d8b4a8
Update Jenkinsfile
sdgcpbs Feb 15, 2021
34ef35b
Update Jenkinsfile
sdgcpbs Feb 15, 2021
4a6ad14
Update Jenkinsfile
sdgcpbs Feb 15, 2021
06a8dc2
Update Jenkinsfile
sdgcpbs Feb 15, 2021
a0d606b
Update Jenkinsfile
sdgcpbs Feb 15, 2021
e9fb0cf
Update Jenkinsfile
sdgcpbs Feb 15, 2021
01c2bc3
Update Jenkinsfile
sdgcpbs Feb 15, 2021
c11e3e1
Update Jenkinsfile
sdgcpbs Feb 15, 2021
fc3c825
Update Jenkinsfile
sdgcpbs Feb 15, 2021
b828071
Update Jenkinsfile
sdgcpbs Feb 15, 2021
da01c20
Update Jenkinsfile
sdgcpbs Feb 15, 2021
b069ba5
Update Jenkinsfile
sdgcpbs Feb 15, 2021
306e11e
Update Jenkinsfile
sdgcpbs Feb 15, 2021
352576f
Update Jenkinsfile
sdgcpbs Feb 15, 2021
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
263 changes: 215 additions & 48 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,71 +7,238 @@ kind: Pod
spec:
containers:
- name: hybris
image: signet/hybris-ant:6.6.0.15_3.0.3-UAT
image: signet/hybris-ant:1811_21-V8
command:
- /bin/bash
tty: true
- name: maven
image: maven:3.6.1-slim
command:
- cat
tty: true
'''
label 'sample-java-app'
idleMinutes 10
defaultContainer 'jnlp'
}
}
}

stages {

stages {

stage('Build') {
steps {
stage('Build') {
steps {

container('hybris') {
container('hybris') {

sh '''
#!/bin/bash
java -version
pwd
sh '''
#!/bin/bash
export JAVA_HOME=/app/sapjvm8/sapjvm_8/
java -version
pwd
cd /
ls
cd /hybris-commerce-suite/
ls
ps -ef | grep java
cd /app/sapjvm8
ls

mkdir -p /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/
mkdir -p /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/

cp -R /$WORKSPACE/bin/custom/training/trainingstorefront/ /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/
cd /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/
ls
cd /hybris-commerce-suite/hybris/bin/platform
. ./setantenv.sh
ant server -Dinput.template=develop
'''
}
}
}
cp -R /$WORKSPACE/bin/custom/training/trainingstorefront/ /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/
cd /hybris-commerce-suite/hybris/bin/custom/training/trainingstorefront/
ls
cd /hybris-commerce-suite/hybris/bin/platform
. ./setantenv.sh
java -version
#ant addonuninstall -Daddonnames=assistedservicestorefront,smarteditaddon,captchaaddon,profiletagaddon -DaddonStorefront.yacceleratorstorefront=signetstorefront
#ant addoninstall -Daddonnames=assistedservicestorefront,smarteditaddon,captchaaddon,profiletagaddon -DaddonStorefront.yacceleratorstorefront=signetstorefront
ant customize clean build -Dinput.template=develop
ant production -Dproduction.legacy.mode=true -Dproduction.include.tomcat=true

'''
echo "Performing npm build..."
sh '''
cd /$WORKSPACE/bin/custom/training/trainingstorefront/web/
pwd
npm install -g grunt-cli
npm install grunt --save-dev
npm install grunt-contrib-less --save-dev
npm install grunt-contrib-watch --save-dev
npm install grunt-sync --save-dev
grunt

'''
}
}
}

stage('Unit Test') {
steps {
container('hybris') {

sh '''
stage('Unit Test') {
steps {
container('hybris') {

cd /hybris-commerce-suite/hybris/bin/platform
. ./setantenv.sh
ant unittests
'''
}
}
}
sh '''

export JAVA_HOME=/app/sapjvm8/sapjvm_8/

cd /hybris-commerce-suite/hybris/bin/platform
. ./setantenv.sh
ant unittests

'''

jacoco(
execPattern: '**/*.exec',
classPattern: '**/*.class',
sourcePattern: '**/*.java',
exclusionPattern: '**/test*'
)

}
}
}

stage('Sonarqube') {
environment {
scannerHome = tool 'Sonarqube'
}
steps {
withSonarQubeEnv(installationName:'Sonarqube') {
sh ''' $scannerHome/bin/sonar-scanner -X -Dsonar.projectName=hybris_sample -Dsonar.projectKey=hybris_sample -Dsonar.projectVersion=1.0 -Dsonar.extensions=trainingstorefront-Dsonar.host.url='https://sonarqube.sgn.devops.accentureanalytics.com/' -Dsonar.login=5f5c96ea5e46f6f532379d711295755534744ef8 -Dsonar.exclusions=file:**/gensrc/**,**/*demo.html,web/webroot/**/web.xml,web/webroot/WEB-INF/config/**/*,web/webroot/WEB-INF/lib/**/*,web/webroot/WEB-INF/views/welcome.jsp,web/webroot/index.jsp,**/*BeforeViewHandler*.java,web/webroot/static/bootstrap/js/*.js,web/webroot/static/theme/js/*.js,web/webroot/signetsmarteditmodule/js/*.js,**/*Constants.java,**/jalo/**,**/email/context/**,**/*Form*.java,web/src/**,**/platform/**,src/com/hybris/yprofile/**,resources/apache-nutch-1.16-custom-code/apache-nutch-1.16/**,**/*.java
'''
}
timeout(time: 10, unit: 'MINUTES') {
waitForQualityGate abortPipeline: true
}
}
}
stage('Code Quality') {
environment {
scannerHome = tool 'Sonarqube'
}
steps {
container('maven') {
withSonarQubeEnv(installationName:'Sonarqube') {
sh ''' $scannerHome/bin/sonar-scanner -X -Dsonar.projectName=hybris_${BRANCH_NAME} -Dsonar.projectKey=hybris_sample -Dsonar.projectVersion=1.0 -Dsonar.qualityGate=Hybris_Sonar -Dsonar.extensions=trainingstorefront-Dsonar.host.url='https://sonarqube.sgn.devops.accentureanalytics.com/' -Dsonar.login=5f5c96ea5e46f6f532379d711295755534744ef8 -Dsonar.exclusions=file:**/gensrc/**,**/*demo.html,web/webroot/**/web.xml,web/webroot/WEB-INF/config/**/*,web/webroot/WEB-INF/lib/**/*,web/webroot/WEB-INF/views/welcome.jsp,web/webroot/index.jsp,**/*BeforeViewHandler*.java,web/webroot/static/bootstrap/js/*.js,web/webroot/static/theme/js/*.js,web/webroot/signetsmarteditmodule/js/*.js,**/*Constants.java,**/jalo/**,**/email/context/**,**/*Form*.java,web/src/**,**/platform/**,src/com/hybris/yprofile/**,resources/apache-nutch-1.16-custom-code/apache-nutch-1.16/**,**/*.java
'''
}
timeout(time: 10, unit: 'MINUTES') {
//sleep(60)
waitForQualityGate abortPipeline: true
}
}
}
}

stage('Create Temp Branch') {

steps {
echo "Create temp branch for cloud"
}

}
}

stage('Deploy') {
when { expression { BRANCH_NAME == 'dev' || BRANCH_NAME == 'release' } }
steps {
container('hybris') {

echo "I am executing Deploy to target environment."
sh '''
cd /app/sap_cli/bin/
export JAVA_HOME=/app/sapmachine-jdk-11.0.10/
./sapccm --help
'''

/*
sapccm config set auth-credentials {TOKEN_VALUE}
echo "Create a Build"
sapccm build create –application-code=commerce-cloud --branch=BRANCH_NAME –name=BUILD_NAME –no-wait –subscription-code= SUBSCRIPTION_CODE

echo "Check a Build"
sapccm build show –subscription-code=SUBSCRIPTION_CODE --build-code=BUILD_CODE

echo "Create a Deployment"
sapccm deployment create –build-code=BUILD_CODE --subscription-code=SUBSCRIPTION_CODE --database-update-mode=NONE/UPDATE/INITIALIZE --environment-code=d1/s1/p1 --strategy=CREATE/ROLLING_UPDATE --subscriptioni-code=SUBSCRIPTION_CODE

echo "Check Deployment"
sapccm deployment list –subscription-code=SUBSCRIPTION_CODE
*/

}
}
}

stage('Post Deploy Tests') {
when { expression { BRANCH_NAME == 'dev' || BRANCH_NAME == 'release' } }
parallel {
stage('Smoke Test') {
steps {

script {
propfile = readProperties(file: './devops.properties')
println("SmokeTest:" + propfile['smoke_test'])
println("reading properties ...")
if (propfile['smoke_test'] == "true") {
echo "I am executing Smoke Test on target dev environment post deployment"

/*RESP=`curl -X GET "${bamboo.uri}/RequestsRunning" -H "accept: application/xml" -H "authorization: bearer lR0AA2qfq7v9Ry96vDAgqcer1GPVd5yStmv1_aJVFS43rk06EytB7WsS0_owoiXIgpOXmZVEfkY4ST0JwHtRBk7RH0QRaldWtQT8udC0VdimdGx38RddY2sGaeeF0t9Aflr5rh1Jc_EUfkNK8YrKVxQ6kxB05aCe46CD2fkognv7TiJATmht-ycUjEsd_oy8jH5EK9fmn9eL-wXavNTQcEdsUmFm3-2r3IJDzMK7XCa74qu353yOKLvVyZ1yYQBnc1_fY5GS1BDrFLUZprxpAS30lGEu-d_JTTOQ989UJtIEB3cZzDkIQzeqdYBGCsiDdjdHo2DC1FK2kVPyBITTbQ"`
echo "The response for current execution status is: $RESP"
if [ "$RESP" != "[]" ];
then
echo "There is a test executing currently in Worksoft. Hence, not proceeding with the execution of Worksoft test cases."
exit 1
else
echo "There are no tests executing right now. Hence, proceeding with Worksoft test execution"
fi
# To abort the request before attempting to re-run, uncomment and run below line.
# abort=$(curl -X PUT -H "Authorization: Bearer $token" -d "" -H "id: ${bamboo.RequestID}" ${bamboo.uri}/Request/${bamboo.RequestID}/abort/)
guid=$(curl -X PUT -H "Authorization: Bearer $token" -d "" -H "parameters: {TestEnv}{${bamboo.stage_name}}" -H "id: ${bamboo.RequestID}" ${bamboo.uri}/ExecuteRequest/ | tr -d \")
echo "The GUID is: $guid"
status=$(curl -X GET -H "Authorization: Bearer $token" -d "" -H "APIRequestID: $guid" ${bamboo.uri}/ExecutionStatus/ | awk -F':' '{print $2}' | tr -d \" | tr -d \})
echo "The status is: $status"
while [[ $status != *"Completed"* ]]
do
status=$(curl -X GET -H "Authorization: Bearer $token" -d "" -H "APIRequestID: $guid" ${bamboo.uri}/ExecutionStatus/ | awk -F':' '{print $2}' | tr -d \" | tr -d \})
echo "The status is: $status"
sleep 15
done
status=$(curl -X GET -H "Authorization: Bearer $token" -d "" -H "APIRequestID: $guid" ${bamboo.uri}/ExecutionStatus/)
echo "The status is: $status"
execstatus=$(curl -X GET -H "Authorization: Bearer $token" -d "" -H "APIRequestID: $guid" ${bamboo.uri}/ExecutionStatus/ | awk -F':' '{print $3}' | tr -d \" | tr -d \})
echo "The exec status is: $execstatus"
if [[ $execstatus != *Passed* ]];
then
echo "Failed"
exit 1
else
echo "Passed"
exit
fi
exit */
}
}
}
}
stage('Security Test') {
steps {
echo 'I am running Security Test here'
}
}
}
}
}
post {

always {
script {
//if (propfile['javadoc'] == "true") {
javadoc(javadocDir: "/$WORKSPACE/", keepAll: true)
//}
}
}

failure {
/*mail bcc: '',
body: "<b>Example</b><br>\n<br>Project: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}",
cc: '',
charset: 'UTF-8',
from: '',
mimeType: 'text/html',
replyTo: '',
subject: "ERROR CI: Project name -> ${env.JOB_NAME}",
to: "[email protected]";*/
echo 'I am sending a notification with failure'
}
success {
echo 'I am sending a notification with success'
}
}
}
84 changes: 84 additions & 0 deletions bin/custom/training/trainingstorefront/Gruntfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
less: {
files: ['webroot/WEB-INF/_ui-src/shared/less/variableMapping.less','webroot/WEB-INF/_ui-src/shared/less/generatedVariables.less',
'webroot/WEB-INF/_ui-src/responsive/lib/ybase-*/less/*', 'webroot/WEB-INF/_ui-src/**/themes/**/less/*.less'],
tasks: ['less'],
},
fonts: {
files: ['webroot/WEB-INF/_ui-src/**/themes/**/fonts/*'],
tasks: ['sync:syncfonts'],
},
ybasejs: {
files: ['webroot/WEB-INF/_ui-src/responsive/lib/ybase-0.1.0/js/**/*.js'],
tasks: ['sync:syncybase'],
},
jquery: {
files: ['webroot/WEB-INF/_ui-src/responsive/lib/jquery*.js'],
tasks: ['sync:syncjquery'],
},
},
less: {
default: {
files: [
{
expand: true,
cwd: 'webroot/WEB-INF/_ui-src/',
src: '**/themes/**/less/style.less',
dest: 'webroot/_ui/',
ext: '.css',
rename:function(dest,src){
var nsrc = src.replace(new RegExp("/themes/(.*)/less"),"/theme-$1/css");
return dest+nsrc;
}
}
]
},
},

sync : {
syncfonts: {
files: [{
expand: true,
cwd: 'webroot/WEB-INF/_ui-src/',
src: '**/themes/**/fonts/*',
dest: 'webroot/_ui/',
rename:function(dest,src){
var nsrc = src.replace(new RegExp("/themes/(.*)"),"/theme-$1");
return dest+nsrc;
}
}]
},
syncybase: {
files: [{
cwd: 'webroot/WEB-INF/_ui-src/responsive/lib/ybase-0.1.0/js/',
src: '**/*.js',
dest: 'webroot/_ui/responsive/common/js',
}]
},
syncjquery: {
files: [{
cwd: 'webroot/WEB-INF/_ui-src/responsive/lib',
src: 'jquery*.js',
dest: 'webroot/_ui/responsive/common/js',
}]
}
}

});

// Plugins
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-sync');


// Default task(s). Run 'grunt watch' to start the watching task or add 'watch' to the task list and run 'grunt'.
grunt.registerTask('default', ['less', 'sync']);



};
Loading