17
Jenkinsfile lint Miyata Jumpei (@miyajan) Jul 07, 2017 10 Jenkins

Jenkinsfileのlintで救える命がある

Embed Size (px)

Citation preview

Page 1: Jenkinsfileのlintで救える命がある

Jenkinsfile lint

Miyata Jumpei (@miyajan)

Jul 07, 2017 10 Jenkins

Page 2: Jenkinsfileのlintで救える命がある

⾃⼰紹介

• 宮⽥ 淳平 (@miyajan)

• Cybozu

• ⽣産性向上チーム(⼀⼈)

• 社内で12のJenkinsを管理してます

Page 3: Jenkinsfileのlintで救える命がある

Declarative Pipeline 😆

Page 4: Jenkinsfileのlintで救える命がある

pipeline { agent any stage("Test") { steps { echo "test" } }}

よーし、試すぞー

Page 5: Jenkinsfileのlintで救える命がある

Y^Y^Y^Y^Y

Page 6: Jenkinsfileのlintで救える命がある

構⽂間違えた…

Page 7: Jenkinsfileのlintで救える命がある

Jenkinsfile

• Groovy …

• push

Page 8: Jenkinsfileのlintで救える命がある

Linter

• https://jenkins.io/doc/book/pipeline/development/#linter

• SSH curl

Page 9: Jenkinsfileのlintで救える命がある

# JENKINS_SSHD_PORT=[sshd port on master]# JENKINS_HOSTNAME=[Jenkins master hostname]

$ ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile

SSH

Page 10: Jenkinsfileのlintで救える命がある

# Assuming "anonymous read access" has been enabled on your Jenkins instance.# JENKINS_URL=[root URL of Jenkins master]# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should

$ JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

curl

Page 11: Jenkinsfileのlintで救える命がある

(^o^)

Page 12: Jenkinsfileのlintで救える命がある

jflint

• npm

• https://www.npmjs.com/package/jflint

• curl REST API

Page 13: Jenkinsfileのlintで救える命がある

$ npm install jflint -g

Install

Page 14: Jenkinsfileのlintで救える命がある

{  "jenkinsUrl": “http://your-jenkins.example.com”}

.jflintrc

Page 15: Jenkinsfileのlintで救える命がある

$ jflint Jenkinsfile

Errors encountered validating Jenkinsfile:WorkflowScript: 4: Undefined section "stage" @ line 4, column 5. stage("Test") { ^

WorkflowScript: 1: Missing required section "stages" @ line 1, column 1. pipeline { ^

Usage

Page 16: Jenkinsfileのlintで救える命がある

• git pre-commit hook

Page 17: Jenkinsfileのlintで救える命がある

• Declarative Pipeline linter

• jflint