OpenShift - Derleme Otomasyonu

OpenShift'te, derleme işlem hattını otomatikleştirmek için birden fazla yöntemimiz var. Bunu yapmak için, derleme akışını açıklamak üzere bir BuildConfig kaynağı oluşturmamız gerekir. BuildConfig'teki akış, Jenkins iş tanımındaki iş tanımıyla karşılaştırılabilir. Derleme akışını oluştururken, derleme stratejisini seçmeliyiz.

BuildConfig Dosyası

OpenShift'te BuildConfig, API'ye bağlanmak ve ardından yeni bir örnek oluşturmak için kullanılan bir dinlenme nesnesidir.

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'te dört tür derleme stratejisi vardır.

  • Kaynaktan görüntüye stratejisi
  • Docker stratejisi
  • Özel strateji
  • Boru hattı stratejisi

Kaynaktan Resme Stratejisi

Kaynak koddan başlayarak kapsayıcı görüntüleri oluşturmaya izin verir. Bu akışta, asıl kod önce kapta indirilir ve sonra onun içinde derlenir. Derlenen kod aynı kap içinde dağıtılır ve görüntü bu koddan oluşturulur.

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

Birden fazla strateji politikası var.

  • Forcepull
  • Artımlı Derlemeler
  • Dış Yapılar

Docker Stratejisi

Bu akışta OpenShift, görüntüyü oluşturmak ve ardından oluşturulan görüntüleri Docker kayıt defterine yüklemek için Dockerfile'ı kullanır.

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

Docker dosyası seçeneği, dosya yolundan başlayarak, önbellek olmadan ve zorla çekmeden başlayarak birden çok konumda kullanılabilir.

  • Resimden
  • Dockerfile yolu
  • Önbellek yok
  • Çekmeye zorla

Özel Strateji

Bu, farklı inşa stratejisi türlerinden biridir, burada yapının çıktısının bir görüntü olacağı gibi bir zorlama yoktur. Jenkins'in serbest stil işi ile karşılaştırılabilir. Bununla Jar, rpm ve diğer paketleri oluşturabiliriz.

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

Birden fazla inşa stratejisinden oluşur.

  • Docker soketini açığa çıkarın
  • Secrets
  • Çekmeye zorla

Boru Hattı Stratejisi

Ardışık düzen stratejisi, özel derleme ardışık düzenleri oluşturmak için kullanılır. Bu, temelde iş akışını boru hattında uygulamak için kullanılır. Bu derleme akışı, Groovy DSL dilini kullanarak özel derleme ardışık düzeni akışını kullanır. OpenShift, Jenkins'te bir ardışık düzen işi oluşturacak ve yürütecektir. Bu işlem hattı akışı, Jenkins'te de kullanılabilir. Bu stratejide Jenkinsfile kullanıyoruz ve bunu buildconfig tanımına ekliyoruz.

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>