αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD

αž€αŸ’αž“αž»αž„αž‘αžŸαŸ’αžŸαžœαžαŸ’αžŸαžšαŸαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡ αž€αžΆαžšαž‡αžΏαž“αž›αžΏαž“αž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž‡αžΆαž”αž“αŸ’αž (Continuous Integration, CI) αž“αž·αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‡αžΆαž”αž“αŸ’αž (Continuous Delivery, CD)αŸ” αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (Development Operations, DevOps) αž”αžΆαž“αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž“αŸƒαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸ CI/CD αŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž›αž˜αŸ’αž’αž₯αžαžˆαž”αŸ‹αžˆαžš αžŠαŸ„αž™αž–αŸ’αž™αžΆαž™αžΆαž˜αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆ αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžΆαž“αžΆαž‚αž»αžŽαž—αžΆαž– (Quality Assurance, QA) αž•αž›αž·αžαž•αž›αžαŸ’αž˜αžΈαŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ†αž–αž»αž„αž›αŸαž…αž‘αžΎαž„αž₯αžαžˆαž”αŸ‹αžˆαžšαŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαžŸαž˜αŸ’αž”αžΌαžšαž”αŸ‚αž” αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž§αž”αž€αžšαžŽαŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αž·αž…αŸ’αž…αž€αžΆαžšαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ„αŸ‡αž‘αŸαŸ”

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD

αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž§αž”αž€αžšαžŽαŸ CI/CD αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž–αžΈαžšαžŠαŸ‚αž›αž–αž·αžαž‡αžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž…αŸ†αž–αŸ„αŸ‡αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αŸ’αžœαžΈαž˜αž½αž™αž–αžΈαžαŸ†αž”αž“αŸ‹αž“αŸαŸ‡αŸ” αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ Jenkins αž“αž·αž„αž§αž”αž€αžšαžŽαŸ GitLab CI / CD αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžœαŸαž‘αž·αž€αžΆ GitLab αŸ” Jenkins αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ 16000 αž•αŸ’αž€αžΆαž™αž“αŸ…αž›αžΎ GitHub αŸ” αžƒαŸ’αž›αžΆαŸ†αž„ GitLab αž“αŸ…αž›αžΎ gitlab.com αž‘αž‘αž½αž›αž”αžΆαž“αž–αž·αž“αŸ’αž‘αž»αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž“αŸαŸ‡αž”αž“αŸ’αžαž·αž… 2000 αž•αŸ’αž€αžΆαž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αž“αŸ„αŸ‡ αžœαžΆαž”αž„αŸ’αž αžΆαž‰αžαžΆ Jenkins αž‘αž‘αž½αž›αž”αžΆαž“αž•αŸ’αž€αžΆαž™ 8 αžŠαž„αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αžœαŸαž‘αž·αž€αžΆ αžŠαŸ‚αž›αžšαž½αž˜αž˜αžΆαž“ GitLab CI / CD αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž§αž”αž€αžšαžŽαŸ CI / CD αž“αŸαŸ‡αž‚αžΊαž“αŸ…αž†αŸ’αž„αžΆαž™αž–αžΈαžŸαžΌαž…αž“αžΆαž€αžšαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αŸ” αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž αžΎαž™αž“αŸαŸ‡αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž…αŸ’αžšαžΎαž“ Jenkins αž“αž·αž„ GitLab CI/CD αž‚αžΊαž“αŸ…αž‡αž·αžαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ”

αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αžŸαžΌαž˜αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžœαŸαž‘αž·αž€αžΆ G2 αžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰αž“αŸƒαž•αž›αž·αžαž•αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘ αž“αž·αž„αž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜ JenkinsαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™ 288 αž‚αžΊ 4,3 αž•αŸ’αž€αžΆαž™αŸ” ធូ ធូ GitLab αž˜αžΆαž“αž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž…αŸ†αž“αž½αž“ 270 αž€αžΆαžšαžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž‚αžΊαž•αŸ’αž€αžΆαž™ 4,4 αŸ” αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž…αŸ’αžšαž‘αŸ†αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž“αž·αž™αžΆαž™αžαžΆ Jenkins αž“αž·αž„ GitLab CI/CD αž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆαŸ” αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‚αž˜αŸ’αžšαŸ„αž„ Jenkins αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2011 αž αžΎαž™αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž–αŸαž›αž“αŸ„αŸ‡αž˜αž€αžœαžΆαž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž…αžΌαž›αž…αž·αžαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ αž‚αž˜αŸ’αžšαŸ„αž„ GitLab CI / CD αžŠαŸ‚αž›αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2014 αž”αžΆαž“αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αžαŸ†αžŽαŸ‚αž„αžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αž‚αžΊαžαŸ’αž–αžŸαŸ‹αžŽαžΆαžŸαŸ‹ αžŠαŸ„αž™αžŸαžΆαžšαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αžšαž”αžŸαŸ‹ Jenkins αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαŸαž‘αž·αž€αžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž™αžΎαž„αž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹αžαžΆαž™αžΎαž„αž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αžŠαŸ‚αž›αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžœαŸαž‘αž·αž€αžΆ Travis CI αž“αž·αž„ Jenkins αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αž˜αž½αž™αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 85 αž“αžΆαž€αŸ‹αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αžœαžΆαŸ” αž’αŸ’αž“αž€αž†αŸ’αž›αžΎαž™αžŸαŸ†αžŽαž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αž“αžΎαž±αŸ’αž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž§αž”αž€αžšαžŽαŸ CI/CD αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž…αžΌαž›αž…αž·αžαŸ’αžαž”αŸ†αž•αž»αžαŸ” 79% αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Jenkins 5% αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Travis CI αž αžΎαž™ 16% αž”αž„αŸ’αž αžΆαž‰αžαžΆαž–αž½αž€αž‚αŸαž…αžΌαž›αž…αž·αžαŸ’αžαž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD
αž›αž‘αŸ’αž’αž•αž›αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αž

αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž§αž”αž€αžšαžŽαŸ CI/CD αž•αŸ’αžŸαŸαž„αž‘αŸ€αž GitLab CI/CD αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ†αž•αž»αžαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž…αŸ†αž–αŸ„αŸ‡ DevOps αž“αŸ„αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αžŸαž˜αžŸαŸ’αžšαž”αžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“ αžŠαŸ„αž™αž‚αž·αžαž‚αžΌαžšαž–αžΈαž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ αžαžœαž·αž€αžΆ αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αž‘αŸ€αžαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž‡αž˜αŸ’αžšαžΎαžŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› Jenkins αž“αž·αž„ GitLab CI/CD αŸ” αž“αŸαŸ‡αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž‡αž˜αŸ’αžšαžΎαžŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈ Jenkins

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD
Jenkins αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸ CI/CD αžŠαŸαž›αŸ’αž”αžΈ αž“αž·αž„αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž‚αž˜αŸ’αžšαŸ„αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” Jenkins αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„ Java αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ MIT αŸ” αžœαžΆβ€‹αž˜αžΆαž“β€‹αžŸαŸ†αžŽαž»αŸ†β€‹αž›αž€αŸ’αžαžŽαŸˆβ€‹αž–αž·αžŸαŸαžŸβ€‹αžŠαŸβ€‹αž˜αžΆαž“β€‹αž₯αž‘αŸ’αž’αž·αž–αž›β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž‚αŸ„αž›β€‹αž”αŸ†αžŽαž„β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜β€‹αž—αžΆαžšαž€αž·αž…αŸ’αž…β€‹αžŠαŸ‚αž›β€‹αž‘αžΆαž€αŸ‹αž‘αž„β€‹αž“αžΉαž„β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαž αž€αžΆαžšβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„ αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αž–αž„αŸ’αžšαžΆαž™ αž€αžΆαžšβ€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž”αž‰αŸ’αž…αŸαž‰β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αžŸαŸαž„αŸ—αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžšαž½αž˜αž˜αžΆαž“ macOS, Windows, αž“αž·αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΌαž…αž‡αžΆ OpenSUSE, Ubuntu, αž“αž·αž„ Red HatαŸ” αž˜αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ†αž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Jenkins αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ OS αž•αŸ’αžŸαŸαž„αŸ— αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎ Docker αž“αž·αž„αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“ JRE (Java Runtime Environment)αŸ”

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Jenkins αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž‘αŸ€αžαž‚αžΊ Jenkins X αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸ Kubernetes αŸ” Jenkins X αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› Helm, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Jenkins CI/CD, Kubernetes αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžš CI/CD αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹ DevOps αŸ” αž§αž‘αžΆαž αžšαžŽαŸ GitOps αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”

αž˜αž“αž»αžŸαŸ’αžŸαž˜αŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αžšαžαž“αžΆαž‚αžΆαžšαž“αŸƒαž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹ Jenkins αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž›αŸ’αž’αžŽαžΆαžŸαŸ‹αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αžΆαž“αŸ” αž€αŸ’αžšαž»αž˜ Jenkins αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž”αŸ’αžšαž αŸ‚αž› 1000 αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ†αžŽαž„αžšαŸ€αž”αž…αŸ†αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹ Jenkins αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘αŸ” αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž·αž‘αž•αŸ’αžŸαŸαž„αŸ—αŸ”

αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž”αŸ†αž–αž„αŸ‹ Jenkins αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž„αŸ’αž€αŸαžαž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‡αŸ†αž αžΆαž“αž“αžΈαž˜αž½αž™αŸ— αžαžΆαžαžΎαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž¬αž’αžαŸ‹αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžŠαŸ„αž™αž˜αž·αž“αž”αŸ’αžšαžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžΎαžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹αžŸαŸ’αžαžΆαž“αžΈαž™αŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸƒ Jenkins

αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž›αŸ’αž”αžΈαŸ—αžšαž”αžŸαŸ‹ Jenkins αž‚αžΊαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αžŸαŸαž„αŸ— αž“αž·αž„αž―αž€αžŸαžΆαžšαžŠαŸαž›αŸ’αž’αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ DevOps αž“αŸ„αŸ‡ Jenkins αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“ αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‡αžΆαž€αŸ’αž”αž½αž“ αžœαžΆαž˜αž·αž“αžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžšαžŽαžΈαž‡αžΆαž˜αž½αž™αž§αž”αž€αžšαžŽαŸ CI/CD αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸαŸ” αž…αžΌαžšαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž›αž€αŸ’αžαžŽαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž˜αž½αž™αž…αŸ†αž“αž½αž“αžšαž”αžŸαŸ‹ Jenkins αŸ”

▍ ៑. αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž–αž αž»αžœαŸαž‘αž·αž€αžΆ

Jenkins αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎ macOS, Windows αž“αž·αž„ Linux platformsαŸ” αžœαžΆαž€αŸαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸ Docker αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αž―αž€αžŸαžŽαŸ’αž‹αžΆαž“ αž“αž·αž„αžšαž αŸαžŸαž“αŸƒαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž€αŸαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆ servlet αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αžΎαž€αžŠαŸ„αž™ Java αžŠαžΌαž…αž‡αžΆ Apache Tomcat αž“αž·αž„ GlassFish αŸ” αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Jenkins αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž‚αž»αžŽαž—αžΆαž– αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž―αž€αžŸαžΆαžš.

▍ ្. αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Jenkins αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž˜αžΆαž“αž—αžΆαž–αž…αžΆαžŸαŸ‹αž‘αž»αŸ†αž‡αžΆαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸ CI/CD αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‡αžΆαž„ 1500 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Jenkins αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαŸ„αž™αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž‚αž˜αŸ’αžšαŸ„αž„αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αžΆαž“αž“αŸαž™αžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ Jenkins αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αž·αž‰αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž“αŸ„αŸ‡αž‘αŸαŸ” αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž˜αž½αž™αŸ” αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› Jenkins αž‡αžΆαž˜αž½αž™αž§αž”αž€αžšαžŽαŸ DevOps αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

▍ ៣. αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž“αž·αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›

Jenkins αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αž‘αž“αŸ’αž‘αžΉαž˜αž“αžΉαž„αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž€αŸαž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž•αž„αžŠαŸ‚αžšαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž‡αžΆαžαŸ’αž˜αžΈαž˜αŸ’αžαž„αž‘αŸ€αž αžœαžΆαž‚αžΊαž˜αžΆαž“αžαŸ†αž›αŸƒαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž‚αž»αžŽαž—αžΆαž–αž“αŸƒαž―αž€αžŸαžΆαžš αž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž…αž˜αŸ’αž›αžΎαž™αž…αŸ†αž–αŸ„αŸ‡αžŸαŸ†αžŽαž½αžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Jenkins αŸ”

▍ ៀ. αžŸαž αž‚αž˜αž“αŸαž˜αž·αžαŸ’αžαž—αžΆαž–

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαž½αž…αž˜αž€αž αžΎαž™ Jenkins αž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αŸ” αžŸαž αž‚αž˜αž“αŸαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸαž’αŸ†αž˜αž½αž™αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž‡αž»αŸ†αžœαž·αž‰ Jenkins αžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž’αž—αž·αžœαžŒαŸ’αžαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αžŸαž αž‚αž˜αž“αŸαž‚αžΊαž‡αžΆαž€αžαŸ’αžαžΆαž˜αž½αž™αžŠαŸ‚αž›αž‡αŸ†αžšαž»αž‰αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžšαž”αžŸαŸ‹ Jenkins αŸ”

▍ αŸ₯. αž—αžΆαž–αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸƒ REST API

αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Jenkins αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ REST API αžŠαŸ‚αž›αž–αž„αŸ’αžšαžΈαž€αžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” API αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž”αžΈαž€αŸ†αžŽαŸ‚αŸ– XML, JSON αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš JSONP, Python αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž‘αŸ†αž–αŸαžšαž―αž€αžŸαžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Jenkins REST API αŸ”

▍ ៦. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž…

Jenkins αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž… DevOps αŸ” αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’ αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž’αŸ†αž–αžΈαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž€αžΌαžŠαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž›αžΏαž“αžŠαŸ„αž™αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ”

▍ ៧. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž…αŸ‚αž€αž…αžΆαž™

Jenkins αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž…αŸ’αžšαžΎαž“αŸ” αž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž’αŸ†αŸ— αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αžΆαžšαž„αžΆαžš αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αžŠαŸ‚αž›αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Jenkins αž˜αž½αž™ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž‘αžΆαžŸαž€αžšαž€αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž€αŸ†αžŽαžαŸ‹ Jenkins αžαž»αžŸαž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈ GitLab

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD
GitLab CI/CD αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž§αž”αž€αžšαžŽαŸ DevOps αžαŸ’αž˜αžΈαž”αŸ†αž•αž»αž αž“αž·αž„αž‡αžΆαž‘αžΈαž–αŸαž‰αž…αž·αžαŸ’αžαž”αŸ†αž•αž»αžαŸ” αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ†αžŽαŸ‚ GitLab αŸ” αžœαŸαž‘αž·αž€αžΆ GitLab αž˜αžΆαž“αž€αŸ†αžŽαŸ‚αžŸαž αž‚αž˜αž“αŸ αžœαžΆαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžƒαŸ’αž›αžΆαŸ†αž„ αž§αž”αž€αžšαžŽαŸαžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆ αž’αž„αŸ’αž‚αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž€αžΌαžŠ αž™αž“αŸ’αžαž€αžΆαžšαžαž˜αŸ’αžšαž„αŸ‹αž‘αž·αžŸαž―αž€αžŸαžΆαžšαŸ” αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž“αžΆαž“αžΆαž’αžΆαž…αžŠαŸ†αž‘αžΎαž„ GitLab αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€ αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αžœαžΆαž‘αŸ… Active Directory αž“αž·αž„ LDAP servers αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”

αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αžœαžΈαžŠαŸαž’αžΌαžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž’αŸ’αž“αž€αžšαŸ€αž“αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž”αŸ†αž–αž„αŸ‹ CI/CD αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαž˜αžαŸ’αžαž—αžΆαž– GitLab CI/CD αŸ”

GitLab CI/CD αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŠαŸ†αž”αžΌαž„αž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž―αž€αžšαžΆαž‡αŸ’αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž†αŸ’αž“αžΆαŸ† 2015 αžŸαŸ†αžŽαž»αŸ†αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ GitLab 8.0 αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ GitLab CI/CD αžαŸ‚αž˜αž½αž™αž’αžΆαž…αž‚αžΆαŸ†αž‘αŸ’αžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž„ 25000 αž“αžΆαž€αŸ‹αŸ” αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ‚αž”αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αžαŸ’αž–αžŸαŸ‹αŸ”

GitLab CI/CD αž“αž·αž„αž‚αž˜αŸ’αžšαŸ„αž„ GitLab αžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ Ruby and GoαŸ” αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ MIT αŸ” GitLab CI/CD αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž˜αž»αžαž„αžΆαžšαž’αž˜αŸ’αž˜αžαžΆαž“αŸƒαž§αž”αž€αžšαžŽαŸ CI/CD αž€αŸαž‚αžΆαŸ†αž‘αŸ’αžšαž˜αž»αžαž„αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž•αž„αžŠαŸ‚αžš αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αŸ”

αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› GitLab CI/CD αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αŸ” αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ GitLab CI/CD αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ…αž‡αžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αžŠαŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αž’αžΆαž…αž˜αžΆαž“αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž—αžΆαžšαž€αž·αž…αŸ’αž…αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαŸ”

αž€αž·αž…αŸ’αž…αž€αžΆαžšαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αžšαŸ€αž”αž…αŸ†β€‹αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αž“αŸƒβ€‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αž“αž·αž„β€‹αž€αž·αž…αŸ’αž…αž€αžΆαžš αž”αŸ†αž–αž„αŸ‹ CI/CD αžαŸ’αžšαŸ€αž˜β€‹αžαŸ’αž›αž½αž“β€‹αž‡αžΆβ€‹αžŸαŸ’αžšαŸαž…αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžαžΆαž˜αžŠαžΆαž“αžœαžŒαŸ’αžαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αžαžΆαž˜αžŠαžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ GitLab CI / CD αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹ αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž„αž§αž”αž€αžšαžŽαŸαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸƒ GitLab CI / CD αž“αž·αž„ GitLab

GitLab CI/CD αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸ DevOps αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαž˜αž½αž™αŸ” αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž‚αž»αžŽαž—αžΆαž–αžαŸ’αž–αžŸαŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž‘αžΆαž“αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹ GitLab CI/CD αž“αŸ„αŸ‡αž”αž‰αŸ’αž‡αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸƒαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž“αžΌαžœαž‚αŸ†αž“αž·αžαž‘αžΌαž‘αŸ…αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžšαŸ†αž–αžΉαž„αž–αžΈαžœαžΆαŸ” αžœαžΆαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžœαŸαž‘αž·αž€αžΆ GitLab αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αžŠαŸ‚αž› GitLab CI / CD αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αŸ”

▍ ៑. αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–

GitLab CI/CD αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžαŸ’αž˜αžΈαž˜αž½αž™αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αŸ” GitLab CI/CD αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž§αž”αž€αžšαžŽαŸ CI/CD αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž˜αž½αž™αž™αŸ‰αžΆαž„αž™αžΊαžαŸ— αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž“αž·αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αžœαžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αŸ” αžœαžΆαž€αŸαž‡αžΆαž§αž”αž€αžšαžŽαŸ CI/CD αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž‘αž·αž€αžΆ GitLab αŸ”

▍ ្. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αŸαžš GitLab αž“αž·αž„ Jekyll

Jekyll αž‚αžΊαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαž‚αŸαž αž‘αŸ†αž–αŸαžšαž‹αž·αžαž·αžœαž“αŸ’αžαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ GitLab Pages αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžƒαŸ’αž›αžΆαŸ†αž„ GitLab αŸ” αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž™αž€αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž”αŸ’αžšαž—αž– αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž‚αŸαž αž‘αŸ†αž–αŸαžšαž‹αž·αžαž·αžœαž“αŸ’αžαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αž½αž€αžœαžΆαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžšαžΌαž”αžšαžΆαž„ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαž‚αŸαž αž‘αŸ†αž–αŸαžšαž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ„αž™αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžš _config.ymlαž”αŸ’αžšαžΎαžŠαŸ„αž™ Jekyll αŸ”

▍ ៣. αžŸαž˜αžαŸ’αžαž—αžΆαž–αž’αŸ’αžœαžΎαž•αŸ‚αž“αž€αžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαžŠαž›αŸ‹αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž•αŸ‚αž“αž€αžΆαžšαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆ αž“αž·αž„αž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž€αžΎαž“αž‘αžΎαž„αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž„αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αžšαŸ€αž”αž…αŸ†αž•αŸ‚αž“αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αžαŸ’αž„αŸƒαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ”

▍ ៀ. αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž’αŸ’αž“αž€αžšαžαŸ‹ CI

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαžŠαž›αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž’αŸ’αž“αž€αžšαžαŸ‹αž”αŸ’αžšαžŽαžΆαŸ†αž„αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž„αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž“αŸ’αžŸαŸ†αž”αžΆαž“αž…αŸ’αžšαžΎαž“αž›αžΎαž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž›αžΎαž€αžΆαžšαž‡αž½αž›αžŸαž˜αžαŸ’αžαž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž“αŸαŸ‡αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž–αŸαž›αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ‚αž›αž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž’αŸ†αŸ—αžŠαŸ‚αž›αž˜αžΆαž“αžƒαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

▍ αŸ₯. αž§αž”αž€αžšαžŽαŸαžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆ

αžŸαž˜αžαŸ’αžαž—αžΆαž–αžαžΆαž˜αžŠαžΆαž“αž”αž‰αŸ’αž αžΆαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αžšαž”αžŸαŸ‹ GitLab αž”αžΆαž“αžŠαžΉαž€αž“αžΆαŸ†αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αŸ” GitLab CI/CD αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαžŸαžΆαžαžΆαž€αžΌαžŠαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αž›αž‘αŸ’αž’αž•αž›αžαŸαžŸαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžœαž·αž—αžΆαž‚αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ” αžœαžΆαž€αŸ†αžŽαžαŸ‹ GitLab CI/CD αž€αŸ’αžšαŸ…αž–αžΈ Jenkins αŸ”

▍ ៦. αž€αžΆαžšαžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„

