OpenShift - สร้างระบบอัตโนมัติ

ใน OpenShift เรามีหลายวิธีในการสร้างไปป์ไลน์โดยอัตโนมัติ ในการดำเนินการดังกล่าวเราจำเป็นต้องสร้างทรัพยากร BuildConfig เพื่ออธิบายขั้นตอนการสร้าง โฟลว์ใน BuildConfig สามารถเปรียบเทียบได้กับนิยามงานในนิยามงานของเจนกินส์ ในขณะที่สร้างขั้นตอนการสร้างเราต้องเลือกกลยุทธ์การสร้าง

ไฟล์ BuildConfig

ใน OpenShift BuildConfig เป็นอ็อบเจ็กต์ที่เหลือที่ใช้เพื่อเชื่อมต่อกับ API แล้วสร้างอินสแตนซ์ใหม่

kind: "BuildConfig"
apiVersion: "v1"
metadata:
   name: "<Name of build config file>"
spec:
   runPolicy: "Serial"
   triggers:
   -
      type: "GitHub"
      github:
         secret: "<Secrete file name>"
   - type: "Generic"
   generic:
      secret: "secret101"
   -
   type: "ImageChange"
   source:
      type: "<Source of code>"
      git:
   uri: "https://github.com/openshift/openshift-hello-world"
   dockerfile: "FROM openshift/openshift-22-centos7\nUSER example"
   strategy:
      type: "Source"
      
sourceStrategy:
   from:
      kind: "ImageStreamTag"
      name: "openshift-20-centos7:latest"
   output:
      to:
         kind: "ImageStreamTag"
         name: "origin-openshift-sample:latest"
   postCommit:
      script: "bundle exec rake test"

ใน OpenShift มีกลยุทธ์การสร้างสี่ประเภท

  • กลยุทธ์ต้นทางสู่รูปภาพ
  • กลยุทธ์นักเทียบท่า
  • กลยุทธ์ที่กำหนดเอง
  • กลยุทธ์ท่อ

กลยุทธ์ที่มาสู่ภาพ

อนุญาตให้สร้างอิมเมจคอนเทนเนอร์โดยเริ่มจากซอร์สโค้ด ในขั้นตอนนี้โค้ดจริงจะถูกดาวน์โหลดก่อนในคอนเทนเนอร์จากนั้นจึงรวบรวมไว้ภายใน โค้ดที่คอมไพล์จะถูกปรับใช้ภายในคอนเทนเนอร์เดียวกันและอิมเมจถูกสร้างขึ้นจากโค้ดนั้น

strategy:
   type: "Source"
   sourceStrategy:
      from:
         kind: "ImageStreamTag"
         name: "builder-image:latest"
      forcePull: true

มีนโยบายกลยุทธ์หลายประการ

  • Forcepull
  • การสร้างที่เพิ่มขึ้น
  • งานสร้างภายนอก

กลยุทธ์นักเทียบท่า

ในขั้นตอนนี้ OpenShift ใช้ Dockerfile เพื่อสร้างภาพจากนั้นอัปโหลดภาพที่สร้างขึ้นไปยังรีจิสทรีของ Docker

strategy:
   type: Docker
   dockerStrategy:
      from:
         kind: "ImageStreamTag"
         name: "ubuntu:latest"

ตัวเลือกไฟล์ Docker สามารถใช้ได้ในหลายตำแหน่งโดยเริ่มจากเส้นทางไฟล์ไม่มีแคชและบังคับดึง

  • จากรูปภาพ
  • เส้นทาง Dockerfile
  • ไม่มีแคช
  • แรงดึง

กลยุทธ์ที่กำหนดเอง

นี่เป็นหนึ่งในกลยุทธ์การสร้างที่แตกต่างกันโดยที่ไม่มีการบังคับเช่นนี้ว่าผลลัพธ์ของงานสร้างจะเป็นภาพ เปรียบได้กับงานฟรีสไตล์ของเจนกินส์ ด้วยสิ่งนี้เราสามารถสร้าง Jar, rpm และแพ็คเกจอื่น ๆ

strategy:
   type: "Custom"
   customStrategy:
      from:
         kind: "DockerImage"
         name: "openshift/sti-image-builder"

ประกอบด้วยกลยุทธ์การสร้างหลายแบบ

  • เปิดเผยซ็อกเก็ต Docker
  • Secrets
  • แรงดึง

กลยุทธ์ท่อส่ง

กลยุทธ์ไปป์ไลน์ใช้ในการสร้างท่อส่งแบบกำหนดเอง โดยทั่วไปจะใช้เพื่อนำเวิร์กโฟลว์ไปใช้ในท่อ ขั้นตอนการสร้างนี้ใช้ขั้นตอนการสร้างแบบกำหนดเองโดยใช้ภาษา Groovy DSL OpenShift จะสร้างงานไปป์ไลน์ใน Jenkins และดำเนินการ การไหลไปป์ไลน์นี้สามารถใช้ใน Jenkins ในกลยุทธ์นี้เราใช้ Jenkinsfile และต่อท้ายด้วยคำจำกัดความ buildconfig

Strategy:
   type: "JenkinsPipeline"
   jenkinsPipelineStrategy:
   jenkinsfile: "node('agent') {\nstage 'build'\nopenshiftBuild(buildConfig: 'OpenShift-build', showBuildLogs: 'true')\nstage 'deploy'\nopenshiftDeploy(deploymentConfig: 'backend')\n}"

Using build pipeline

kind: "BuildConfig"
apiVersion: "v1"
metadata:
   name: "test-pipeline"
spec:
   source:
      type: "Git"
      git:
         uri: "https://github.com/openshift/openshift-hello-world"
   strategy:
      type: "JenkinsPipeline"
      jenkinsPipelineStrategy:
         jenkinsfilePath: <file path repository>