import hudson.tasks.test.AbstractTestResultAction @Library("cadoles") _ pipeline { parameters { text(name: 'URLS', defaultValue: 'https://msedev.crous-toulouse.fr\nhttps://msedev.crous-toulouse.fr/envole/enregistrement\nhttps://msedev.crous-toulouse.fr/envole/page/faq\nhttps://msedev.crous-toulouse.fr/envole/page/?t=liens_utiles\nhttps://msedev.crous-toulouse.fr/envole/page/?t=mentions_legales\nhttps://msedev.crous-toulouse.fr/envole/message/new\nhttps://msedev.crous-toulouse.fr/envole/recuperation/email\nhttps://msedev.crous-toulouse.fr/envole/courriel/raz', description: 'Liste des URLs à tester, une par ligne') string(name: 'USERNAME', defaultValue: '', description: "Nom d'utilisateur pour l'authentification Basic Auth, si nécessaire") password(name: 'PASSWORD', defaultValue: '', description: "Mot de passe pour l'authentification Basic Auth, si nécessaire") booleanParam(name: 'INCLUDE_WARNINGS', defaultValue: false, description: 'Inclure les avertissements') booleanParam(name: 'INCLUDE_NOTICES', defaultValue: false, description: 'Inclure les notifications') } options { disableConcurrentBuilds() } agent { node { label "docker" } } stages { stage("Run RGAA audit") { steps { script { def urls = params.URLS.split('\n') def count = 0 urls.each { u -> stage("Audit page '${u}'") { def report = pa11y.audit(u.trim(), [ reporter: 'junit', username: params.USERNAME, password: params.PASSWORD, standard: 'WCAG2AA', includeNotices: params.INCLUDE_NOTICES, includeWarnings: params.INCLUDE_WARNINGS, ]); writeFile file:"./report_${count}.xml", text:report count++ } } junit testResults: '*.xml', skipPublishingChecks: true rocketSend ( channel: "#cnous-mse", avatar: 'https://jenkins.cadol.es/static/b5f67753/images/headshot.png', message: """ Audit RGAA | ${testStatuses()} - [Voir les tests](${env.RUN_DISPLAY_URL}) @here """.stripIndent(), rawMessage: true, ) } } } } post { always { cleanWs() } } } @NonCPS def testStatuses() { def testStatus = "" AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class) if (testResultAction != null) { def total = testResultAction.totalCount def failed = testResultAction.failCount def skipped = testResultAction.skipCount def passed = total - failed - skipped testStatus = "Passant(s): ${passed}, Échoué(s): ${failed} ${testResultAction.failureDiffString}, Désactivé(s): ${skipped}" } return testStatus }