αžœαŸαž‘αž·αž€αžΆ GitLab αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€β€‹αžŠαŸ‚αž›β€‹αžŸαž αž€αžΆαžšβ€‹αž›αžΎβ€‹αž‚αž˜αŸ’αžšαŸ„αž„β€‹αž€αŸ’αž“αž»αž„β€‹αžƒαŸ’αž›αžΆαŸ†αž„β€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž•αŸ’αžαž›αŸ‹β€‹αžŸαž·αž‘αŸ’αž’αž·β€‹αž±αŸ’αž™β€‹αžŸαž˜αžŸαŸ’αžšαž”β€‹αž“αžΉαž„β€‹αžαž½αž“αžΆαž‘αžΈβ€‹αžšαž”αžŸαŸ‹β€‹αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαž–αž·αžαž‡αžΆαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžŸαžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αŸ”

▍ ៧. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž αž‚αž˜αž“αŸαžŸαž€αž˜αŸ’αž˜

αžŸαž αž‚αž˜αž“αŸαžŸαž€αž˜αŸ’αž˜αž˜αž½αž™αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž‡αž»αŸ†αžœαž·αž‰ GitLab αžŠαŸ‚αž›αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αžŠαž›αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αžœαžΆ αž‡αžΆαž–αž·αžŸαŸαžŸ GitLab CI/CD αŸ” αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αžŸαŸŠαžΈαž‡αž˜αŸ’αžšαŸ…αž“αŸƒ GitLab CI/CD αž“αž·αž„ GitLab αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžšαž”αžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž…αž˜αŸ’αž›αžΎαž™αž…αŸ†αž–αŸ„αŸ‡αžŸαŸ†αžŽαž½αžšαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ GitLab CI/CD αŸ”

▍ ៨. αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αŸ†αžŽαŸ‚αž•αŸ’αžŸαŸαž„αŸ—

GitLab CI/CD αž‚αžΊαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž€αžΌαžŠαžŠαŸ‚αž›αž”αž„αŸ’αž αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ GitLab αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΌαžŠαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ GitHub αž αžΎαž™αž”αŸ†αž–αž„αŸ‹ CI/CD αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž“αŸ…αž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ GitLab αžŠαŸ„αž™αž”αŸ’αžšαžΎ GitLab CI/CD αŸ”

αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” Jenkins αž“αž·αž„ GitLab CI/CD

Jenkins αž“αž·αž„ GitLab CI/CD αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž›αŸ’αž’αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ αžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ†αž–αž„αŸ‹ CI/CD αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžšαž›αžΌαž“αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž–αž½αž€αž‚αŸαžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž–αž½αž€αž‚αŸαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž…αŸ’αžšαžΎαž“αž€αŸαžŠαŸ„αž™αž€αŸαž–αž½αž€αž‚αŸαžαž»αžŸαž‚αŸ’αž“αžΆαž–αžΈαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αžαžΆαž˜αžœαž·αž’αžΈαžαŸ’αž›αŸ‡αŸ”

Π₯арактСристика
Jenkins
GitLab CI/CD

αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž¬αž”αŸ’αžšαž—αž–αž”αž·αž‘
αž”αŸ’αžšαž—αž–β€‹αž”αžΎαž€β€‹αž…αŸ†αž 
αž”αŸ’αžšαž—αž–β€‹αž”αžΎαž€β€‹αž…αŸ†αž 

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹
αž‘αžΆαž˜αž‘αžΆαžšαŸ”
αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αž–αŸ’αžšαŸ„αŸ‡β€‹αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž›αž€αŸ’αžαžŽαŸˆβ€‹αž–αž·αžŸαŸαžŸβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžŸαŸ’αžšαžΆαž”αŸ‹β€‹αž“αŸƒβ€‹αžœαŸαž‘αž·αž€αžΆ GitLabαŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž”αŸ’αž›αŸ‚αž€
αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αŸ”
αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αžŸαŸŠαžΈαž‡αž˜αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ†αžŽαŸ‚αŸ”

αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš
αž”αžΆαžαŸ‹αŸ”
αž˜αžΆαž“αŸ”

αž€αžΆαžšαžαŸ†αž‘αžΎαž„αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’
αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž˜αž·αž“αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™
αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž˜αž·αž“αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™

αž€αžΆαžšαžŠαžΆαž€αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”
αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ”
αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž CI/CD Pipelines
αž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš αžŠαŸ„αž™αž”αŸ’αžšαžΎ Jenkins Pipeline αŸ”
αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ
αž”αžΆαžαŸ‹αŸ”
αž˜αžΆαž“αŸ”

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž‘αžΌαžŸαŸŠαžΈ
αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‡αžΆαž„ 1000 αŸ”
αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ GitLab αŸ”

αž€αžΆαžš API
αž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’ API αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αŸ”
αž•αŸ’αžαž›αŸ‹ API αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸŠαžΈαž‡αž˜αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš JavaScript
αž˜αžΆαž“αŸ”
αž˜αžΆαž“αŸ”

αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž§αž”αž€αžšαžŽαŸ αž“αž·αž„αžœαŸαž‘αž·αž€αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš (Slack, GitHub) αŸ”
αž§αž”αž€αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ αž‡αžΆαž–αž·αžŸαŸαžŸ - αž‡αžΆαž˜αž½αž™ GitHub αž“αž·αž„ Kubernetes αŸ”

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αž»αžŽαž—αžΆαž–αž€αžΌαžŠ
αž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš - αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ SonarQube αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„ Jenkins αž“αž·αž„ GitLab CI/CD

αžŠαŸ„αž™αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆ αž“αž·αž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž” Jenkins αž“αž·αž„ GitLab CI/CD αž…αžΌαžšαž™αžΎαž„αž•αŸ’αžαŸ„αžαž›αžΎαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž§αž”αž€αžšαžŽαŸ DevOps αž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αž€αžΆαžšαžŠαžΉαž„αž–αžΈαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αž™αž›αŸ‹αž–αžΈαž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αžΌαž›αž…αž·αžαŸ’αžαž§αž”αž€αžšαžŽαŸαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‡αžΆαž„αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

  • GitLab CI/CD αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžƒαŸ’αž›αžΆαŸ†αž„ Git αž™αŸ‰αžΆαž„αž–αŸαž‰αž›αŸαž‰αŸ” αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαžΆαžαžΆαžƒαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ€αžαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚ Jenkins αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžƒαŸ’αž›αžΆαŸ†αž„αž€αŸαžŠαŸ„αž™αž€αŸαžœαžΆαž˜αž·αž“αž•αŸ’αžαž›αŸ‹αž€αž˜αŸ’αžšαž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αžΎαž–αž½αž€αžœαžΆαžŠαžΌαž…αž‡αžΆ GitLab CI / CD αžŠαŸ‚αžšαŸ”
  • Jenkins αž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ” αž’αŸ’αž“αž€αžŠαŸ‚αž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžœαžΆαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžœαžΆαžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™αŸ” αž αžΎαž™ GitLab CI / CD αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž‘αž·αž€αžΆ GitLab αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ turnkey αŸ”
  • GitLab CI/CD αž‚αžΆαŸ†αž‘αŸ’αžšαž§αž”αž€αžšαžŽαŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž—αžΆαžšαž€αž·αž…αŸ’αž…αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αž˜αŸ’αžšαž·αžαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž•αŸ’αž“αŸ‚αž€αžαžΆαž„ Jenkins αž˜αž·αž“αžŸαžΌαžœαž˜αžΆαž“αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αŸαŸ”

Jenkins αž“αž·αž„ GitLab CI/CD: αž…αŸ†αžŽαž»αž…αžαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž…αŸ†αžŽαž»αž…αžαŸ’αžŸαŸ„αž™

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž˜αžΆαž“αž‚αŸ†αž“αž·αžαžαŸ’αž›αŸ‡αŸ—αž’αŸ†αž–αžΈ Jenkins αž“αž·αž„ GitLab CI/CD αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ„αž™αž’αŸ’αž“αž€αžŸαŸ’αž‚αžΆαž›αŸ‹αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž…αŸ†αžŽαž»αž…αžαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž…αŸ†αžŽαž»αž…αžαŸ’αžŸαŸ„αž™αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž™αžΎαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžšαž½αž…αž αžΎαž™αžαžΆαžαžΎαž§αž”αž€αžšαžŽαŸαž˜αž½αž™αžŽαžΆαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŸαžΆαž€αž›αŸ’αž”αž„αžαŸ’αž›αž½αž“αž―αž„αŸ”

▍ αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αžšαž”αžŸαŸ‹ Jenkins

  • αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αŸ”
  • αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαž‰αž›αŸαž‰αž›αžΎαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž§αž”αž€αžšαžŽαŸαŸ”
  • αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸαžŸαžΆαž˜αž‰αŸ’αž‰αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžšαžαŸ‹αŸ”
  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžαŸ’αž“αžΆαŸ†αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ”
  • αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αž±αŸ’αž™β€‹αž”αŸ’αžšαžΎβ€‹αž€αžΌαžŠβ€‹αž„αžΆαž™β€‹αžŸαŸ’αžšαž½αž›β€‹αŸ”
  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž›αŸ’αž’αžŽαžΆαžŸαŸ‹αŸ”
  • αž—αžΆαž–αž”αžαŸ‹αž”αŸ‚αž“αž“αž·αž„αž—αžΆαž–αž”αžαŸ‹αž”αŸ‚αž“αŸ”
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ—αŸ”
  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αž“αŸ…αž€αž˜αŸ’αžšαž·αžαžœαž·αž…αžΆαžšαžŽαž‰αžΆαžŽαŸ”

