├── README.md
├── .DS_Store
├── basics
├── .DS_Store
├── credential
│ ├── .DS_Store
│ ├── images
│ │ ├── .DS_Store
│ │ ├── 01-pingju.png
│ │ ├── 02-pingju.png
│ │ ├── 03-pingju.png
│ │ ├── 04-pingju.png
│ │ ├── 06-pingju-cat.png
│ │ ├── 10-pingju-move.png
│ │ ├── 07-pingju-create.png
│ │ ├── 08-pingju-delete.png
│ │ └── 09-pingju-update.png
│ └── _index.en.md
├── installation
│ ├── .DS_Store
│ ├── images
│ │ ├── .DS_Store
│ │ ├── 03-createuser.png
│ │ ├── 04-updatesite.png
│ │ ├── 05-configslave.png
│ │ ├── 06-slavestatus.png
│ │ ├── 07-slavestart.png
│ │ ├── 01-unlockjenkins.png
│ │ ├── 02-customjenkins.png
│ │ └── 08-jenkinsconfig.png
│ └── _index.en.md
├── introduction
│ ├── .DS_Store
│ ├── images
│ │ ├── magic.gif
│ │ ├── 01-systemmanage.png
│ │ ├── 02-jobsmanager.png
│ │ └── 03-buildinput.png
│ └── _index.en.md
├── projectandview
│ ├── .DS_Store
│ ├── images
│ │ ├── .DS_Store
│ │ ├── 01-create.png
│ │ ├── 10-typejob.png
│ │ ├── 11-movejob.png
│ │ ├── 03-argsbuild.png
│ │ ├── 06-buildjobs.png
│ │ ├── 07-buildlogs.png
│ │ ├── 08-debuglogs.png
│ │ ├── 09-disablejob.png
│ │ ├── 02-buildhistory.png
│ │ ├── 05-jenkinsfile.png
│ │ ├── 13-views-create1.png
│ │ ├── 13-views-create2.png
│ │ ├── 13-views-create3-1.png
│ │ ├── 13-views-create3.png
│ │ ├── 13-views-create4.png
│ │ ├── 13-views-delete1.png
│ │ └── 13-views-update1.png
│ └── _index.en.md
├── userandpermissions
│ ├── .DS_Store
│ ├── images
│ │ ├── 12-manage.png
│ │ ├── 13-global.png
│ │ ├── 15-assign.png
│ │ ├── 03-deleuser.png
│ │ ├── 14-project.png
│ │ ├── 02-createuser.png
│ │ ├── 04-updateuser.png
│ │ ├── 01-configglobal.png
│ │ └── 11-quanxian-type.png
│ └── _index.en.md
└── _index.en.md
├── shortcodes
├── .DS_Store
├── attachments.en.files
│ ├── hugo.png
│ ├── BachGavotteShort.mp3
│ ├── adivorciarsetoca00cape.pdf
│ ├── Carroll_AliceAuPaysDesMerveilles.pdf
│ └── movieselectricsheep-flock-244-32500-2.mp4
├── attachments.fr.files
│ ├── hugo.png
│ ├── BachGavotteShort.mp3
│ ├── adivorciarsetoca00cape.pdf
│ ├── Carroll_AliceAuPaysDesMerveilles.pdf
│ └── movieselectricsheep-flock-244-32500-2.mp4
├── children
│ ├── test.en.md
│ ├── test.fr.md
│ ├── children-1
│ │ ├── _index.fr.md
│ │ ├── _index.en.md
│ │ └── children-1-1
│ │ │ ├── _index.fr.md
│ │ │ ├── _index.en.md
│ │ │ └── children-1-1-1
│ │ │ ├── _index.en.md
│ │ │ ├── _index.fr.md
│ │ │ └── children-1-1-1-1
│ │ │ ├── _index.en.md
│ │ │ ├── _index.fr.md
│ │ │ └── children-1-1-1-1-1
│ │ │ ├── _index.en.md
│ │ │ └── _index.fr.md
│ ├── children-3
│ │ ├── _index.fr.md
│ │ └── _index.en.md
│ ├── children-2
│ │ ├── test3.en.md
│ │ ├── test3.fr.md
│ │ ├── _index.en.md
│ │ └── _index.fr.md
│ ├── children-4
│ │ ├── _index.fr.md
│ │ └── _index.en.md
│ ├── _index.en.md
│ └── _index.fr.md
├── siteparam.en.md
├── siteparam.fr.md
├── _index.en.md
├── button.en.md
├── _index.fr.md
├── button.fr.md
├── notice.en.md
├── notice.fr.md
├── expand.en.md
├── expand.fr.md
├── attachments.en.md
├── attachments.fr.md
├── mermaid.fr.md
└── mermaid.en.md
├── jenkins&docker-docs.zip
├── pipelinesyntax
├── .DS_Store
├── chapter01
│ ├── .DS_Store
│ ├── images
│ │ ├── .DS_Store
│ │ ├── 02-blueocean.png
│ │ ├── 03-jenkinslog.png
│ │ └── 01-subwaybeijing.jpg
│ └── _index.en.md
├── chapter02
│ ├── .DS_Store
│ ├── images
│ │ ├── .DS_Store
│ │ ├── 02-blueocean.png
│ │ ├── 03-jenkinslog.png
│ │ └── 01-subwaybeijing.jpg
│ └── _index.en.md
├── chapter03
│ ├── .DS_Store
│ ├── images
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ └── .DS_Store
│ └── _index.en.md
├── chapter04
│ ├── .DS_Store
│ ├── images
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ └── .DS_Store
│ └── _index.en.md
├── chapter05
│ ├── .DS_Store
│ ├── images
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ └── .DS_Store
│ └── _index.en.md
└── _index.en.md
├── pipelineextension
├── .DS_Store
└── _index.en.md
└── pipelineintegrated
├── .DS_Store
├── chapter01
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ └── .DS_Store
└── _index.en.md
├── chapter02
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ └── .DS_Store
└── _index.en.md
├── chapter03
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 18.png
│ ├── 19.png
│ └── .DS_Store
└── _index.en.md
├── chapter04
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 18.png
│ ├── 19.png
│ ├── 20.png
│ ├── 21.png
│ ├── 22.png
│ ├── 23.png
│ └── .DS_Store
└── _index.en.md
├── chapter05
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ └── .DS_Store
└── _index.en.md
├── chapter06
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ └── .DS_Store
└── _index.en.md
├── chapter07
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ └── .DS_Store
└── _index.en.md
├── chapter08
├── .DS_Store
├── images
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ └── .DS_Store
└── _index.en.md
└── _index.en.md
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/.DS_Store
--------------------------------------------------------------------------------
/basics/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/.DS_Store
--------------------------------------------------------------------------------
/shortcodes/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/.DS_Store
--------------------------------------------------------------------------------
/jenkins&docker-docs.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/jenkins&docker-docs.zip
--------------------------------------------------------------------------------
/pipelinesyntax/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/.DS_Store
--------------------------------------------------------------------------------
/basics/credential/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/.DS_Store
--------------------------------------------------------------------------------
/pipelineextension/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineextension/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/.DS_Store
--------------------------------------------------------------------------------
/basics/installation/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/.DS_Store
--------------------------------------------------------------------------------
/basics/introduction/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/introduction/.DS_Store
--------------------------------------------------------------------------------
/basics/projectandview/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/.DS_Store
--------------------------------------------------------------------------------
/basics/credential/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/.DS_Store
--------------------------------------------------------------------------------
/basics/installation/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/.DS_Store
--------------------------------------------------------------------------------
/basics/introduction/images/magic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/introduction/images/magic.gif
--------------------------------------------------------------------------------
/basics/userandpermissions/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter01/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter01/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter02/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter02/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter03/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter03/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter04/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter04/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/.DS_Store
--------------------------------------------------------------------------------
/basics/credential/images/01-pingju.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/01-pingju.png
--------------------------------------------------------------------------------
/basics/credential/images/02-pingju.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/02-pingju.png
--------------------------------------------------------------------------------
/basics/credential/images/03-pingju.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/03-pingju.png
--------------------------------------------------------------------------------
/basics/credential/images/04-pingju.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/04-pingju.png
--------------------------------------------------------------------------------
/basics/projectandview/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter01/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter01/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter07/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter03/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter03/images/01.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter03/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter03/images/02.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter03/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter03/images/03.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter04/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter04/images/01.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter04/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter04/images/02.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter04/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter04/images/03.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/images/01.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/images/02.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/images/03.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/images/04.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter01/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter01/images/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter02/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter02/images/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter03/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter03/images/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter04/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter04/images/.DS_Store
--------------------------------------------------------------------------------
/pipelinesyntax/chapter05/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter05/images/.DS_Store
--------------------------------------------------------------------------------
/shortcodes/attachments.en.files/hugo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.en.files/hugo.png
--------------------------------------------------------------------------------
/shortcodes/attachments.fr.files/hugo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.fr.files/hugo.png
--------------------------------------------------------------------------------
/shortcodes/children/test.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page test"
3 | description = "This is a page test"
4 | +++
5 |
6 | This is a test demo child page
--------------------------------------------------------------------------------
/shortcodes/children/test.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page test"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/basics/credential/images/06-pingju-cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/06-pingju-cat.png
--------------------------------------------------------------------------------
/basics/credential/images/10-pingju-move.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/10-pingju-move.png
--------------------------------------------------------------------------------
/basics/projectandview/images/01-create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/01-create.png
--------------------------------------------------------------------------------
/basics/projectandview/images/10-typejob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/10-typejob.png
--------------------------------------------------------------------------------
/basics/projectandview/images/11-movejob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/11-movejob.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter01/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter01/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter01/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter01/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter01/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter01/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/05.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/06.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/07.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/08.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/09.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/10.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/11.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/05.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/06.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/07.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/08.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/09.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/10.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/11.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/12.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/13.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/14.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/15.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/16.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/17.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/18.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/19.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/05.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/06.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/07.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/08.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/09.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/10.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/11.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/12.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/13.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/14.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/15.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/16.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/17.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/18.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/19.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/20.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/21.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/22.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/23.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/05.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/06.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/07.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/08.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/09.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/10.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/11.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/12.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/13.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/14.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/15.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/16.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/05.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/06.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/07.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/08.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/09.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/10.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/11.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/12.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/13.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/14.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/15.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/16.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/17.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter07/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter07/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter07/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/01.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/02.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/03.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/04.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/05.png
--------------------------------------------------------------------------------
/shortcodes/children/children-1/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/shortcodes/children/children-3/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 3"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/basics/credential/images/07-pingju-create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/07-pingju-create.png
--------------------------------------------------------------------------------
/basics/credential/images/08-pingju-delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/08-pingju-delete.png
--------------------------------------------------------------------------------
/basics/credential/images/09-pingju-update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/credential/images/09-pingju-update.png
--------------------------------------------------------------------------------
/basics/installation/images/03-createuser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/03-createuser.png
--------------------------------------------------------------------------------
/basics/installation/images/04-updatesite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/04-updatesite.png
--------------------------------------------------------------------------------
/basics/installation/images/05-configslave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/05-configslave.png
--------------------------------------------------------------------------------
/basics/installation/images/06-slavestatus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/06-slavestatus.png
--------------------------------------------------------------------------------
/basics/installation/images/07-slavestart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/07-slavestart.png
--------------------------------------------------------------------------------
/basics/introduction/images/01-systemmanage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/introduction/images/01-systemmanage.png
--------------------------------------------------------------------------------
/basics/introduction/images/02-jobsmanager.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/introduction/images/02-jobsmanager.png
--------------------------------------------------------------------------------
/basics/introduction/images/03-buildinput.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/introduction/images/03-buildinput.png
--------------------------------------------------------------------------------
/basics/projectandview/images/03-argsbuild.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/03-argsbuild.png
--------------------------------------------------------------------------------
/basics/projectandview/images/06-buildjobs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/06-buildjobs.png
--------------------------------------------------------------------------------
/basics/projectandview/images/07-buildlogs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/07-buildlogs.png
--------------------------------------------------------------------------------
/basics/projectandview/images/08-debuglogs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/08-debuglogs.png
--------------------------------------------------------------------------------
/basics/projectandview/images/09-disablejob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/09-disablejob.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/12-manage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/12-manage.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/13-global.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/13-global.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/15-assign.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/15-assign.png
--------------------------------------------------------------------------------
/pipelineintegrated/chapter01/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter01/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter02/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter02/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter03/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter04/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter05/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter05/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter06/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter06/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter07/images/.DS_Store
--------------------------------------------------------------------------------
/pipelineintegrated/chapter08/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelineintegrated/chapter08/images/.DS_Store
--------------------------------------------------------------------------------
/shortcodes/children/children-1/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page
--------------------------------------------------------------------------------
/basics/installation/images/01-unlockjenkins.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/01-unlockjenkins.png
--------------------------------------------------------------------------------
/basics/installation/images/02-customjenkins.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/02-customjenkins.png
--------------------------------------------------------------------------------
/basics/installation/images/08-jenkinsconfig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/installation/images/08-jenkinsconfig.png
--------------------------------------------------------------------------------
/basics/projectandview/images/02-buildhistory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/02-buildhistory.png
--------------------------------------------------------------------------------
/basics/projectandview/images/05-jenkinsfile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/05-jenkinsfile.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/03-deleuser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/03-deleuser.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/14-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/14-project.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter01/images/02-blueocean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter01/images/02-blueocean.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter02/images/02-blueocean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter02/images/02-blueocean.png
--------------------------------------------------------------------------------
/shortcodes/children/children-2/test3.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page test 3"
3 | description = "This is a page test"
4 | +++
5 |
6 | This is a test 3 demo child page
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-create1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-create1.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-create2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-create2.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-create3-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-create3-1.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-create3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-create3.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-create4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-create4.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-delete1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-delete1.png
--------------------------------------------------------------------------------
/basics/projectandview/images/13-views-update1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/projectandview/images/13-views-update1.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/02-createuser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/02-createuser.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/04-updateuser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/04-updateuser.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter01/images/03-jenkinslog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter01/images/03-jenkinslog.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter02/images/03-jenkinslog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter02/images/03-jenkinslog.png
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/shortcodes/children/children-2/test3.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page test 3"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo test 3
--------------------------------------------------------------------------------
/basics/userandpermissions/images/01-configglobal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/01-configglobal.png
--------------------------------------------------------------------------------
/basics/userandpermissions/images/11-quanxian-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/basics/userandpermissions/images/11-quanxian-type.png
--------------------------------------------------------------------------------
/pipelinesyntax/chapter01/images/01-subwaybeijing.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter01/images/01-subwaybeijing.jpg
--------------------------------------------------------------------------------
/pipelinesyntax/chapter02/images/01-subwaybeijing.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/pipelinesyntax/chapter02/images/01-subwaybeijing.jpg
--------------------------------------------------------------------------------
/shortcodes/attachments.en.files/BachGavotteShort.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.en.files/BachGavotteShort.mp3
--------------------------------------------------------------------------------
/shortcodes/attachments.fr.files/BachGavotteShort.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.fr.files/BachGavotteShort.mp3
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page
--------------------------------------------------------------------------------
/shortcodes/children/children-4/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 4"
3 | description = "Ceci est une page test"
4 | hidden = true
5 | +++
6 |
7 | Ceci est une page de demo
--------------------------------------------------------------------------------
/pipelineextension/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 流水线扩展篇[待更新]
3 | weight: 25
4 | pre: "5. "
5 | chapter: true
6 | ---
7 |
8 | ### Chapter 5
9 |
10 | # 流水线扩展篇
11 |
12 |
--------------------------------------------------------------------------------
/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf
--------------------------------------------------------------------------------
/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf
--------------------------------------------------------------------------------
/shortcodes/children/children-3/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 3"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page, not displayed in the menu
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf
--------------------------------------------------------------------------------
/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf
--------------------------------------------------------------------------------
/shortcodes/children/children-4/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 4"
3 | description = "This is a demo child page"
4 | hidden = true
5 | +++
6 |
7 | This is a demo child page, not displayed in the menu
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1-1"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1-1"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4
--------------------------------------------------------------------------------
/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zeyangli/jenkins_pipeline_docs/HEAD/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1-1-1"
3 | description = "This is a demo child page"
4 | +++
5 |
6 | This is a demo child page
--------------------------------------------------------------------------------
/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 1-1-1-1-1"
3 | description = "Ceci est une page test"
4 | +++
5 |
6 | Ceci est une page de demo
--------------------------------------------------------------------------------
/shortcodes/children/children-2/_index.en.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 2"
3 | description = ""
4 | +++
5 |
6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
7 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
8 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
9 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
10 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
11 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
--------------------------------------------------------------------------------
/shortcodes/children/children-2/_index.fr.md:
--------------------------------------------------------------------------------
1 | +++
2 | title = "page 2"
3 | description = ""
4 | +++
5 |
6 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
7 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
8 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
9 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
10 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
11 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
--------------------------------------------------------------------------------
/basics/_index.en.md:
--------------------------------------------------------------------------------
1 | ### Chapter 1
2 |
3 | # Jenkins基础管理
4 |
5 |
6 | 😺您好,本模块主要讲解Jenkins的基本功能,属于基础知识自由选择跳过!
7 |
8 |
9 | | 章节名称 | 章节内容 |
10 | | ------ | ----------- |
11 | | [1-1 JENKINS简介与应用](introduction/_index.en.md) |本章我们将介绍Jenkins,让大家认识Jenkins,它能做什么?|
12 | | [1-2 JENKINS安装部署](installation/_index.en.md) | 本章我们将指导大家如何安装Jenkins,很简单,让我们一起来安装吧! |
13 | | [1-3 JENKINS用户与权限管理](userandpermissions/_index.en.md) |本章我们将指导大家在Jenkins中如何管理用户及用户权限|
14 | | [1-4 JENKINS凭据管理](credential/_index.en.md) | 本章我们将指导大家如何管理Jenkins的凭据|
15 | | [1-5 JENKINS项目与视图管理](projectandview/_index.en.md) | 本章我们将指导大家Jenkins中的项目类型,通过视图对项目进行管理 |
16 |
17 |
--------------------------------------------------------------------------------
/shortcodes/siteparam.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Site param
3 | description : "Get value of site params variables in your page."
4 | ---
5 |
6 | `siteparam` shortcode is used to help you print values of site params.
7 |
8 | For instance, in this current site, the `editURL` variable is used in `config.toml`
9 |
10 | ```toml
11 | [params]
12 | editURL = "https://github.com/matcornic/hugo-theme-learn/edit/master/exampleSite/content/"
13 | ```
14 |
15 | Use the `siteparam` shortcode to display its value.
16 |
17 | ```
18 | `editURL` Value : {{%/* siteparam "editURL" */%}}
19 | ```
20 |
21 | is displayed as
22 |
23 | `editURL` Value : {{% siteparam "editURL" %}}
--------------------------------------------------------------------------------
/pipelinesyntax/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 流水线核心语法
3 | weight: 10
4 | pre: "2. "
5 | chapter: true
6 | ---
7 |
8 | ### Chapter 2
9 |
10 | # 流水线核心语法
11 |
12 |
13 | {{% notice tip %}}
14 | 😺您好,本模块主要讲解Jenkins 流水线核心语法!
15 | {{% /notice %}}
16 |
17 |
18 | | 章节名称 | 章节内容 |
19 | | ------ | ----------- |
20 | | [2-1 编写jenkinsfile](chapter01/index.en.md) |本章我们将介绍Jenkinsfile的语法 让大家认识流水线编写|
21 | | [2-2 Jenkins流水线语法](chapter02/index.en.md) | 本章我们将为大家详细讲述流水线语法|
22 | | [2-3 Jenkins共享库应用](chapter03/index.en.md) |本章我们将主要学习Jenkins共享库的配置|
23 | | [2-4 Groovy基础语法](chapter04/index.en.md) | 本章主要讲述Groovy编程基础语法|
24 | | [2-5 流水线开发工具](chapter05/index.en.md) | 本章我们主要讲述常用的流水线开发工具 |
25 |
26 |
--------------------------------------------------------------------------------
/shortcodes/siteparam.fr.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Site param
3 | description : "Afficher la valeur d'un paramètre global du site dans votre page"
4 | ---
5 |
6 | Les shortcode `siteparam` est utilisé pour vous aider à afficher des valeurs provenant des paramètres globaux du site.
7 |
8 | Par exemple, dans ce site, le paramètre `editURL` est utilisé dans le fichier `config.toml`
9 |
10 | ```toml
11 | [params]
12 | editURL = "https://github.com/matcornic/hugo-theme-learn/edit/master/exampleSite/content/"
13 | ```
14 |
15 | Utilisez le shortcode `siteparam` pour affichier sa valeur.
16 |
17 | ```
18 | Valeur de `editURL` : {{%/* siteparam "editURL" */%}}
19 | ```
20 |
21 | s'affiche comme
22 |
23 | Valeur de `editURL` : {{% siteparam "editURL" %}}
--------------------------------------------------------------------------------
/shortcodes/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | date: 2016-04-09T16:50:16+02:00
3 | weight: 15
4 | ---
5 | title: Shortcodes
6 | pre: "3. "
7 |
8 | Hugo uses Markdown for its simple content format. However, there are a lot of things that Markdown doesn’t support well. You could use pure HTML to expand possibilities.
9 |
10 | But this happens to be a bad idea. Everyone uses Markdown because it's pure and simple to read even non-rendered. You should avoid HTML to keep it as simple as possible.
11 |
12 | To avoid this limitations, Hugo created [shortcodes](https://gohugo.io/extras/shortcodes/). A shortcode is a simple snippet inside a page.
13 |
14 | **Hugo-theme-learn** provides multiple shortcodes on top of existing ones.
15 |
16 | {{%children style="h2" description="true" %}}
17 |
--------------------------------------------------------------------------------
/shortcodes/button.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Button
3 | description : "Nice buttons on your page."
4 | ---
5 |
6 | A button is a just a clickable button with optional icon.
7 |
8 | ```
9 | {{%/* button href="https://getgrav.org/" */%}}Get Grav{{%/* /button */%}}
10 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" */%}}Get Grav with icon{{%/* /button */%}}
11 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" */%}}Get Grav with icon right{{%/* /button */%}}
12 | ```
13 |
14 | {{% button href="https://getgrav.org/" %}}Get Grav{{% /button %}}
15 | {{% button href="https://getgrav.org/" icon="fas fa-download" %}}Get Grav with icon{{% /button %}}
16 | {{% button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" %}}Get Grav with icon right{{% /button %}}
17 |
--------------------------------------------------------------------------------
/shortcodes/_index.fr.md:
--------------------------------------------------------------------------------
1 | ---
2 | date: 2016-04-09T16:50:16+02:00
3 | title: Shortcodes
4 | pre: "3. "
5 | weight: 15
6 | ---
7 |
8 | Hugo utilise Markdown pour son format simple. Cependant, il y a beaucoup de chose que Markdown ne supporte pas bien. On pourrait utiliser du HTML pur pour améliorer les capacité du Markdown.
9 |
10 | Mais c'est probablement une mauvaise idée. Tout le monde utilise le Markdown parce que c'est pur et simple à lire même lorsqu'il est affiché en texte brut. Vous devez éviter le HTML autant que possible pour garder le contenu simple.
11 |
12 | Cependant, pour éviter les limitations, Hugo a créé les [shortcodes](https://gohugo.io/extras/shortcodes/). Un shortcode est un bout de code (*snippet*) dans une page.
13 |
14 | **Hugo-theme-learn** fournit de multiple shortcodes en plus de ceux existant.
15 |
16 | {{%children style="h2" description="true" %}}
17 |
--------------------------------------------------------------------------------
/shortcodes/button.fr.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Button (Bouton)
3 | description : "De beaux boutons sur votre page."
4 | ---
5 |
6 | Le shortcode *button* est simplement un bouton cliquable avec une icône optionnelle.
7 |
8 | ```
9 | {{%/* button href="https://getgrav.org/" */%}}Téléchargez Grav{{%/* /button */%}}
10 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" */%}}Téléchargez Grav avec icône{{%/* /button */%}}
11 | {{%/* button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" */%}}Téléchargez Grav avec icône à droite{{%/* /button */%}}
12 | ```
13 |
14 | {{% button href="https://getgrav.org/" %}}Téléchargez Grav{{% /button %}}
15 | {{% button href="https://getgrav.org/" icon="fas fa-download" %}}Téléchargez Grav avec icône{{% /button %}}
16 | {{% button href="https://getgrav.org/" icon="fas fa-download" icon-position="right" %}}Téléchargez Grav avec icône à droite{{% /button %}}
17 |
--------------------------------------------------------------------------------
/shortcodes/notice.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Notice
3 | description : "Disclaimers to help you structure your page"
4 | ---
5 |
6 | The notice shortcode shows 4 types of disclaimers to help you structure your page.
7 |
8 | ### Note
9 |
10 | ```
11 | {{%/* notice note */%}}
12 | A notice disclaimer
13 | {{%/* /notice */%}}
14 | ```
15 |
16 | renders as
17 |
18 | {{% notice note %}}
19 | A notice disclaimer
20 | {{% /notice %}}
21 |
22 | ### Info
23 |
24 | ```
25 | {{%/* notice info */%}}
26 | An information disclaimer
27 | {{%/* /notice */%}}
28 | ```
29 |
30 | renders as
31 |
32 | {{% notice info %}}
33 | An information disclaimer
34 | {{% /notice %}}
35 |
36 | ### Tip
37 |
38 | ```
39 | {{%/* notice tip */%}}
40 | A tip disclaimer
41 | {{%/* /notice */%}}
42 | ```
43 |
44 | renders as
45 |
46 | {{% notice tip %}}
47 | A tip disclaimer
48 | {{% /notice %}}
49 |
50 | ### Warning
51 |
52 | ```
53 | {{%/* notice warning */%}}
54 | A warning disclaimer
55 | {{%/* /notice */%}}
56 | ```
57 |
58 | renders as
59 |
60 | {{% notice warning %}}
61 | A warning disclaimer
62 | {{% /notice %}}
63 |
--------------------------------------------------------------------------------
/pipelineintegrated/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 流水线集成篇
3 | weight: 15
4 | pre: "3. "
5 | chapter: true
6 | ---
7 |
8 | ### Chapter 3
9 |
10 | # 流水线集成篇
11 |
12 | {{% notice tip %}}
13 | 😺您好,本模块主要讲解Jenkins如何与其他工具链系统集成, 注意不会讲解太多关于外围系统的知识,如需了解更多可以查阅外围系统的官方文档!
14 | {{% /notice %}}
15 |
16 |
17 | | 章节名称 | 章节内容 |
18 | | ------ | ----------- |
19 | | [3-1 构建发布工具集成](chapter01/_index.en.md) |本章我们将学习Jenkins与常用的构建发布工具集成|
20 | | [3-2 用户认证系统集成](chapter02/_index.en.md) | 本章我们将为大家讲述用用户认证系统集成|
21 | | [3-3 版本控制系统集成](chapter03/_index.en.md) |本章我们将学习Jenkins与版本控制系统集成|
22 | | [3-4 质量管理平台集成](chapter04/_index.en.md) | 本章主要讲述Jenkins与质量管理平台集成|
23 | | [3-5 制品仓库集成](chapter05/_index.en.md) | 本章我们主要讲述Jenkins与制品库集成 |
24 | | [3-6 需求管理平台集成](chapter06/_index.en.md) | 本章我们主要讲述Jenkins与需求管理平台集成 |
25 | | [3-7 容器PaaS平台集成](chapter07/_index.en.md) | 本章我们主要讲述Jenkins与与容器PaaS平台集成 |
26 | | [3-8 自动化接口测试](chapter08/_index.en.md) | 本章我们主要讲述Jenkins完成自动化接口测试 |
27 |
28 |
29 | ## FAQ
30 |
31 | ### Q1什么是集成?
32 | 所谓的集成是通过Jenkins与外部系统或工具之间的调用,而不是Jenkins本身具备其他外围系统的功能。例如:与maven集成,我们不能去认为Jenkins自身已经具有maven打包构建的功能,而是jenkins调用maven去进行打包构建! 所以打包出现的问题未必一定是Jenkins的问题,80%因为代码无法完成编译等步骤导致的。
--------------------------------------------------------------------------------
/shortcodes/notice.fr.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Notice
3 | description : "Message pour vous aider à structurer votre contenu"
4 | ---
5 |
6 | Le shortcode *Notice* permet d'afficher 4 types de message pour vous aider à structurer votre contenu.
7 |
8 | ### Note
9 |
10 | ```
11 | {{%/* notice note */%}}
12 | Une notice de type *note*
13 | {{%/* /notice */%}}
14 | ```
15 |
16 | s'affiche comme
17 |
18 | {{% notice note %}}
19 | Une notice de type *note*
20 | {{% /notice %}}
21 |
22 | ### Info
23 |
24 | ```
25 | {{%/* notice info */%}}
26 | Une notice de type *info*
27 | {{%/* /notice */%}}
28 | ```
29 |
30 | s'affiche comme
31 |
32 | {{% notice info %}}
33 | Une notice de type *info*
34 | {{% /notice %}}
35 |
36 | ### Tip
37 |
38 | ```
39 | {{%/* notice tip */%}}
40 | Une notice de type *tip*
41 | {{%/* /notice */%}}
42 | ```
43 |
44 | s'affiche comme
45 |
46 | {{% notice tip %}}
47 | Une notice de type *tip*
48 | {{% /notice %}}
49 |
50 | ### Warning
51 |
52 | ```
53 | {{%/* notice warning */%}}
54 | Une notice de type *warning*
55 | {{%/* /notice */%}}
56 | ```
57 |
58 | s'affiche comme
59 |
60 | {{% notice warning %}}
61 | Une notice de type *warning*
62 | {{% /notice %}}
--------------------------------------------------------------------------------
/basics/userandpermissions/_index.en.md:
--------------------------------------------------------------------------------
1 | # Jenkins用户与权限管理
2 |
3 |
4 | 您好,本章我们将指导大家在Jenkins中如何管理用户及用户权限 😀
5 |
6 |
7 |
8 | ### 目录
9 | + [用户管理](#用户管理)
10 | - [查看用户](#查看用户)
11 | - [新建用户](#新建用户)
12 | - [删除用户](#删除用户)
13 | - [更新用户](#更新用户)
14 |
15 | + [权限管理](#权限管理)
16 | - [管理权限](#管理权限)
17 | - [全局权限](#全局权限)
18 | - [项目权限](#项目权限)
19 | - [权限授权](#权限授权)
20 |
21 | ---
22 |
23 |
24 | Jenkins默认使用的是自带的数据库管理用户,支持同步LDAP、Github等认证集成。关于用户与权限管理是Jenkins比较弱的一点,当大规模授权的时候建议使用API接口授权,否则当你打开web页面授权时,会很乱加载缓慢,最终导致保存失败权限丢失。
25 |
26 | ### 用户管理
27 | * 配置用户接入入口: 系统管理->全局安全配置。
28 | * 默认使用的是Jenkins数据库存储。
29 | * 可以选择集成LDAP服务或者是GItlab服务(需要安装插件后才能使用,后面会讲解)。
30 |
31 | 
32 |
33 |
34 | #### 查看用户
35 | 以使用Jenkins专有数据库为例,用户管理入口: 系统管理-> 管理用户
36 |
37 |
38 | #### 新建用户
39 | 
40 |
41 | #### 删除用户
42 | 
43 |
44 |
45 | #### 更新用户
46 | 
47 |
48 | ---
49 |
50 | ### 权限管理
51 |
52 | > 注意安装插件: 权限默认使用 Role-Based Strategy,其他方式如图所示。
53 |
54 | 
55 |
56 | #### 管理权限
57 |
58 | - 系统设置->Manage and Assign Roles->Manage Roles
59 | - Global roles:添加用户和用户组,分配某个用户属于哪个用户组。
60 | - Project roles:添加某个工程或某一组工程的用户或用户组
61 | - Slave roles:添加某个节点或某一组节点的用户或用户组
62 |
63 | 
64 |
65 |
66 | #### 全局权限
67 |
68 | 
69 |
70 | #### 项目权限
71 |
72 | 
73 |
74 |
75 | #### 权限授权
76 | 
77 |
--------------------------------------------------------------------------------
/basics/credential/_index.en.md:
--------------------------------------------------------------------------------
1 | # Jenkins凭据管理
2 |
3 |
4 | 您好,本章我们将指导大家如何管理Jenkins的凭据 😀 每个凭据会有一个唯一的ID,这个ID很重要,可以自定义也可以随机生成。(后续流水线中引用都是通过ID引用的)
5 |
6 |
7 |
8 |
9 | ### 目录
10 | + [新建凭据](#新建凭据)
11 | + [删除凭据](#删除凭据)
12 | + [更新凭据](#更新凭据)
13 | + [移动凭据](#移动凭据)
14 | + [使用凭据](#使用凭据)
15 |
16 | ---
17 | Jenkins的凭据有很多种类型,可以将一些敏感信息存储为凭据,然后在项目中引用。
18 | 凭据-> 系统-> 全局凭据
19 | 
20 |
21 | 
22 |
23 | * `Username with password`类型存储Harbor或者其他系统的用户名和密码。
24 | * `GitLab API token`类型存储Gitlab的用户API token。
25 | * `Secret text`类型可以用来存储OpenShift等系统中的token。
26 | * `Certificate`类型可以用户存储证书,例如k8s的用户证书。
27 |
28 |
29 | ### 新建凭据
30 | 选择需要创建的凭据的类型,然后输入账号和密码等信息。保存即可。
31 |
32 | 
33 |
34 | ### 删除凭据
35 | 当一些凭据已经不需要的时候,可以进行删除。
36 | 
37 |
38 | ### 更新凭据
39 | 当用户名或者密码更改后,可以选择凭据进行修改。
40 | 
41 |
42 | ### 移动凭据
43 |
44 | 目前移动凭据很少用,当存在多个阈的时候可以使用。
45 |
46 | 
47 |
48 |
49 | ### 使用凭据
50 |
51 | 我们可以在项目中增加一个凭据参数,用与项目构建中使用。
52 | 
53 |
54 | 当我们使用pipeline类型的项目的时候,我们可以通过`片段生成器`生成流水线语法
55 |
56 | * 选择要使用的凭据的类型
57 | 
58 |
59 | * 输入该凭据的账号的密码的变量名称(后续直接在流水线中使用此变量进行引用)
60 | 
61 |
62 | * 流水线代码
63 |
64 | ```
65 | withCredentials([usernamePassword(credentialsId: '24982560-17fc-4589-819b-bc5bea89da77', passwordVariable: 'password', usernameVariable: 'username')]) {
66 | // some block
67 |
68 | sh "curl -u ${username}:${password} xxxxxxxxx"
69 | }
70 | ```
71 |
72 | ---
--------------------------------------------------------------------------------
/shortcodes/children/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title : Children
3 | description : List the child pages of a page
4 | ---
5 |
6 | Use the children shortcode to list the child pages of a page and the further descendants (children's children). By default, the shortcode displays links to the child pages.
7 |
8 | ## Usage
9 |
10 | | Parameter | Default | Description |
11 | |:--|:--|:--|
12 | | page | _current_ | Specify the page name (section name) to display children for |
13 | | style | "li" | Choose the style used to display descendants. It could be any HTML tag name |
14 | | showhidden | "false" | When true, child pages hidden from the menu will be displayed |
15 | | description | "false" | Allows you to include a short text under each page in the list.
when no description exists for the page, children shortcode takes the first 70 words of your content. [read more info about summaries on gohugo.io](https://gohugo.io/content/summaries/) |
16 | | depth | 1 | Enter a number to specify the depth of descendants to display. For example, if the value is 2, the shortcode will display 2 levels of child pages.
**Tips:** set 999 to get all descendants|
17 | | sort | none | Sort Children By
32 | ```mermaid
33 | graph LR;
34 | A[Bords droits] -->|Lien texte| B(Bords arondis)
35 | B --> C{Décision}
36 | C -->|Un| D[Résultat un]
37 | C -->|Deux| E[Résultat deux]
38 | ```
39 |
40 |
41 | renders as
42 |
43 | ```mermaid
44 | graph LR;
45 | A[Bords droits] -->|Lien texte| B(Bords arondis)
46 | B --> C{Décision}
47 | C -->|Un| D[Résultat un]
48 | C -->|Deux| E[Résultat deux]
49 | ```
50 |
51 | ## Sequence example
52 |
53 | {{*mermaid*/>}}
54 | sequenceDiagram
55 | participant Alice
56 | participant Bob
57 | Alice->>John: Salut John, comment vas-tu?
58 | loop Vérification
59 | John->John: Se bat contre l'hyponcodrie.
60 | end
61 | Note right of John: Les pensées rationnelles86 | ```mermaid 87 | sequenceDiagram 88 | participant Alice 89 | participant Bob 90 | Alice->>John: Salut John, comment vas-tu? 91 | loop Vérification 92 | John->John: Se bat contre l'hyponcodrie. 93 | end 94 | Note right of John: Les pensées rationnelles100 | 101 | renders as 102 | 103 | ```mermaid 104 | sequenceDiagram 105 | participant Alice 106 | participant Bob 107 | Alice->>John: Salut John, comment vas-tu? 108 | loop Vérification 109 | John->John: Se bat contre l'hyponcodrie. 110 | end 111 | Note right of John: Les pensées rationnelles
prédominent... 95 | John-->Alice: Super! 96 | John->Bob: Et toi? 97 | Bob-->John: Au top! 98 | ``` 99 |
162 | ```mermaid 163 | gantt 164 | dateFormat YYYY-MM-DD 165 | title Ajout de la fonctionnalité de GANTT à Mermaid 166 | section Une section 167 | Tâche complétée :done, des1, 2014-01-06,2014-01-08 168 | Tâche en cours :active, des2, 2014-01-09, 3d 169 | Future tâche : des3, after des2, 5d 170 | Future tâche 2 : des4, after des3, 5d 171 | section Tâches critiques 172 | Tâche complétée dans le chemin critique :crit, done, 2014-01-06,24h 173 | Implémenter le parser et jison :crit, done, after des1, 2d 174 | Créer des tests pour le parser :crit, active, 3d 175 | Future tâche dans le chemin critique :crit, 5d 176 | Créer des tests pour le renderer :2d 177 | Ajout à Mermaid :1d 178 | ``` 179 |180 | 181 | renders as 182 | 183 | ```mermaid 184 | gantt 185 | dateFormat YYYY-MM-DD 186 | title Ajout de la fonctionnalité de GANTT à Mermaid 187 | section Une section 188 | Tâche complétée :done, des1, 2014-01-06,2014-01-08 189 | Tâche en cours :active, des2, 2014-01-09, 3d 190 | Future tâche : des3, after des2, 5d 191 | Future tâche 2 : des4, after des3, 5d 192 | section Tâches critiques 193 | Tâche complétée dans le chemin critique :crit, done, 2014-01-06,24h 194 | Implémenter le parser et jison :crit, done, after des1, 2d 195 | Créer des tests pour le parser :crit, active, 3d 196 | Future tâche dans le chemin critique :crit, 5d 197 | Créer des tests pour le renderer :2d 198 | Ajout à Mermaid :1d 199 | ``` 200 | 201 | ### Class example 202 | 203 |
204 | ```mermaid 205 | classDiagram 206 | Class01 <|-- AveryLongClass : Cool 207 | Class03 *-- Class04 208 | Class05 o-- Class06 209 | Class07 .. Class08 210 | Class09 --> C2 : Where am i? 211 | Class09 --* C3 212 | Class09 --|> Class07 213 | Class07 : equals() 214 | Class07 : Object[] elementData 215 | Class01 : size() 216 | Class01 : int chimp 217 | Class01 : int gorilla 218 | Class08 <--> C2: Cool label 219 | ``` 220 |221 | 222 | renders as 223 | 224 | ```mermaid 225 | classDiagram 226 | Class01 <|-- AveryLongClass : Cool 227 | Class03 *-- Class04 228 | Class05 o-- Class06 229 | Class07 .. Class08 230 | Class09 --> C2 : Where am i? 231 | Class09 --* C3 232 | Class09 --|> Class07 233 | Class07 : equals() 234 | Class07 : Object[] elementData 235 | Class01 : size() 236 | Class01 : int chimp 237 | Class01 : int gorilla 238 | Class08 <--> C2: Cool label 239 | ``` 240 | 241 | ### Git example 242 | 243 |
244 | ```mermaid
245 | gitGraph:
246 | options
247 | {
248 | "nodeSpacing": 150,
249 | "nodeRadius": 10
250 | }
251 | end
252 | commit
253 | branch newbranch
254 | checkout newbranch
255 | commit
256 | commit
257 | checkout master
258 | commit
259 | commit
260 | merge newbranch
261 | ```
262 |
263 |
264 | renders as
265 |
266 | ```mermaid
267 | gitGraph:
268 | options
269 | {
270 | "nodeSpacing": 150,
271 | "nodeRadius": 10
272 | }
273 | end
274 | commit
275 | branch newbranch
276 | checkout newbranch
277 | commit
278 | commit
279 | checkout master
280 | commit
281 | commit
282 | merge newbranch
283 | ```
284 |
--------------------------------------------------------------------------------
/shortcodes/mermaid.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title : "Mermaid"
3 | description : "Generation of diagram and flowchart from text in a similar manner as markdown"
4 | ---
5 |
6 | [Mermaid](https://mermaidjs.github.io/) is a library helping you to generate diagram and flowcharts from text, in a similar manner as Markdown.
7 |
8 | Just insert your mermaid code in the `mermaid` shortcode and that's it.
9 |
10 | ## Flowchart example
11 |
12 | {{*mermaid align="left"*/>}}
13 | graph LR;
14 | A[Hard edge] -->|Link text| B(Round edge)
15 | B --> C{Decision}
16 | C -->|One| D[Result one]
17 | C -->|Two| E[Result two]
18 | {{* /mermaid */>}}
19 |
20 | renders as
21 |
22 | {{
33 | ```mermaid
34 | graph LR;
35 | A[Hard edge] -->|Link text| B(Round edge)
36 | B --> C{Decision}
37 | C -->|One| D[Result one]
38 | C -->|Two| E[Result two]
39 | ```
40 |
41 |
42 | renders as
43 |
44 | ```mermaid
45 | graph LR;
46 | A[Hard edge] -->|Link text| B(Round edge)
47 | B --> C{Decision}
48 | C -->|One| D[Result one]
49 | C -->|Two| E[Result two]
50 | ```
51 |
52 | ## Sequence example
53 |
54 | {{*mermaid*/>}}
55 | sequenceDiagram
56 | participant Alice
57 | participant Bob
58 | Alice->>John: Hello John, how are you?
59 | loop Healthcheck
60 | John->John: Fight against hypochondria
61 | end
62 | Note right of John: Rational thoughts 87 | ```mermaid 88 | sequenceDiagram 89 | participant Alice 90 | participant Bob 91 | Alice->>John: Hello John, how are you? 92 | loop Healthcheck 93 | John->John: Fight against hypochondria 94 | end 95 | Note right of John: Rational thoughts101 | 102 | renders as 103 | 104 | ```mermaid 105 | sequenceDiagram 106 | participant Alice 107 | participant Bob 108 | Alice->>John: Hello John, how are you? 109 | loop Healthcheck 110 | John->John: Fight against hypochondria 111 | end 112 | Note right of John: Rational thoughts
prevail... 96 | John-->Alice: Great! 97 | John->Bob: How about you? 98 | Bob-->John: Jolly good! 99 | ``` 100 |
162 | ```mermaid 163 | gantt 164 | dateFormat YYYY-MM-DD 165 | title Adding GANTT diagram functionality to mermaid 166 | section A section 167 | Completed task :done, des1, 2014-01-06,2014-01-08 168 | Active task :active, des2, 2014-01-09, 3d 169 | Future task : des3, after des2, 5d 170 | Future task2 : des4, after des3, 5d 171 | section Critical tasks 172 | Completed task in the critical line :crit, done, 2014-01-06,24h 173 | Implement parser and jison :crit, done, after des1, 2d 174 | Create tests for parser :crit, active, 3d 175 | Future task in critical line :crit, 5d 176 | Create tests for renderer :2d 177 | Add to mermaid :1d 178 | ``` 179 |180 | 181 | renders as 182 | 183 | ```mermaid 184 | gantt 185 | dateFormat YYYY-MM-DD 186 | title Adding GANTT diagram functionality to mermaid 187 | section A section 188 | Completed task :done, des1, 2014-01-06,2014-01-08 189 | Active task :active, des2, 2014-01-09, 3d 190 | Future task : des3, after des2, 5d 191 | Future task2 : des4, after des3, 5d 192 | section Critical tasks 193 | Completed task in the critical line :crit, done, 2014-01-06,24h 194 | Implement parser and jison :crit, done, after des1, 2d 195 | Create tests for parser :crit, active, 3d 196 | Future task in critical line :crit, 5d 197 | Create tests for renderer :2d 198 | Add to mermaid :1d 199 | ``` 200 | 201 | ### Class example 202 | 203 |
204 | ```mermaid 205 | classDiagram 206 | Class01 <|-- AveryLongClass : Cool 207 | Class03 *-- Class04 208 | Class05 o-- Class06 209 | Class07 .. Class08 210 | Class09 --> C2 : Where am i? 211 | Class09 --* C3 212 | Class09 --|> Class07 213 | Class07 : equals() 214 | Class07 : Object[] elementData 215 | Class01 : size() 216 | Class01 : int chimp 217 | Class01 : int gorilla 218 | Class08 <--> C2: Cool label 219 | ``` 220 |221 | 222 | renders as 223 | 224 | ```mermaid 225 | classDiagram 226 | Class01 <|-- AveryLongClass : Cool 227 | Class03 *-- Class04 228 | Class05 o-- Class06 229 | Class07 .. Class08 230 | Class09 --> C2 : Where am i? 231 | Class09 --* C3 232 | Class09 --|> Class07 233 | Class07 : equals() 234 | Class07 : Object[] elementData 235 | Class01 : size() 236 | Class01 : int chimp 237 | Class01 : int gorilla 238 | Class08 <--> C2: Cool label 239 | ``` 240 | 241 | ### Git example 242 | 243 |
244 | ```mermaid
245 | gitGraph:
246 | options
247 | {
248 | "nodeSpacing": 150,
249 | "nodeRadius": 10
250 | }
251 | end
252 | commit
253 | branch newbranch
254 | checkout newbranch
255 | commit
256 | commit
257 | checkout master
258 | commit
259 | commit
260 | merge newbranch
261 | ```
262 |
263 |
264 | renders as
265 |
266 | ```mermaid
267 | gitGraph:
268 | options
269 | {
270 | "nodeSpacing": 150,
271 | "nodeRadius": 10
272 | }
273 | end
274 | commit
275 | branch newbranch
276 | checkout newbranch
277 | commit
278 | commit
279 | checkout master
280 | commit
281 | commit
282 | merge newbranch
283 | ```
--------------------------------------------------------------------------------
/pipelineintegrated/chapter07/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 3-7 容器PaaS平台集成
3 | weight: 45
4 | ---
5 |
6 | {{% notice tip %}}
7 | 您好,本章我们主要讲述Jenkins与需求管理平台Jira集成。这篇文章是我根据我们当前团队的情况进行定制的,可能有些内容与大家不太一样。重点是告诉大家如何实现集成?关于细节问题可自由定制。 在这里要告诉大家的是思路。
8 | {{% /notice %}}
9 |
10 |
11 |
12 | ### 目录
13 |
14 | + [部署jenkins](#部署jenkins)
15 | + [静态slave](#静态slave)
16 | + [动态slave](#动态slave)
17 |
18 | ---
19 |
20 | 当前我做实验的集群是 v1.17.0。
21 |
22 | ### 部署jenkins
23 |
24 | 下载github仓库中的yml文件进行部署
25 | 文件地址: https://github.com/zeyangli/devops-on-k8s/blob/master/jenkins.yml
26 | 创建命令: kubectl create –f jenkins.yml
27 |
28 |
29 | 创建一个`Deployment`部署jenkins, 保留1个副本。 使用镜像`jenkins/jenkins:2.211`,开放端口30080,开发slave通信端口30081。volume以hostPath方式挂载到了容器中`JENKINS_HOME`。
30 |
31 | ```
32 | kind: Deployment
33 | apiVersion: apps/v1
34 | metadata:
35 | labels:
36 | k8s-app: jenkins
37 | name: jenkins
38 | namespace: devops
39 | spec:
40 | replicas: 1
41 | revisionHistoryLimit: 10
42 | selector:
43 | matchLabels:
44 | k8s-app: jenkins
45 | template:
46 | metadata:
47 | labels:
48 | k8s-app: jenkins
49 | namespace: devops
50 | name: jenkins
51 | spec:
52 | hostAliases:
53 | - ip: "192.168.1.200"
54 | hostnames:
55 | - "updates.jenkins-ci.org"
56 | containers:
57 | - name: jenkins
58 | image: jenkins/jenkins:2.211
59 | imagePullPolicy: Always
60 | ports:
61 | - containerPort: 30080
62 | name: web
63 | protocol: TCP
64 | - containerPort: 30081
65 | name: agent
66 | protocol: TCP
67 | resources:
68 | limits:
69 | cpu: 1000m
70 | memory: 2Gi
71 | requests:
72 | cpu: 500m
73 | memory: 512Mi
74 | livenessProbe:
75 | httpGet:
76 | path: /login
77 | port: 30080
78 | initialDelaySeconds: 60
79 | timeoutSeconds: 5
80 | failureThreshold: 12
81 | readinessProbe:
82 | httpGet:
83 | path: /login
84 | port: 30080
85 | initialDelaySeconds: 60
86 | timeoutSeconds: 5
87 | failureThreshold: 12
88 | volumeMounts:
89 | - name: jenkins-home
90 | mountPath: /var/lib/jenkins
91 | env:
92 | - name: JENKINS_HOME
93 | value: /var/lib/jenkins
94 | - name: JENKINS_OPTS
95 | value: --httpPort=30080
96 | - name: JENKINS_SLAVE_AGENT_PORT
97 | value: "30081"
98 | volumes:
99 | - name: jenkins-home
100 | hostPath:
101 | path: /data/devops/jenkins
102 | type: Directory
103 | serviceAccountName: jenkins
104 | ```
105 |
106 | 创建一个service,使用nodePort方式暴露端口
107 |
108 | ```
109 | ---
110 | kind: Service
111 | apiVersion: v1
112 | metadata:
113 | labels:
114 | k8s-app: jenkins
115 | name: jenkins
116 | namespace: devops
117 | spec:
118 | type: NodePort
119 | ports:
120 | - name: web
121 | port: 30080
122 | targetPort: 30080
123 | nodePort: 30080
124 | - name: slave
125 | port: 30081
126 | targetPort: 30081
127 | nodePort: 30081
128 | selector:
129 | k8s-app: jenkins
130 | ```
131 |
132 | 创建RBAC,授权。
133 |
134 | ```
135 | ---
136 | apiVersion: v1
137 | kind: ServiceAccount
138 | metadata:
139 | labels:
140 | k8s-app: jenkins
141 | name: jenkins
142 | namespace: devops
143 |
144 | ---
145 | kind: Role
146 | apiVersion: rbac.authorization.k8s.io/v1beta1
147 | metadata:
148 | name: jenkins
149 | namespace: devops
150 | rules:
151 | - apiGroups: [""]
152 | resources: ["pods","configmaps","namespaces"]
153 | verbs: ["create","delete","get","list","patch","update","watch"]
154 | - apiGroups: [""]
155 | resources: ["pods/exec"]
156 | verbs: ["create","delete","get","list","patch","update","watch"]
157 | - apiGroups: [""]
158 | resources: ["pods/log"]
159 | verbs: ["get","list","watch"]
160 | - apiGroups: [""]
161 | resources: ["secrets"]
162 | verbs: ["get"]
163 | ---
164 | apiVersion: rbac.authorization.k8s.io/v1beta1
165 | kind: RoleBinding
166 | metadata:
167 | name: jenkins
168 | namespace: devops
169 | roleRef:
170 | apiGroup: rbac.authorization.k8s.io
171 | kind: Role
172 | name: jenkins
173 | subjects:
174 | - kind: ServiceAccount
175 | name: jenkins
176 | namespace: devops
177 | ```
178 |
179 |
180 | ### 静态slave
181 | 静态slave是在Kubernetes中创建一个固定的pod运行,跟之前我们用VM主机添加agent是一样的。
182 | 首先我们登陆Jenkins,创建一个agent,然后获取secret信息。
183 | 
184 |
185 | 我们创建一个`Deployment`部署slave。在这里使用的镜像是`jenkinsci/jnlp-slave:3.36-1`,我在这里挂载了Docker和kubectl方便在pod中构建镜像和使用kubectl命令。挂载本地的一个目录用于workspace。 定义了环境变量`JENKINS_URL,JENKINS_SECRET,JENKINS_AGENT_NAME,JENKINS_AGENT_WORKDIR`。
186 |
187 | ```
188 | ---
189 | kind: Deployment
190 | apiVersion: apps/v1
191 | metadata:
192 | labels:
193 | k8s-app: jenkinsagent
194 | name: jenkinsagent
195 | namespace: devops
196 | spec:
197 | replicas: 1
198 | revisionHistoryLimit: 10
199 | selector:
200 | matchLabels:
201 | k8s-app: jenkinsagent
202 | template:
203 | metadata:
204 | labels:
205 | k8s-app: jenkinsagent
206 | namespace: devops
207 | name: jenkinsagent
208 | spec:
209 | containers:
210 | - name: jenkinsagent
211 | image: jenkinsci/jnlp-slave:3.36-1
212 | securityContext:
213 | privileged: true
214 | imagePullPolicy: IfNotPresent
215 | resources:
216 | limits:
217 | cpu: 1000m
218 | memory: 2Gi
219 | requests:
220 | cpu: 500m
221 | memory: 512Mi
222 | volumeMounts:
223 | - name: jenkinsagent-workdir
224 | mountPath: /home/jenkins/workspace
225 | - name: buildtools
226 | mountPath: /home/jenkins/buildtools
227 | - name: dockersock
228 | mountPath: "/var/run/docker.sock"
229 | - name: dockercmd
230 | mountPath: /usr/bin/docker
231 | - name: kubectlconfig
232 | mountPath: /home/jenkins/.kube/config
233 | - name: kubectlcmd
234 | mountPath: /usr/bin/kubectl
235 | env:
236 | - name: JENKINS_URL
237 | value: http://192.168.1.200:30080
238 | - name: JENKINS_SECRET
239 | value: 5639cac0bf16bf15735d44bc435793417365f4dfa8fc72fb12737f3787091ae8
240 | - name: JENKINS_AGENT_NAME
241 | value: build01
242 | - name: JENKINS_AGENT_WORKDIR
243 | value: /home/jenkins/workspace
244 | volumes:
245 | - name: jenkinsagent-workdir
246 | hostPath:
247 | path: /data/devops/jenkins/workspace
248 | type: Directory
249 | - name: buildtools
250 | hostPath:
251 | path: /usr/local/buildtools
252 | type: Directory
253 | - name: kubectlconfig
254 | hostPath:
255 | path: /root/.kube/config
256 | - name: kubectlcmd
257 | hostPath:
258 | path: /usr/bin/kubectl
259 | - name: dockersock
260 | hostPath:
261 | path: /var/run/docker.sock
262 | - name: dockercmd
263 | hostPath:
264 | path: /usr/bin/docker
265 | ```
266 |
267 |
268 | ### 动态slave
269 | 安装kubernetes插件(安装完成后最好重启一下)。配置插件信息 系统设置 -> 最后面 Cloud ->增加一个云。
270 |
271 |
272 | **制作Kubernetes证书**
273 |
274 | * 进入集群服务器 .kube/config
275 | * 复制config文件中的certificate-authority-data内容,生成base64文件 ca.crt
276 | * 复制config文件中的client-certificate-data内容,生成base64文件 client.crt
277 | * 复制config文件中的client-key-data内容,生成base64文件 client.key
278 | - echo zzzzzzzzz | base64 –d > client.key
279 |
280 | * 生成证书(会输入密码需要记住后面jenkins需要配置)
281 | - openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
282 | * 下载证书 cert.pfx
283 |
284 |
285 | **Jenkins新建凭据**
286 |
287 | 新建凭据 证书类型 上传刚刚下载的证书。并输入证书密码
288 | 
289 |
290 |
291 |
292 | 将ca.crt 内容复制到 服务证书key 选择证书凭据 测试连接
293 | 
294 |
295 | **编写Jenkinsfile测试**
296 |
297 | 文件地址: https://github.com/zeyangli/devops-on-k8s/blob/master/jenkinsfile/jenkinsslave.jenkinsfile
298 |
299 | 关于Jenkinsfile的写法还有一种使用`podtemplate`感觉只是对`yaml`做了包装,学习成本高于原生yaml。所以这里直接使用了`yaml`定义的。
300 |
301 | ```
302 | pipeline{
303 | agent{
304 | kubernetes{
305 | label "test01"
306 | cloud 'kubernetes'
307 | yaml '''
308 | ---
309 | kind: Pod
310 | apiVersion: v1
311 | metadata:
312 | labels:
313 | k8s-app: jenkinsagent
314 | name: jenkinsagent
315 | namespace: devops
316 | spec:
317 | containers:
318 | - name: jenkinsagent
319 | image: jenkinsci/jnlp-slave:3.36-1
320 | imagePullPolicy: IfNotPresent
321 | resources:
322 | limits:
323 | cpu: 1000m
324 | memory: 2Gi
325 | requests:
326 | cpu: 500m
327 | memory: 512Mi
328 | volumeMounts:
329 | - name: jenkinsagent-workdir
330 | mountPath: /home/jenkins/workspace
331 | - name: buildtools
332 | mountPath: /home/jenkins/buildtools
333 | env:
334 | - name: JENKINS_AGENT_WORKDIR
335 | value: /home/jenkins/workspace
336 | volumes:
337 | - name: jenkinsagent-workdir
338 | hostPath:
339 | path: /data/devops/jenkins/workspace
340 | type: Directory
341 | - name: buildtools
342 | hostPath:
343 | path: /usr/local/buildtools
344 | type: Directory
345 | '''
346 | }
347 | }
348 |
349 |
350 | stages{
351 | stage("test"){
352 | steps{
353 | script{
354 | sh "sleep 30"
355 | }
356 | }
357 | }
358 | }
359 | }
360 |
361 | ```
362 |
363 | 赶快运行一下吧! 相信你已经成功了。
364 |
365 | ---
--------------------------------------------------------------------------------
/pipelineintegrated/chapter04/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 3-4 质量管理平台集成
3 | weight: 30
4 | ---
5 |
6 |
7 | {{% notice tip %}}
8 | 您好,本章主要我们主要学习与质量管理平台Sonarqube集成。
9 | {{% /notice %}}
10 |
11 |
12 |
13 | ### 目录
14 |
15 | + [认识sonarqube](#认识sonarqube)
16 | + [sonarqube配置管理](#sonarqube配置管理)
17 | + [项目分析](#项目分析)
18 | + [自动化分析](#自动化分析)
19 | + [sonarqube接口](#sonarqube接口)
20 | + [配置多分支](#配置多分支)
21 |
22 | ---
23 |
24 | ### 认识sonarqube
25 |
26 | #### 架构
27 |
28 | * 一台SonarQube Server启动3个主要过程:
29 | - Web服务器,供开发人员,管理人员浏览高质量的快照并配置SonarQube实例
30 | - 基于Elasticsearch的Search Server从UI进行后退搜索
31 | - Compute Engine服务器,负责处理代码分析报告并将其保存在SonarQube数据库中
32 |
33 | * 一个SonarQube数据库要存储:
34 | - SonarQube实例的配置(安全性,插件设置等)
35 | - 项目,视图等的质量快照。
36 | * 服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
37 | * 在构建/持续集成服务器上运行一个或多个SonarScanner,以分析项目
38 |
39 |
40 | 
41 |
42 | #### 工作原理
43 | 开发人员在IDE开发代码,可以安装SonarLint插件进行提交前代码扫描
44 | 当开发人员提交代码到版本控制系统中,自动触发jenkins进行代码扫描
45 |
46 | 
47 |
48 |
49 | #### 版本
50 | 开源社区版、开发版、企业版、数据中心版
51 | 
52 |
53 |
54 | #### 安装
55 | 我们这里使用Docker运行一个测试的环境,可以参考博客安装
56 | 博文地址: https://www.cnblogs.com/mascot1/p/11179767.html
57 |
58 | ```bash
59 | docker run --rm -d --name sonarqube \
60 | -p 9000:9000 \
61 | -v ${LOCALDIR}/sonar/sonarqube_conf:/opt/sonarqube/conf \
62 | -v ${LOCALDIR}/sonar/sonarqube_extensions:/opt/sonarqube/extensions \
63 | -v ${LOCALDIR}/sonar/sonarqube_logs:/opt/sonarqube/logs \
64 | -v ${LOCALDIR}/sonar/sonarqube_data:/opt/sonarqube/data \
65 | sonarqube:7.9.2-community
66 | ```
67 |
68 | WEB 页面 http://127.0.0.1:9000
69 |
70 | 
71 |
72 |
73 |
74 | ### sonarqube配置管理
75 |
76 | #### 强制登录
77 | 默认所有项目都可以公开的查看,在企业内肯定要配置成私有的。只有登录后才能查看。
78 | 
79 |
80 |
81 | #### ldap集成
82 | 安装LDAP插件
83 | 
84 |
85 | 不用找了哦,页面上没有LDAP配置。需要修改sonar配置文件,然后重启服务器。
86 |
87 | ```
88 | #LDAP settings
89 | #admin
90 | sonar.security.realm=LDAP
91 | ldap.url=ldap://192.168.1.200:389
92 | ldap.bindDn=cn=admin,dc=devops,dc=com
93 | ldap.bindPassword=ldap12344
94 | #users
95 | ldap.user.baseDn=ou=jenkins,dc=devops,dc=com
96 | ldap.user.request=(&(objectClass=inetOrgPerson)(cn={login}))
97 | ldap.user.realNameAttribute=cn
98 | ldap.user.emailAttribute=mail
99 | ```
100 | #### gitlab认证集成
101 |
102 | 安装GitlabAuth插件
103 | 
104 |
105 | 在gitlab中创建一个应用 系统设置 应用管理,填写`http://sonarserver:9000/oauth2/callback/gitlab`
106 |
107 | 
108 | 
109 |
110 |
111 | 接下来在sonarqube中配置gitlab信息。这个真的有图形页面,可以直接配置。主要填写gitlab的信息。
112 |
113 | 
114 |
115 | 登录时出现此选项表明成功了
116 | 
117 |
118 |
119 | #### github认证集成
120 | 安装GithubAuth插件
121 | 
122 |
123 |
124 | 在github中创建一个应用 系统设置 应用管理,填写`http://sonarserver:9000/oauth2/callback`
125 |
126 | 
127 |
128 | 接下来在sonarqube中配置
129 | 
130 |
131 | 最终效果
132 | 
133 |
134 |
135 | ### 项目分析
136 |
137 | #### 安装配置sonarscanner
138 | 下载地址:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
139 |
140 | 
141 |
142 | ```
143 | tar zxf sonar-scanner-xxxx.tar.gz -C /usr/local
144 |
145 | vim /etc/profile
146 |
147 | export SCANNER_HOME=/usr/local/sonar-scannerxxx
148 | export PATH=$PATH:$SCANNER_HOME/bin
149 |
150 | source /etc/profile
151 | ```
152 |
153 |
154 | #### 本地分析项目
155 |
156 | `sonar.projectKey` 指定项目的关键字,`sonar.host.url`指定服务器地址(可以直接在配置文件中写死),`projectName`指定项目的名称, `projectVersion`指定项目的版本(可以用构建时间和构建ID定义),`login`指定登录用户名,`password`指定登录用户密码, `projectDescription`指定项目的描述信息, `links.homepage`指定项目的主页(超链接), `sources`指定扫描的目录, `sourceEncoding`指定扫描时的编码, `java.binaries`指定编译后的类文件目录(必填), `java.test.binaries`指定编译后的测试类目录,`java.surefire.report`指定测试报告目录。
157 |
158 | ```bash
159 | sonar-scanner -Dsonar.host.url=http://192.168.1.200:9000 \
160 | -Dsonar.projectKey=demo-maven-service \
161 | -Dsonar.projectName=demo-maven-service \
162 | -Dsonar.projectVersion=1.0 \
163 | -Dsonar.login=admin \
164 | -Dsonar.password=admin \
165 | -Dsonar.ws.timeout=30 \
166 | -Dsonar.projectDescription="my first project!" \
167 | -Dsonar.links.homepage=http://www.baidu.com \
168 | -Dsonar.sources=src \
169 | -Dsonar.sourceEncoding=UTF-8 \
170 | -Dsonar.java.binaries=target/classes \
171 | -Dsonar.java.test.binaries=target/test-classes \
172 | -Dsonar.java.surefire.report=target/surefire-reports
173 | ```
174 |
175 |
176 | ### 自动化分析
177 |
178 | 在jenkins中安装插件`sonarqube scanner` 配置SonarQube服务器:登录Jenkins,然后转到“ 管理Jenkins”>“配置系统”。
179 | 向下滚动到SonarQube配置部分,单击Add SonarQube,然后添加提示您的值。
180 | 服务器身份验证令牌应创建为“机密文本”凭据。
181 |
182 | 
183 |
184 |
185 | 首先我们在共享库中定义一个sonarqube.groovy,用与扫描。新建文件`src/org/devops/sonarqube.groovy` 在这里我们定义了一个服务器列表,用于选择本次扫描使用的服务器(存在多个sonar的时候很有用处) 使用`withSonarQubeEnv`使用在Jenkins中配置sonar环境。这个方法有5个参数`服务器类型、项目名称、项目描述、项目扫描路径、分支名称`。
186 |
187 |
188 | ```
189 | package org.devops
190 |
191 |
192 | //scan
193 | def SonarScan(sonarServer,projectName,projectDesc,projectPath,branchName){
194 |
195 | //定义sonar服务器列表
196 | def servers = ["test":"sonarqube-test","prod":"sonarqube-prod"]
197 |
198 | //使用sonar服务器
199 | withSonarQubeEnv("${servers[sonarServer]}"){
200 |
201 | def scannerHome = "/home/jenkins/buildtools/sonar-scanner-3.2.0.1227-linux/"
202 | def sonarDate = sh returnStdout: true, script: 'date +%Y%m%d%H%M%S'
203 | sonarDate = sonarDate - "\n"
204 |
205 | sh """
206 | ${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=${projectName} \
207 | -Dsonar.projectName=${projectName} -Dsonar.projectVersion=${sonarDate} -Dsonar.ws.timeout=30 \
208 | -Dsonar.projectDescription=${projectDesc} -Dsonar.links.homepage=http://www.baidu.com \
209 | -Dsonar.sources=${projectPath} -Dsonar.sourceEncoding=UTF-8 -Dsonar.java.binaries=target/classes \
210 | -Dsonar.java.test.binaries=target/test-classes -Dsonar.java.surefire.report=target/surefire-reports -Dsonar.branch.name=${branchName} -X
211 | """
212 | }
213 | }
214 |
215 | ```
216 |
217 | 在Jenkinsfile中引用: 我们首先加载`jenkinslibrary`共享库,引用`sonarqube.groovy`。
218 |
219 | ```#!groovy
220 |
221 | @Library('jenkinslibrary@master') _
222 |
223 | //func from shareibrary
224 | def sonar = new org.devops.sonarqube()
225 |
226 |
227 | pipeline {
228 | agent any
229 |
230 | stages {
231 | stage("codescan"){
232 | steps{
233 | script{
234 | sonar.SonarScan("test","${JOB_NAME}","${JOB_NAME}","src")
235 | }
236 | }
237 | }
238 | }
239 |
240 | }
241 | ```
242 | 效果:此时流水线运行完成后,在项目中可以看到Sonarqube的链接。点击即可进入sonarqube
243 | 
244 |
245 | 项目的扫描结果
246 | 
247 | 
248 |
249 |
250 |
251 |
252 |
253 | ### sonarqube接口
254 | 根据sonar官方的文档获取接口使用详情。
255 |
256 | ```
257 | //查找项目
258 | api/projects/search?projects=${projectName}"
259 |
260 | //创建项目
261 | api/projects/create?name=${projectName}&project=${projectName}"
262 |
263 | //更新语言规则集
264 | api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"
265 |
266 | //项目授权
267 | api/permissions/apply_template?projectKey=${projectKey}&templateName=${templateName}"
268 |
269 | //更新质量阈
270 | api/qualitygates/select?projectKey=${projectKey}&gateId=${gateId}"
271 |
272 | ```
273 |
274 |
275 | 封装到共享库中`sonarapi.groovy`
276 |
277 | ```
278 | package org.devops
279 |
280 |
281 | //封装HTTP
282 |
283 | def HttpReq(reqType,reqUrl,reqBody){
284 | def sonarServer = "http://192.168.1.200:30090/api"
285 |
286 | result = httpRequest authentication: 'sonar-admin-user',
287 | httpMode: reqType,
288 | contentType: "APPLICATION_JSON",
289 | consoleLogResponseBody: true,
290 | ignoreSslErrors: true,
291 | requestBody: reqBody,
292 | url: "${sonarServer}/${reqUrl}"
293 | //quiet: true
294 |
295 | return result
296 | }
297 |
298 |
299 | //获取Sonar质量阈状态
300 | def GetProjectStatus(projectName){
301 | apiUrl = "project_branches/list?project=${projectName}"
302 | response = HttpReq("GET",apiUrl,'')
303 |
304 | response = readJSON text: """${response.content}"""
305 | result = response["branches"][0]["status"]["qualityGateStatus"]
306 |
307 | //println(response)
308 |
309 | return result
310 | }
311 |
312 | //搜索Sonar项目
313 | def SerarchProject(projectName){
314 | apiUrl = "projects/search?projects=${projectName}"
315 | response = HttpReq("GET",apiUrl,'')
316 |
317 | response = readJSON text: """${response.content}"""
318 | result = response["paging"]["total"]
319 |
320 | if(result.toString() == "0"){
321 | return "false"
322 | } else {
323 | return "true"
324 | }
325 | }
326 |
327 | //创建Sonar项目
328 | def CreateProject(projectName){
329 | apiUrl = "projects/create?name=${projectName}&project=${projectName}"
330 | response = HttpReq("POST",apiUrl,'')
331 | println(response)
332 | }
333 |
334 | //配置项目质量规则
335 |
336 | def ConfigQualityProfiles(projectName,lang,qpname){
337 | apiUrl = "qualityprofiles/add_project?language=${lang}&project=${projectName}&qualityProfile=${qpname}"
338 | response = HttpReq("POST",apiUrl,'')
339 | println(response)
340 | }
341 |
342 |
343 | //获取质量阈ID
344 | def GetQualtyGateId(gateName){
345 | apiUrl= "qualitygates/show?name=${gateName}"
346 | response = HttpReq("GET",apiUrl,'')
347 | response = readJSON text: """${response.content}"""
348 | result = response["id"]
349 |
350 | return result
351 | }
352 |
353 | //配置项目质量阈
354 |
355 | def ConfigQualityGates(projectName,gateName){
356 | gateId = GetQualtyGateId(gateName)
357 | apiUrl = "qualitygates/select?gateId=${gateId}&projectKey=${projectName}"
358 | response = HttpReq("POST",apiUrl,'')
359 | println(response)println(response)
360 | }
361 |
362 | ```
363 |
364 |
365 | 应用实践:
366 |
367 | ```
368 | stage("QA"){
369 | steps {
370 | script{
371 | //搜索项目
372 | result = sonarapi.SerarchProject("${JOB_NAME}")
373 | println(result)
374 |
375 | //判断项目是否存在
376 | if (result == "false"){
377 | println("${JOB_NAME}---项目不存在,准备创建项目---> ${JOB_NAME}!")
378 | sonarapi.CreateProject("${JOB_NAME}")
379 | } else {
380 | println("${JOB_NAME}---项目已存在!")
381 | }
382 |
383 | //配置项目质量规则
384 | qpName="${JOB_NAME}".split("-")[0] //Sonar%20way
385 | sonarapi.ConfigQualityProfiles("${JOB_NAME}","java",qpName)
386 |
387 | //配置质量阈
388 | sonarapi.ConfigQualityGates("${JOB_NAME}",qpName)
389 |
390 | //代码扫描
391 | sonar.SonarScan("test","${JOB_NAME}","${JOB_NAME}","src")
392 |
393 |
394 | sleep 30
395 | //获取扫描结果
396 | result = sonarapi.GetProjectStatus("${JOB_NAME}")
397 |
398 |
399 | println(result)
400 | if (result.toString() == "ERROR"){
401 | error " 代码质量阈错误!请及时修复!"
402 | } else {
403 | println(result)
404 | }
405 | }
406 | }
407 | }
408 |
409 |
410 | ```
411 |
412 |
413 | ### 配置多分支
414 |
415 | 将插件放到两个目录中,然后重启sonar
416 |
417 | 
418 |
419 | 扫描参数增加 –Dsonar.branch.name=
420 | 
421 |
422 | 效果
423 | 
424 |
425 |
426 |
427 | ---
--------------------------------------------------------------------------------
/pipelineintegrated/chapter03/_index.en.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 3-3 版本控制系统集成
3 | weight: 25
4 | ---
5 |
6 |
7 | {{% notice tip %}}
8 | 您好,本章主要我们主要学习与版本控制系统Gitlab的集成,例如:配置提交流水线和合并流水线。
9 | {{% /notice %}}
10 |
11 |
12 |
13 | ### 目录
14 |
15 | + [提交流水线](#提交流水线)
16 | - [配置jenkins](#配置jenkins)
17 | - [配置gitlab](#配置gitlab)
18 | + [提交流水线优化](#提交流水线优化)
19 | - [分支名称自动替换](#分支名称自动替换)
20 | - [增加构建描述信息](#增加构建描述信息)
21 | - [变更commit状态](#变更commit状态)
22 | - [构建失败邮件通知](#构建失败邮件通知)
23 | - [过滤特殊push请求](#过滤特殊push请求)
24 | + [合并流水线](#合并流水线)
25 |
26 | ---
27 |
28 | ### 提交流水线
29 | 当Gitlab中触发push操作,则触发相对应的Jenkins流水线构建。实现快速反馈与验证。
30 |
31 | * 方式1: 使用Gitlab CI,当有push请求,在CI脚本中远程触发Jenkins项目构建。
32 | - 需要准备Gitlab runner
33 | - 编写触发Jenkins脚本
34 | * 方式2: 使用Gitlab WebHook,当有push请求,直接触发jenkins项目构建。【采用】
35 | - 需要配置Gitlab webHook
36 | - 需要配置Jenkins项目Hook
37 |
38 | #### 配置jenkins
39 |
40 | 首先我们准备一个能够构建成功的流水线项目(暂且不设置复杂的步骤,helloworld即可)
41 | 
42 |
43 | 编辑项目配置: 我们要使用`Generic Webhook Trigger`触发器,需要安装插件。这触发器非常灵活,推荐使用。
44 |
45 | 
46 |
47 | 开启`Generic Webhook Trigger`触发器,添加一个请求参数runOpts `Request parameters` 。我们定义这个参数是为了对构建做个标识。辨别手动触发构建与提交构建。配置一个`token`默认我使用的是项目的名称,必须唯一,否则在配置了相同的token的项目都会被触发。`Print post content`用于展示请求日志,`Print contributed variables`展示我们在post中获取的变量内容。
48 |
49 | 
50 |
51 | 配置完成后: 我们生成一个触发URL
52 |
53 | 
54 | `http://JENKINS_URL/generic-webhook-trigger/invoke?token=demo-maven-service_PUSH&runOpts=GitlabCI`
55 |
56 |
57 | #### 配置gitlab
58 | 我们找到要配置提交触发构建的项目,设置->集成,勾选`Push Events`
59 | 
60 |
61 | {{% notice info %}}
62 | 配置完成,这时候我们进行提交代码,会发现已经能够正常触发项目构建了。如果出现了问题,我们重点检查jenkins的项目触发URL和网络权限问题。
63 | {{% /notice %}}
64 |
65 |
66 | ### 提交流水线优化
67 |
68 | #### 分支名称自动替换
69 | 当我们在任意分支提交的时候,Jenkins需要获取我们提交的分支进行构建。而不是固定的分支。
70 |
71 | 增加获取hook参数 分支名称变量 `Post content parameters`. `$`指的是在Gitlab系统中`push`操作触发后发送给Jenkins的数据。(这个数据包含谁提交的、提交的分支、提交的id等信息)。而`$.ref`是解析这个json格式的数据,获取其中的`ref`也就是提交的分支名称。
72 | 
73 |
74 | 查看下面这段jenkinsfile,你会发现`branch`变量就是上面我们在触发器中配置的,它的原始内容是`refs/heads/master`,因为我们在下载代码的时候不需要前面`refs/heads/`内容,所以去掉了。此时可以重复在不通的分支提交代码,当在构建日志中出现了不通的分支名称,则成功了。
75 |
76 | ```
77 | branchName = branch - "refs/heads/"
78 |
79 | //pipeline
80 | pipeline{
81 | agent { node { label "build"}}
82 | stages{
83 |
84 | stage("CheckOut"){
85 | steps{
86 | script{
87 | println("${branchName}")
88 | }
89 | }
90 | }
91 | }
92 | }
93 | ```
94 |
95 | #### 增加构建描述信息
96 | 别忘了我们在前面构建触发器中配置了`runOpts`参数,这个参数我们用于区分不通的构建触发方式(手动、提交触发)。 这时候我们可以结合`currendBuild.description`配置。
97 |
98 | 为了更加明显我们可以在触发器中再添加一个参数,用户获取提交的用户。
99 |
100 | 
101 |
102 | 然后我们来完善一下上面的Jenkinsfile,如下:
103 |
104 | ```
105 | branchName = branch - "refs/heads/"
106 | currentBuild.description = "Trigger by ${userName} ${branch}"
107 |
108 | //pipeline
109 | pipeline{
110 | agent { node { label "build"}}
111 | stages{
112 |
113 | stage("CheckOut"){
114 | steps{
115 | script{
116 | println("${branchName}")
117 | }
118 | }
119 | }
120 | }
121 | }
122 | ```
123 |
124 | 改好了之后,我们可以进行调试了。当你在项目的构建记录中看到下图信息,表名成功了。
125 |
126 | 
127 |
128 |
129 | #### 变更commit状态
130 | 其实,Gitlab自身的GitlabCI很好用,能够根据流水线的状态设置当前提交的状态。而我们使用Jenkins也是可以完成这样的配置。这个需要我们去研究Gitlab的API。先看下效果吧!
131 | 
132 |
133 | 开始配置: 需要研究[Gitlab的Pipeline接口文档](https://docs.gitlab.com/ee/api/commits.html#post-the-build-status-to-a-commit) 关于gitlab中pipeline的状态有:[pending, running, success, failed, canceled] 。 接口地址为`projects/${projectId}/statuses/${commitSha}?state=state`。
134 |
135 | 搞清楚了上面这些,我们在共享库中进行封装就很简单了。 开始吧!可以看到我们还需要一些信息例如:`projectId`gitlab项目的ID,`commitSha`提交的id。我们该如何获取呢? 对的,没错我们根据上面的操作一样获取。 首先在触发器添加两个参数`projectId`,`commitSha`,分别对应项目Id和提交Id。 `$.project.id`,`$.checkout_sha`
136 | 
137 |
138 | ok!很好,我们接下来在共享库创建一个文件`src/org/devops/gitlab.groovy`,这个文件用与后续的Gitlab操作。然后我们在jenkins中添加一个凭据用户存储Gitlab的token,这里我定义的凭据名称是`gitlab-token` 。我们首先使用`httpRequest`封装请求Gitlab的API地址,然后使用`withCredentials`获取Jenkins中的凭据`gitlab-token`赋值给变量`gitlabToken`用于认证使用。
139 |
140 | ```
141 | package org.devops
142 |
143 | //封装HTTP请求
144 | def HttpReq(reqType,reqUrl,reqBody){
145 | def gitServer = "http://192.168.1.200:30088/api/v4"
146 | withCredentials([string(credentialsId: 'gitlab-token', variable: 'gitlabToken')]) {
147 | result = httpRequest customHeaders: [[maskValue: true, name: 'PRIVATE-TOKEN', value: "${gitlabToken}"]],
148 | httpMode: reqType,
149 | contentType: "APPLICATION_JSON",
150 | consoleLogResponseBody: true,
151 | ignoreSslErrors: true,
152 | requestBody: reqBody,
153 | url: "${gitServer}/${reqUrl}"
154 | //quiet: true
155 | }
156 | return result
157 | }
158 | ```
159 | {{% notice info %}}
160 | 如果上面的内容你有点看不懂了,嘿嘿,先放放。你可以去了解下关于HTTP请求相关基础知识了。
161 | {{% /notice %}}
162 |
163 |
164 | 我们开始添加变更提交状态的方法(记住我们现在还在gitlab.groovy文件中哦),我们定义一个`ChangeCommitStatus()`方法,具有三个参数分别为项目ID、提交ID、提交状态 `projectId`,`commitSha`,`status`。然后使用我们上面封装好的方法发送`POST`请求。
165 |
166 | ```
167 | //更改提交状态
168 | def ChangeCommitStatus(projectId,commitSha,status){
169 | commitApi = "projects/${projectId}/statuses/${commitSha}?state=${status}"
170 | response = HttpReq('POST',commitApi,'')
171 | println(response)
172 | return response
173 | }
174 | ```
175 |
176 | 到此我们在共享库的配置就完成了,接下来在Jenkinsfile中引用并进行调试。首先我们先加载了共享库`jenkinslibrary` 然后引用了gitlab.groovy。当流水线开始运行的时候我们将当前这次提交的状态为`running`运行中状态,当流水线构建成功我们会把状态变为`success`,当流水线失败了或者被取消了我们会将状态变为`failed`,`canceled`。
177 |
178 | ```
179 | #!groovy
180 |
181 | @Library('jenkinslibrary@master') _
182 |
183 | //func from shareibrary
184 | def gitlab = new org.devops.gitlab()
185 |
186 | //branch
187 | branchName = branch - "refs/heads/"
188 | currentBuild.description = "Trigger by ${userName} ${branch}"
189 | gitlab.ChangeCommitStatus(projectId,commitSha,"running")
190 |
191 |
192 | //pipeline
193 | pipeline{
194 | agent { node { label "build"}}
195 | stages{
196 |
197 | stage("CheckOut"){
198 | steps{
199 | script{
200 | println("${branchName}")
201 | }
202 | }
203 | }
204 | }
205 |
206 | post {
207 | always{
208 | script{
209 | println("always")
210 | }
211 | }
212 |
213 | success{
214 | script{
215 | println("success")
216 | gitlab.ChangeCommitStatus(projectId,commitSha,"success")
217 |
218 | }
219 |
220 | }
221 | failure{
222 | script{
223 | println("failure")
224 | gitlab.ChangeCommitStatus(projectId,commitSha,"failed")
225 |
226 | }
227 | }
228 |
229 | aborted{
230 | script{
231 | println("aborted")
232 | gitlab.ChangeCommitStatus(projectId,commitSha,"canceled")
233 | }
234 |
235 | }
236 |
237 | }
238 |
239 | }
240 | ```
241 |
242 | 如果调试没有问题,那么此时你可以登录gitlab系统当前项目的分支的提交的状态了!但是你是否觉得还差点什么? 如果开发人员提交了,然后流水线自动执行了,最后失败了怎么办? 要求开发人员放下工作实时去看?我觉得发送一个通知会更好一些! 例如邮件通知。好吧,开始配置!
243 |
244 | #### 构建失败邮件通知
245 | 首先要为每个开发人员分配一个邮箱,并且要在Gitlab中填写好。登录个人用户进行配置哦!没错,在这里配置邮箱的意义就是方便后面我们在jenkins中过滤获取。当然如果公司邮箱具有特征:用户名@xxx.com。就不用配置了因为前面已经获取的用户名。当然很多时候不是这样的,所以我们有必要把这个配置好。
246 |
247 | 
248 |
249 | 配置好邮箱之后,我们需要在Jenkins中配置邮件通知和项目配置。我们在项目中触发器添加一个参数`userEmail`。
250 |
251 | 
252 |
253 | Jenkins需要配置邮件通知,安装插件`Email Extension`,然后进入系统管理-> `系统设置` ->`Extended E-email Notification`。这里我使用的是QQ邮箱,填写SMTP服务器地址`smtp.qq.com` 和端口 `465`注意要开启SSL,密码为授权码。
254 |
255 | 
256 |
257 | 邮件通知的功能很重要,我们要为每条流水线都加上这个步骤,我们在共享库中封装一个`toemail.groovy`。 新建文件`src/org/devops/toemail.groovy`。在这个文件中,我们写了一段HTML代码,主要展示Jenkins的构建信息。
258 |
259 | ```
260 | package org.devops
261 |
262 | //定义邮件内容
263 | def Email(status,emailUser){
264 | emailext body: """
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 | 275 | 构建信息 276 | |
277 |
280 |
|
288 |