Files
tictactoe/Jenkinsfile
duynguyen 4d5657f259 feat: split Install/UnitTest stages, add game.js tests with 100% coverage
21 tests covering win/loss/draw/score/reset. lcov report fed to SonarQube.
Pipeline: Install → Unit Test → Scan Code Quality → Build & Push.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 16:10:27 +07:00

103 lines
3.1 KiB
Groovy

@Library('homelab') _
import vn.fireflylab.pipeline.BranchStrategy
// ── Stage functions ────────────────────────────────────────────────
def executeInstall() {
stage('Install') {
container('node') { runNodeInstall() }
}
}
def executeUnitTest() {
stage('Unit Test') {
container('node') { runNodeTest() }
}
}
def executeScanCodeQuality() {
stage('Scan Code Quality') {
container('sonar') {
scanCodeQuality(projectKey: 'tictactoe')
}
}
}
def executeBuildPush() {
stage('Build & Push') {
container('docker') {
def tag = BranchStrategy.imageTag(env.BRANCH_NAME)
env.IMAGE_TAG = tag
dockerBuildPush(appName: 'tictactoe', tag: tag)
}
}
}
def executeBumpChart() {
stage('Bump Helm Chart') {
container('tools') {
bumpHelmChart(imageTag: env.IMAGE_TAG)
gitCommitPush(
files: ['manifest/helm/Chart.yaml', 'manifest/helm/values.yaml'],
message: "ci: bump tictactoe chart to ${env.IMAGE_TAG}"
)
}
}
}
// ── Pipeline ───────────────────────────────────────────────────────
// PR-* → install + test
// feature/* → install + test + scan + build + push
// develop → install + test + scan + build + push
// main → install + test + scan + build + push
// release/x.y.z → install + test + scan + build + push
// hotfix/* → install + test + scan + build + push
podTemplate(yaml: homelabK8sAgent(withTools: true, withSonar: true)) {
node(POD_LABEL) {
withEnv(['DOCKER_HOST=tcp://localhost:2375']) {
checkout scm
BranchStrategy.prStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
}
BranchStrategy.featureStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.developStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.mainStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.releaseStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.hotfixStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
}
}
}