▍ αž—αžΆαž–αž‘αž“αŸ‹αžαŸ’αžŸαŸ„αž™αžšαž”αžŸαŸ‹ Jenkins

  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž’αžΆαž…αž–αž·αž”αžΆαž€αž”αŸ’αžšαžΎαŸ”
  • αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ Jenkins αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžαžΌαž…αŸ— αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαžΆαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž’αžΆαž…αž˜αžΆαž“αž‘αŸ†αž αŸ†αž’αŸ†αž˜αž·αž“αžŸαž˜αž αŸαžαž»αž•αž›αŸ”
  • αž€αž„αŸ’αžœαŸ‡αž–αŸαžαŸŒαž˜αžΆαž“αžœαž·αž—αžΆαž‚αž‘αžΌαž‘αŸ…αž›αžΎαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹ CI/CD αŸ”

▍ αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αž“αŸƒ GitLab CI/CD

  • αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžŠαŸαž›αŸ’αž’αž‡αžΆαž˜αž½αž™ Docker αŸ”
  • αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸƒαž’αŸ’αž“αž€αžšαžαŸ‹αŸ”
  • αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž…αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžš CI/CD αŸ”
  • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ†αžšαžΌαž€αŸ’αžšαžΆαž αŸ’αžœ acyclic αžŠαŸ‚αž›αžŠαžΉαž€αž“αžΆαŸ†αž“αŸ…αž–αŸαž›αžšαŸ€αž”αž…αŸ†αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ”
  • αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž’αŸ’αž“αž€αžšαžαŸ‹αŸ”
  • αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαžšαž€αž·αž…αŸ’αž…αŸ”
  • αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αžŸαžΆαž˜αž‰αŸ’αž‰αŸ”
  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

▍ αž…αŸ†αž“αž»αž…αžαŸ’αžŸαŸ„αž™αžšαž”αžŸαŸ‹ GitLab CI/CD

  • αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ— αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αžŽαŸŒαž“αžΆ αž“αž·αž„αž”αž„αŸ’αž αŸ„αŸ‡/αž‘αžΆαž‰αž™αž€αžœαžαŸ’αžαž»αž”αž»αžšαžΆαžŽαŸ”
  • αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž…αŸ’αžšαž”αžΆαž…αŸ‹β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‚αŸ’αž“αžΆβ€‹αž”αžΆαž“β€‹αž‘αŸ αž˜αž»αž“β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αžŸαžΆαžαžΆβ€‹αž‘αžΆαŸ†αž„β€‹αž“αŸ„αŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‚αŸ’αž“αžΆβ€‹αž™αŸ‰αžΆαž„β€‹αž–αž·αžβ€‹αž”αŸ’αžšαžΆαž€αžŠαŸ”
  • αž“αŸ…αž–αŸαž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžš CI/CD αžœαžΆαž˜αž·αž“αž‘αžΆαž“αŸ‹αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαž”αžΆαž“αž‘αŸαŸ”

αž›αž‘αŸ’αž’αž•αž›

αž‘αžΆαŸ†αž„ Jenkins αž“αž·αž„ GitLab CI/CD αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αžαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž…αŸ†αžŽαž»αž…αžαŸ’αžŸαŸ„αž™αŸ” αž…αž˜αŸ’αž›αžΎαž™αž‘αŸ…αž“αžΉαž„αžŸαŸ†αžŽαž½αžšαž“αŸƒαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžš αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž§αž”αž€αžšαžŽαŸ CI/CD αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αžαŸ’αž„αŸƒαž“αŸαŸ‡αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αŸαžŠαŸ„αž™αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ Jenkins αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž―αž€αžšαžΆαž‡αŸ’αž™ αž αžΎαž™ GitLab CI / CD αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαžœαŸαž‘αž·αž€αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž αž€αžΆαžšαž›αžΎαž€αžΌαžŠαŸ”

αž“αŸ…αž–αŸαž›αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI/CD αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆ αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž‚αž·αžαž‚αžΌαžšαž–αžΈαž€αžΆαžšαž…αŸ†αžŽαžΆαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αžΆαž€αŸ‹αž‘αž„αž‡αžΆαž˜αž½αž™αžœαžΆ αž αžΎαž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŠαŸ‚αž›αžœαž·αžŸαŸ’αžœαž€αžš DevOps αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αŸ”

αžαžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸ CI/CD αž’αŸ’αžœαžΈ?

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD

αžŸαž˜αžšαž—αžΌαž˜αž· Jenkins αž“αž·αž„ GitLab CI/CD

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