Hướng dẫn tạo Job Jenkins qua API Jenkins

Hướng dẫn tạo Job Jenkins qua API JenkinsCuongquach.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.

tao-job-jenkins-qua-api-jenkins
tao-job-jenkins-qua-api-jenkins

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.
lấy token_api user jenkins
lấy token_api user 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/

Previous articleCaptcha là gì ? Vai trò của Captcha
Next articleVPN có thể làm được gì cho người dùng ?
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !