Hướng dẫn tạo Job Jenkins qua API Jenkins – Cuongquach.com | Với bài viết này chúng ta sẽ tìm hiểu làm cách nào để tự động hoá việc khởi tạo một Job mới trên dịch vụ Jenkins thông qua Jenkins API. Nhu cầu này phát sinh khi bạn muốn tạo một số Job tự động build project rồi thời gian sau tự xoá Job đó đi.

1. Lấy file config Job Jenkins
Một Job Item Jenkins sẽ lưu tất cả các cấu hình mà bạn đã khởi tạo và quy định, ở file tên là ‘config.xml‘. Bạn có thể truy cập file này qua WebUI hoặc qua local máy chủ Jenkins.
Để lấy được file cấu hình job ‘config.xml‘ mà bạn đã tạo trên UI, từ đó bạn thể dùng để khởi tạo một Job mới, thì bạn có thể query bằng Postman hoặc xài lệnh ‘curl‘ đơn giản với cú pháp sau :
# curl -X GET https://domain.com/job/<job-name>/config.xml -u username:API_TOKEN -o <name>.xml
Các thông số cần lưu ý:
- username : username dùng để đăng nhập Jenkins.
- API_TOKEN : token API của user Jenkins bạn sử dụng để đăng nhập Jenkins.
- <job-name> : tên Job của bạn.
Phần API_TOKEN bạn có thể khởi tạo thông tin ở phần sau :
- Bấm vào tên user ở góc trên phải giao diện quản lý Jenkins.
- Vào phần : “Configure” > “API Token” > “Add new token“
- Khởi tạo ra chuỗi Token API mà user đó có thể sử dụng để tương tác API Jenkins.

Khi đã có đầy đủ thông tin thì bạn có thể query lấy thông tin cấu hình một Job Jenkins trong file ‘config.xml‘.
# curl -X GET https://jenkins.cuongquachlab.com/job/WebApp-Main/config.xml -u cuongqc:12345678123456782c7ba4435aaa2345 -o webapp-main.xml
Sau đó chúng ta chỉnh sửa lại file ‘webapp-main.xml‘ theo nhu cầu mới của chúng ta.
# cp webapp-main.xml new-webapp-main.xml # vi new-webapp-main.xml <?xml version='1.1' encoding='UTF-8'?> <flow-definition plugin="workflow-job@2.32"> <description></description> <keepDependencies>false</keepDependencies> <properties> <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/> <org.jenkinsci.plugins.workflow.job.properties.DisableResumeJobProperty/> <com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.12"> <gitLabConnection>Bitbucket.org</gitLabConnection> </com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty> <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty> <triggers> <hudson.triggers.SCMTrigger> <spec>H/15 * * * *</spec> <ignorePostCommitHooks>false</ignorePostCommitHooks> </hudson.triggers.SCMTrigger> </triggers> </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty> </properties> <definition class="org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition" plugin="workflow-cps@2.67"> <scm class="hudson.plugins.git.GitSCM" plugin="git@3.9.3"> <configVersion>2</configVersion> <userRemoteConfigs> <hudson.plugins.git.UserRemoteConfig> <url>https://bitbucket.org/cuongquach/webapp-main.git</url> <credentialsId>devops.bitbucket.git</credentialsId> </hudson.plugins.git.UserRemoteConfig> </userRemoteConfigs> <branches> <hudson.plugins.git.BranchSpec> <name>*/jenkins</name> </hudson.plugins.git.BranchSpec> </branches> <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations> <submoduleCfg class="list"/> <extensions/> </scm> <scriptPath>Jenkinsfile</scriptPath> <lightweight>false</lightweight> </definition> <triggers/> <disabled>false</disabled> </flow-definition>
2. Tạo Job Jenkins qua Jenkins API
Chúng ta sử dụng file ‘new-webapp-main.xml‘ mới chỉnh sửa theo thông tin mong muốn, khởi tạo Job Jenkins mới qua API Jenkins. Đầu tiên bạn cần lấy giá trị ‘crumb‘ của Jenkins, giá trị thông tin này được Jenkins sử dụng để phòng chống lỗi bảo mật CSRF.
# CRUMB="$(curl -s 'https://jenkins.cuongquachlab.com/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' -u cuongqc:12345678123456782c7ba4435aaa2345)" # echo $CRUMB Jenkins-Crumb:f8127ac91d189237341d80cb3f1j87fa
Cuối cùng chúng ta khởi tạo một request POST với dữ liệu từ file ‘new-webapp-main.xml‘, mình đặt tên Job mới là ‘NewJobName-CuongQuach‘
# curl -X POST 'https://jenkins.cuongquachlab.com/createItem?name=NewJobName-CuongQuach' -u cuongqc:12345678123456782c7ba4435aaa2345 --data-binary @new-job-item.xml -H "$CRUMB" -H "Content-Type:text/xml"
Sau khi chạy lệnh trên thì ta sẽ thấy được Job đó trên Jenkins UI.
Nguồn: https://cuongquach.com/