په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

سلام! پدې وروستیو کې ، د ډاکر عکسونو رامینځته کولو او کبرنیټس ته د ګمارلو لپاره دواړه په زړه پوري اتومات وسیلې خوشې شوي. په دې اړه، ما پریکړه وکړه چې د GitLab سره لوبې وکړم، د هغې وړتیاوې په بشپړه توګه مطالعه کړم او البته، پایپ لاین تنظیم کړئ.

دا کار د ویب پاڼې لخوا هڅول شوی kubernetes.io، کوم چې له دې څخه رامینځته کیږي سرچینې کوډونه په اتوماتيک ډول، او د هرې حوض غوښتنې لپاره لیږل شوي، روبوټ په اتوماتيک ډول ستاسو د بدلونونو سره د سایټ یو مخکتنه نسخه تولیدوي او د لیدلو لپاره لینک چمتو کوي.

ما هڅه وکړه چې ورته پروسې له سکریچ څخه رامینځته کړم ، مګر په بشپړ ډول د ګیټلاب CI او وړیا وسیلو باندې جوړ شوی چې زه یې د کبرنیټس ته د غوښتنلیکونو ځای په ځای کولو لپاره کارول کیږم. نن زه به په پای کې تاسو ته د دوی په اړه نور څه ووایم.

مقاله به د وسیلو په اړه بحث وکړي لکه:
هوګو, qbec, کانیکو, git-crypt и ګیت لیب سی آی د متحرک چاپیریال رامینځته کولو سره.

منځپانګه

  1. هوګو سره ووینئ
  2. د ډاکر فایل چمتو کول
  3. د کانیکو پیژندل
  4. د qbec پیژندل
  5. د Kubernetes-executor سره Gitlab-runner هڅه کول
  6. د qbec سره د هیلم چارټونو ځای په ځای کول
  7. د git-crypt معرفي کول
  8. د اوزار بکس انځور جوړول
  9. زموږ لومړی پایپ لاین او د ټاګونو لخوا د عکسونو مجلس
  10. د ځای پرځای کولو اتومات کول
  11. اثار او مجلس کله چې ماسټر ته فشار ورکول کیږي
  12. متحرک چاپیریالونه
  13. د ایپس بیاکتنه

1. د هوګو پیژندل

زموږ د پروژې د مثال په توګه، موږ به هڅه وکړو چې په هوګو کې د اسنادو خپرولو سایټ جوړ کړو. هوګو د جامد منځپانګې جنریټر دی.

د هغو کسانو لپاره چې د جامد جنراتورونو سره اشنا نه دي، زه به تاسو ته د دوی په اړه لږ څه ووایم. د ډیټابیس او ځینې PHP سره د دودیزو ویب پا inو انجنونو برخلاف ، کوم چې کله د کارونکي لخوا غوښتنه کیږي ، په الوتنه کې پا pagesې رامینځته کوي ، جامد جنریټرونه یو څه توپیر سره ډیزاین شوي. دوی تاسو ته اجازه درکوي سرچینې واخلئ، معمولا د مارک ډاون مارک اپ او موضوع ټیمپلیټونو کې د فایلونو سیټ، بیا یې په بشپړ ډول بشپړ شوي ویب پاڼې ته تالیف کړئ.

دا، د پایلې په توګه، تاسو به د لارښود جوړښت او د تولید شوي HTML فایلونو سیټ ترلاسه کړئ، کوم چې تاسو کولی شئ په ساده ډول هر ارزانه کوربه توب ته اپلوډ کړئ او کاري ویب پاڼه ترلاسه کړئ.

تاسو کولی شئ هوګو په ځایی توګه نصب کړئ او هڅه یې وکړئ:

د نوي سایټ پیل کول:

hugo new site docs.example.org

او په ورته وخت کې د git ذخیره:

cd docs.example.org
git init

تر دې دمه، زموږ سایټ پخوانی دی او د دې لپاره چې په دې کې یو څه ښکاره شي، موږ لومړی اړتیا لرو چې یوه موضوع وصل کړو؛ یوه موضوع یوازې د ټیمپلیټونو او مشخصو مقرراتو یوه مجموعه ده چې زموږ سایټ تولید شوی.

د موضوع لپاره موږ به وکاروو وکړئ، کوم چې زما په نظر ، د اسنادو سایټ لپاره په بشپړ ډول مناسب دی.

زه غواړم دې حقیقت ته ځانګړې پاملرنه وکړم چې موږ اړتیا نلرو د موضوع فایلونه زموږ د پروژې ذخیره کې خوندي کړو؛ پرځای یې ، موږ کولی شو په ساده ډول دا په کارولو سره وصل کړو. git submodule:

git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn

پدې توګه ، زموږ ذخیره به یوازې زموږ د پروژې پورې مستقیم اړوند فایلونه ولري ، او وصل شوی موضوع به د ځانګړي ذخیره کولو لینک په توګه پاتې شي او په دې کې ژمنتیا ، دا دی ، دا تل د اصلي سرچینې څخه ایستل کیدی شي او ویره مه کوئ. د نامناسب بدلونونو څخه.

راځئ چې تشکیلات سم کړو config.toml:

baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"

لا دمخه پدې مرحله کې تاسو کولی شئ چل کړئ:

hugo server

او په پته http://localhost:1313/ زموږ نوې جوړه شوې ویب پاڼه وګورئ، په ډایرکټر کې شوي ټول بدلونونه په اوتومات ډول په براوزر کې خلاص پاڼه تازه کوي، خورا اسانه!

راځئ هڅه وکړو چې یو پوښ پاڼه جوړه کړو content/_index.md:

# My docs site

## Welcome to the docs!

You will be very smart :-)

د نوې جوړې شوې پاڼې سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

د سایټ جوړولو لپاره، یوازې چلول:

hugo

د لارښود منځپانګې عامه/ او ستاسو ویب پاڼه به وي.
هو، په لاره کې، راځئ چې سمدلاسه یې اضافه کړو .gitignore:

echo /public > .gitignore

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .
git commit -m "New site created"

2. د Dockerfile چمتو کول

دا وخت دی چې زموږ د ذخیره کولو جوړښت تعریف کړو. زه معمولا یو څه کاروم لکه:

.
├── deploy
│   ├── app1
│   └── app2
└── dockerfiles
    ├── image1
    └── image2

  • dockerfiles/ - د ډاکر فایلونو سره لارښودونه او زموږ د ډاکر عکسونو جوړولو لپاره هرڅه اړین دي.
  • ګمارل/ - Kubernetes ته زموږ د غوښتنلیکونو ځای پرځای کولو لپاره لارښودونه لري

پدې توګه ، موږ به د لارې په اوږدو کې زموږ لومړی ډاکر فایل رامینځته کړو dockerfiles/website/dockerfile

FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src

FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]

لکه څنګه چې تاسو لیدلی شئ، ډاکر فایل دوه لري له، دا فرصت بلل کیږي څو مرحلې جوړول او تاسو ته اجازه درکوي د وروستي ډاکر عکس څخه هرڅه غیر ضروري خارج کړئ.
په دې توګه، وروستی انځور به یوازې ولري تیارهhttpd (د سپک وزن HTTP سرور) او عامه/ - زموږ په ثابت ډول تولید شوي ویب پاڼې مینځپانګه.

زموږ د بدلونونو ژمن کول مه هیروئ:

git add dockerfiles/website
git commit -m "Add Dockerfile for website"

3. د کانیکو پیژندل

د ډاکر عکس جوړونکي په توګه ، ما پریکړه وکړه چې وکاروم کانیکو، ځکه چې د دې عملیات د ډاکر ډیمون ته اړتیا نلري ، او پخپله جوړونه په هر ماشین کې ترسره کیدی شي او زیرمه په مستقیم ډول په راجسټری کې زیرمه کیدی شي ، پدې توګه د بشپړ دوامداره ذخیره کولو اړتیا له مینځه وړي.

د انځور جوړولو لپاره، یوازې کانټینر چل کړئ د کانیکو اجرا کوونکی او دا د اوسني جوړونې شرایط تیر کړئ؛ دا په محلي توګه هم ترسره کیدی شي، د ډاکر له لارې:

docker run -ti --rm 
  -v $PWD:/workspace 
  -v ~/.docker/config.json:/kaniko/.docker/config.json:ro 
  gcr.io/kaniko-project/executor:v0.15.0 
  --cache 
  --dockerfile=dockerfiles/website/Dockerfile 
  --destination=registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1

چیرته registry.gitlab.com/kvaps/docs.example.org/website - ستاسو د ډاکر عکس نوم؛ د جوړولو وروسته ، دا به په اوتومات ډول د ډاکر راجسټری کې پیل شي.

پارسيم --کیچ تاسو ته اجازه درکوي د ډاکر راجسټری کې پرتونه ذخیره کړئ؛ د مثال په توګه ورکړل شوي ، دوی به په کې خوندي شي registry.gitlab.com/kvaps/docs.example.org/website/cache، مګر تاسو کولی شئ د پیرامیټر په کارولو سره بله لاره مشخص کړئ --cache-repo.

د ډاکر-رجسټري سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

4. د qbec پیژندل

Qbec د ګمارنې وسیله ده چې تاسو ته اجازه درکوي په اعالمیه توګه ستاسو د غوښتنلیک څرګندونه تشریح کړئ او کوبرنیټس ته یې ځای په ځای کړئ. د اصلي ترکیب په توګه د Jsonnet کارول تاسو ته اجازه درکوي په ډیری چاپیریالونو کې د توپیرونو توضیحات خورا ساده کړئ ، او همدارنګه نږدې په بشپړ ډول د کوډ تکرار له مینځه وړي.

دا په ځانګړي ډول په هغه قضیو کې ریښتیني کیدی شي چیرې چې تاسو اړتیا لرئ د مختلف پیرامیټونو سره ډیری کلسترونو ته غوښتنلیک ځای په ځای کړئ او غواړئ په ګیټ کې یې په اعالمیه توګه تشریح کړئ.

Qbec تاسو ته اجازه درکوي د هیلم چارټ د اړینو پیرامیټونو په تیریدو سره چمتو کړئ او بیا یې د منظم څرګندونو په څیر کاروئ، په شمول تاسو کولی شئ په دوی کې مختلف بدلونونه پلي کړئ، او دا په پایله کې تاسو ته اجازه درکوي چې د اړتیا څخه ځان خلاص کړئ. د چارټ میوزیم وکاروئ. دا دی ، تاسو کولی شئ چارټونه په مستقیم ډول له git څخه ذخیره او وړاندې کړئ ، چیرې چې دوی تړاو لري.

لکه څنګه چې ما مخکې وویل، موږ به ټول ګمارنې په لارښود کې ذخیره کړو ګمارل/:

mkdir deploy
cd deploy

راځئ چې زموږ لومړی غوښتنلیک پیل کړو:

qbec init website
cd website

اوس زموږ د غوښتنلیک جوړښت داسې ښکاري:

.
├── components
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
└── qbec.yaml

راځئ چې فایل ته وګورو qbec.yaml:

apiVersion: qbec.io/v1alpha1
kind: App
metadata:
  name: website
spec:
  environments:
    default:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443
  vars: {}

دلته موږ په ابتدايي توګه لیوالتیا لرو spec.environments، qbec لا دمخه زموږ لپاره ډیفالټ چاپیریال رامینځته کړی او د سرور پته یې اخیستې ، او همدارنګه زموږ د اوسني کیوب کنفګ څخه د نوم ځای.
اوس کله چې ګمارل کیږي تلواله چاپیریال، qbec به تل یوازې ټاکل شوي Kubernetes کلستر او ټاکل شوي نوم ځای ته ځای په ځای کړي، دا دی، تاسو نور اړتیا نلرئ د ځای پرځای کولو لپاره د شرایطو او نوم ځایونو ترمنځ تیر کړئ.
که اړتیا وي، تاسو کولی شئ تل په دې فایل کې ترتیبات تازه کړئ.

ستاسو ټول چاپیریال په کې تشریح شوي qbec.yaml، او په دوتنه کې params.libsonnet، چیرې چې دا وايي چې چیرې د دوی لپاره پیرامیټونه ترلاسه کړئ.

بیا موږ دوه لارښودونه ګورو:

  • اجزا/ - زموږ د غوښتنلیک ټول څرګندونه به دلته زیرمه شي؛ دوی دواړه په jsonnet او منظم یامل فایلونو کې تشریح کیدی شي
  • چاپیریال/ - دلته به موږ د خپل چاپیریال لپاره ټول متغیرات (پیرامیټونه) تشریح کړو.

په ډیفالټ کې موږ دوه فایلونه لرو:

  • چاپیریال/base.libsonnet - دا به د ټولو چاپیریالونو لپاره عام پیرامیټونه ولري
  • چاپیریال/default.libsonnet - د چاپیریال لپاره له پامه غورځول شوي پیرامیټونه لري تلواله

راځئ چې خلاص کړو چاپیریال/base.libsonnet او هلته زموږ د لومړۍ برخې لپاره پیرامیټونه اضافه کړئ:

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1',
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

راځئ چې زموږ لومړۍ برخه هم جوړه کړو components/website.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.website;

[
  {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      replicas: params.replicas,
      selector: {
        matchLabels: {
          app: params.name,
        },
      },
      template: {
        metadata: {
          labels: { app: params.name },
        },
        spec: {
          containers: [
            {
              name: 'darkhttpd',
              image: params.image,
              ports: [
                {
                  containerPort: params.containerPort,
                },
              ],
            },
          ],
          nodeSelector: params.nodeSelector,
          tolerations: params.tolerations,
          imagePullSecrets: [{ name: 'regsecret' }],
        },
      },
    },
  },
  {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      selector: {
        app: params.name,
      },
      ports: [
        {
          port: params.servicePort,
          targetPort: params.containerPort,
        },
      ],
    },
  },
  {
    apiVersion: 'extensions/v1beta1',
    kind: 'Ingress',
    metadata: {
      annotations: {
        'kubernetes.io/ingress.class': params.ingressClass,
      },
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      rules: [
        {
          host: params.domain,
          http: {
            paths: [
              {
                backend: {
                  serviceName: params.name,
                  servicePort: params.servicePort,
                },
              },
            ],
          },
        },
      ],
    },
  },
]

پدې فایل کې موږ په یوځل کې درې کوبرنیټس ادارې بیان کړې ، دا دي: تعین کول, خدمت и برید. که موږ وغواړو، موږ کولی شو دوی په مختلفو برخو کې واچوو، مګر پدې مرحله کې به زموږ لپاره کافي وي.

العروض jsonnet د منظم json سره خورا ورته دی، په اصولو کې، منظم json لا دمخه د اعتبار وړ jsonnet دی، نو په لومړي سر کې ممکن ستاسو لپاره د آنلاین خدماتو کارول اسانه وي لکه yaml2json خپل معمول yaml په json بدل کړئ، یا، که ستاسو اجزا هیڅ متغیر نه لري، نو بیا دوی د منظم یامل په بڼه تشریح کیدی شي.

کله چې ورسره کار کوئ jsonnet زه ستاسو د مدیر لپاره د پلگ ان نصبولو په کلکه وړاندیز کوم

د مثال په توګه، د ویم لپاره یو پلگ ان شتون لري vim-jsonnet، کوم چې د نحو روښانه کول بدلوي او په اوتومات ډول اجرا کوي jsonnet fmt هرکله چې تاسو خوندي کړئ (د jsonnet نصب ته اړتیا لري).

هرڅه چمتو دي، اوس موږ کولی شو پلي کول پیل کړو:

د دې لپاره چې وګورو څه مو ترلاسه کړل، راځئ چې وګرځو:

qbec show default

په محصول کې، تاسو به وړاندې شوي یامل څرګندونه وګورئ چې په ډیفالټ کلستر کې به پلي شي.

عالي ، اوس غوښتنه وکړئ:

qbec apply default

په محصول کې تاسو به تل وګورئ چې ستاسو په کلستر کې به څه ترسره شي، qbec به تاسو څخه وغواړي چې د ټایپ کولو له لارې بدلونونو سره موافقه وکړي y تاسو به وکولی شئ خپل اراده تایید کړئ.

زموږ غوښتنلیک چمتو او ځای په ځای شوی دی!

که تاسو بدلونونه راوړئ، تاسو تل کولی شئ:

qbec diff default

د دې لپاره چې وګورو چې دا بدلونونه به په اوسني ځای پرځای کولو اغیزه وکړي

زموږ د بدلونونو ژمن کول مه هیروئ:

cd ../..
git add deploy/website
git commit -m "Add deploy for website"

5. د Kubernetes-executor سره Gitlab-runner هڅه کول

تر دې وروستیو پورې ما یوازې منظم کار کاوه gitlab-رنر د شیل یا ډاکر اجرا کونکي سره دمخه چمتو شوي ماشین (LXC کانټینر) کې. په پیل کې ، موږ زموږ په ګیټ لاب کې د نړۍ په کچه تعریف شوي څو داسې منډې درلودې. دوی د ټولو پروژو لپاره د ډاکر عکسونه راټول کړل.

مګر لکه څنګه چې تمرین ښودلی، دا اختیار د عملي کولو او خوندیتوب په برخه کې ترټولو غوره نه دی. دا خورا ښه او ایډیالوژیکي پلوه سمه ده چې د هرې پروژې لپاره یا حتی د هر چاپیریال لپاره جلا چلونکي ځای په ځای شوي وي.

خوشبختانه ، دا په هیڅ ډول ستونزه نده ، ځکه چې اوس به موږ ځای په ځای کړو gitlab-رنر په مستقیم ډول زموږ د پروژې د یوې برخې په توګه په Kubernetes کې.

ګیټلاب کبرنیټس ته د ګیټلاب چلونکي ګمارلو لپاره چمتو شوی هیلم چارټ چمتو کوي. نو ټول هغه څه چې تاسو یې کولو ته اړتیا لرئ هغه ومومئ د ثبت نښه زموږ د پروژې لپاره ترتیبات -> CI / CD -> چلونکي او هغه ته یې وسپاره:

helm repo add gitlab https://charts.gitlab.io

helm install gitlab-runner 
  --set gitlabUrl=https://gitlab.com 
  --set runnerRegistrationToken=yga8y-jdCusVDn_t4Wxc 
  --set rbac.create=true 
  gitlab/gitlab-runner

چیرته چې:

  • https://gitlab.com - ستاسو د Gitlab سرور پته.
  • yga8y-jdCusVDn_t4Wxc - ستاسو د پروژې لپاره د راجسټریشن نښه.
  • rbac.create=ریښتیا - رنر ته د اړین مقدار امتیازاتو سره چمتو کوي ترڅو وکولی شي پوډونه رامینځته کړي ترڅو د کبرنیټس - اجرا کونکي په کارولو سره زموږ دندې ترسره کړي.

که هرڅه په سمه توګه ترسره شوي وي، تاسو باید په برخه کې راجستر شوي رنر وګورئ رنځونه، ستاسو د پروژې ترتیباتو کې.

د اضافه شوي رنر سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

دا دومره ساده ده؟ - هو، دا خورا ساده دی! په لاسي ډول د منډو راجستر کولو سره نور هیڅ ستونزه نشته ، له اوس څخه به منډې جوړونکي په اوتومات ډول رامینځته او له مینځه ویسي.

6. د QBEC سره د هیلم چارټونه ځای په ځای کړئ

ځکه چې موږ پریکړه وکړه چې غور وکړو gitlab-رنر زموږ د پروژې برخه، دا وخت دی چې دا زموږ د Git ذخیره کې تشریح کړئ.

موږ کولی شو دا د جلا برخې په توګه تشریح کړو ویب پاڼه، مګر په راتلونکي کې موږ پلان لرو چې مختلف کاپيونه ځای په ځای کړو ویب پاڼه ډیری وختونه، برعکس gitlab-رنر، کوم چې به یوازې یو ځل په هر Kubernetes کلستر کې ځای په ځای شي. نو راځئ چې د دې لپاره یو جلا غوښتنلیک پیل کړو:

cd deploy
qbec init gitlab-runner
cd gitlab-runner

دا ځل به موږ د Kubernetes ادارې په لاسي ډول تشریح نه کړو، مګر یو چمتو شوی هیلم چارټ به واخلو. د qbec یوه ګټه دا ده چې د هیلم چارټونه مستقیم د Git ذخیره څخه وړاندې کړي.

راځئ چې دا د git submodule په کارولو سره وصل کړو:

git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner

اوس لارښود پلورونکی / gitlab-runner موږ د gitlab-runner لپاره د چارټ سره ذخیره لرو.

په ورته ډول، تاسو کولی شئ نور ذخیره وصل کړئ، د بیلګې په توګه، ټول ذخیره د رسمي چارټونو سره https://github.com/helm/charts

راځئ چې جز تشریح کړو components/gitlab-runner.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;

std.native('expandHelmTemplate')(
  '../vendor/gitlab-runner',
  params.values,
  {
    nameTemplate: params.name,
    namespace: env.namespace,
    thisFile: std.thisFile,
    verbose: true,
  }
)

لومړی دلیل expandHelmTemplate بیا موږ چارټ ته لاره تیروو params.values، کوم چې موږ د چاپیریال پیرامیټرو څخه اخلو ، بیا د اعتراض سره راځي

  • nameTemplate - د خوشې کولو نوم
  • نومځای - د نوم ځای هیلم ته لیږدول شوی
  • دا دوتنه - یو اړین پیرامیټر چې اوسني فایل ته لاره تیروي
  • وربشو - کمانډ ښیي هیلم ټیمپلیټ د ټولو دلیلونو سره کله چې چارټ وړاندې کوي

اوس راځئ چې زموږ د برخې لپاره پیرامیټونه تشریح کړو چاپیریال/base.libsonnet:

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
      },
    },
  },
}

پاملرنه وکړئ runner Registration Token موږ د بهرني فایل څخه اخلو secrets/base.libsonnet، راځئ چې دا جوړ کړو:

{
  runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}

راځئ وګورو چې ایا هرڅه کار کوي:

qbec show default

که هرڅه سم وي، نو موږ کولی شو د هیلم له لارې زموږ پخوانۍ ګمارل شوي خوشې کول حذف کړو:

helm uninstall gitlab-runner

او دا په ورته ډول ځای په ځای کړئ، مګر د qbec له لارې:

qbec apply default

7. د git-crypt پیژندنه

Git-crypt یوه وسیله ده چې تاسو ته اجازه درکوي د خپل ذخیره کولو لپاره شفاف کوډ تنظیم کړئ.

په اوس وخت کې، د gitlab-runner لپاره زموږ د لارښود جوړښت داسې ښکاري:

.
├── components
│   ├── gitlab-runner.jsonnet
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
├── qbec.yaml
├── secrets
│   └── base.libsonnet
└── vendor
    └── gitlab-runner (submodule)

مګر په ګیټ کې د رازونو ذخیره کول خوندي ندي ، ایا دا دی؟ نو موږ باید دوی په سمه توګه کوډ کړو.

معمولا، د یو متغیر لپاره، دا تل معنی نه لري. تاسو کولی شئ رازونه انتقال کړئ qbec او ستاسو د CI سیسټم د چاپیریال متغیرونو له لارې.
مګر دا د یادولو وړ ده چې دلته ډیرې پیچلې پروژې هم شتون لري چې ډیری نور رازونه لري؛ د چاپیریال تغیراتو له لارې د دوی لیږد خورا ستونزمن وي.

سربیره پردې ، پدې حالت کې زه نشم کولی تاسو ته د داسې عالي وسیلې په اړه ووایم git-crypt.

git-crypt دا پدې کې هم اسانه دی چې دا تاسو ته اجازه درکوي د رازونو ټول تاریخ خوندي کړئ ، په بیله بیا د شخړو پرتله کول ، یوځای کول او حل کول په ورته ډول لکه څنګه چې موږ د ګیټ په قضیه کې عادت شوي یو.

د نصبولو وروسته لومړی شی git-crypt موږ اړتیا لرو چې زموږ د ذخیره کولو لپاره کلیدونه تولید کړو:

git crypt init

که تاسو د PGP کیلي لرئ، نو تاسو کولی شئ سمدلاسه خپل ځان د دې پروژې لپاره د همکار په توګه اضافه کړئ:

git-crypt add-gpg-user [email protected]

پدې توګه تاسو کولی شئ تل دا ذخیره د خپل شخصي کیلي په کارولو سره ډیکریټ کړئ.

که تاسو د PGP کیلي نلرئ او تمه یې نلرئ، نو تاسو کولی شئ بلې لارې ته لاړ شئ او د پروژې کیلي صادر کړئ:

git crypt export-key /path/to/keyfile

په دې توګه، هغه څوک چې صادرات لري کیفایل ستاسو ذخیره کوونکی به وکولی شي.

دا زموږ د لومړي راز د جوړولو وخت دی.
اجازه راکړئ تاسو ته یادونه وکړم چې موږ لاهم په لارښود کې یو ځای پرځای کول/gitlab-runner/، چیرې چې موږ لارښود لرو رازونه/راځئ چې ټول فایلونه په دې کې کوډ کړو، د دې لپاره به موږ یو فایل جوړ کړو رازونه/.gitattributes د لاندې منځپانګې سره:

* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

لکه څنګه چې د مینځپانګې څخه لیدل کیدی شي ، ټولې فایلونه ماسک شوي دي * له لارې به وګرځول شي git-cryptپرته له ډیرو څخه .gitaattributes

موږ کولی شو دا په چلولو سره وګورو:

git crypt status -e

محصول به په ذخیره کې د ټولو فایلونو لیست وي د کوم لپاره چې کوډ کول فعال شوي

دا ټول، اوس موږ کولی شو په خوندي توګه خپل بدلونونه ترسره کړو:

cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"

د ذخیره کولو بندولو لپاره، یوازې چل کړئ:

git crypt lock

او سمدلاسه ټول کوډ شوي فایلونه به په بائنری شی بدل شي ، د دوی لوستل به ناممکن وي.
د ذخیره کوډ کولو لپاره، چلول:

git crypt unlock

8. د اوزار بکس انځور جوړ کړئ

د وسیلې بکس عکس د ټولو وسیلو سره یو عکس دی چې موږ به یې زموږ د پروژې پلي کولو لپاره وکاروو. دا به د ګیټلاب رنر لخوا د عادي ګمارلو دندو ترسره کولو لپاره وکارول شي.

دلته هرڅه ساده دي، راځئ چې یو نوی جوړ کړو dockerfiles/toolbox/dockerfile د لاندې منځپانګې سره:

FROM alpine:3.11

RUN apk add --no-cache git git-crypt

RUN QBEC_VER=0.10.3 
 && wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz 
     | tar -C /tmp -xzf - 
 && mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/

RUN KUBECTL_VER=1.17.0 
 && wget -O /usr/local/bin/kubectl 
      https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl 
 && chmod +x /usr/local/bin/kubectl

RUN HELM_VER=3.0.2 
 && wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz 
     | tar -C /tmp -zxf - 
 && mv /tmp/linux-amd64/helm /usr/local/bin/helm

لکه څنګه چې تاسو لیدلی شئ ، پدې عکس کې موږ ټول هغه اسانتیاوې نصب کوو چې موږ یې زموږ د غوښتنلیک ځای په ځای کولو لپاره کارولې. موږ دلته دې ته اړتیا نلرو پرته لدې چې kubectl، مګر تاسو ممکن د پایپ لاین تنظیم کولو مرحلې په جریان کې د هغې سره شاوخوا لوبې وکړئ.

همچنان ، د دې لپاره چې د کوبرنیټس سره اړیکه ونیسو او دې ته یې ځای په ځای کړو ، موږ اړتیا لرو د ګیټ لاب چلونکي لخوا رامینځته شوي پوډونو لپاره رول تنظیم کړو.

د دې کولو لپاره ، راځئ چې د gitlab-runner سره لارښود ته لاړ شو:

cd deploy/gitlab-runner

او یو نوی جز اضافه کړئ اجزاء/rbac.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.rbac;

[
  {
    apiVersion: 'v1',
    kind: 'ServiceAccount',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'Role',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    rules: [
      {
        apiGroups: [
          '*',
        ],
        resources: [
          '*',
        ],
        verbs: [
          '*',
        ],
      },
    ],
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleBinding',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    roleRef: {
      apiGroup: 'rbac.authorization.k8s.io',
      kind: 'Role',
      name: params.name,
    },
    subjects: [
      {
        kind: 'ServiceAccount',
        name: params.name,
        namespace: env.namespace,
      },
    ],
  },
]

موږ به په کې نوي پیرامیټونه هم تشریح کړو چاپیریال/base.libsonnet، کوم چې اوس داسې ښکاري:

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
        runners: {
          serviceAccountName: $.components.rbac.name,
          image: 'registry.gitlab.com/kvaps/docs.example.org/toolbox:v0.0.1',
        },
      },
    },
    rbac: {
      name: 'gitlab-runner-deploy',
    },
  },
}

پاملرنه وکړئ $.components.rbac.name ته اشاره کوي نوم د برخې لپاره rbac

راځئ وګورو چې څه بدلون راغلی:

qbec diff default

او زموږ بدلونونه په Kubernetes کې پلي کړئ:

qbec apply default

همچنان ، په git کې زموږ بدلونونه ژمن کول مه هیروئ:

cd ../..
git add dockerfiles/toolbox
git commit -m "Add Dockerfile for toolbox"
git add deploy/gitlab-runner
git commit -m "Configure gitlab-runner to use toolbox"

9. زموږ لومړی پایپ لاین او د ټاګونو په واسطه د عکسونو راټولول

د پروژې په ریښه کې به موږ جوړ کړو .gitlab-ci.yml د لاندې منځپانګې سره:

.build_docker_image:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug-v0.15.0
    entrypoint: [""]
  before_script:
    - echo "{"auths":{"$CI_REGISTRY":{"username":"$CI_REGISTRY_USER","password":"$CI_REGISTRY_PASSWORD"}}}" > /kaniko/.docker/config.json

build_toolbox:
  extends: .build_docker_image
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR/dockerfiles/toolbox --dockerfile $CI_PROJECT_DIR/dockerfiles/toolbox/Dockerfile --destination $CI_REGISTRY_IMAGE/toolbox:$CI_COMMIT_TAG
  only:
    refs:
      - tags

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_TAG
  only:
    refs:
      - tags

مهرباني وکړئ په یاد ولرئ چې موږ یې کاروو GIT_SUBMODULE_STRATEGY: نورمال د هغو دندو لپاره چیرې چې تاسو اړتیا لرئ د اجرا کولو دمخه فرعي ماډلونه په ښکاره ډول پیل کړئ.

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .gitlab-ci.yml
git commit -m "Automate docker build"

زه فکر کوم چې موږ کولی شو په خوندي ډول دا نسخه ووایو v0.0.1 او ټګ اضافه کړئ:

git tag v0.0.1

موږ به هرکله چې نوې نسخه خوشې کولو ته اړتیا ولرو ټګونه اضافه کړو. په ډاکر عکسونو کې ټاګونه به د ګیټ ټاګونو سره وتړل شي. د نوي ټګ سره هر فشار به د دې ټګ سره د عکسونو جوړول پیل کړي.

راځئ چې اعدام کړو git push --tags، او راځئ چې زموږ لومړی پایپ لاین وګورو:

د لومړي پایپ لاین سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

دا حقیقت ته ستاسو پام راجلبولو ارزښت لري چې د ټاګونو سره مجلس د ډاکر عکسونو جوړولو لپاره مناسب دی ، مګر کوبرنیټس ته د غوښتنلیک پلي کولو لپاره مناسب ندي. څنګه چې نوي ټاګونه زاړه ژمنو ته ګمارل کیدی شي ، پدې حالت کې ، د دوی لپاره د پایپ لاین پیل کول به د زاړه نسخې پلي کولو لامل شي.

د دې ستونزې د حل لپاره، معمولا د ډاکر انځورونو جوړول په ټګونو پورې تړلي دي، او د غوښتنلیک ځای پرځای کول په څانګه کې د بادار، په کوم کې چې د راټول شوي عکسونو نسخه هارډ کوډ شوي دي. دا هغه ځای دی چې تاسو کولی شئ د ساده بیرته راګرځولو سره رول بیک پیل کړئ د بادار- څانګې.

10. د ځای پرځای کولو اتومات کول

د دې لپاره چې د ګیټلاب چلونکي زموږ رازونه ډیکریټ کړي ، موږ به د ذخیره کولو کیلي صادرولو ته اړتیا ولرو او دا زموږ د CI چاپیریال متغیرونو کې اضافه کړو:

git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo

موږ به پایله شوې کرښه په ګیټلاب کې خوندي کړو؛ د دې کولو لپاره ، راځئ چې زموږ د پروژې تنظیماتو ته لاړ شو:
ترتیبات -> CI / CD -> تغیرات

او راځئ چې یو نوی متغیر جوړ کړو:

ډول
کلیدي
ارزښت
خوندي شوی
نقشه
حدود

File
GITCRYPT_KEY
<your string>
true (د روزنې په جریان کې تاسو کولی شئ false)
true
All environments

د اضافه شوي متغیر سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

اوس راځئ چې خپل تازه کړو .gitlab-ci.yml اضافه کول:

.deploy_qbec_app:
  stage: deploy
  only:
    refs:
      - master

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes

deploy_website:
  extends: .deploy_qbec_app
  script:
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes

دلته موږ د qbec لپاره څو نوي اختیارونه فعال کړي دي:

  • --روټ ځینې/ایپ - تاسو ته اجازه درکوي د ځانګړي غوښتنلیک لارښود وټاکئ
  • --force:k8s-context __incluster__ - دا یو جادو متغیر دی چې وایي چې ګمارل به په ورته کلستر کې واقع شي چیرې چې gtilab-runner روان وي. دا اړینه ده ځکه چې که نه نو qbec به هڅه وکړي چې ستاسو په kubeconfig کې یو مناسب Kubernetes سرور ومومي
  • --انتظار - qbec دې ته اړ باسي چې تر هغه پورې انتظار وکړي چې سرچینې یې رامینځته کوي چمتو حالت ته لاړ شي او یوازې بیا د بریالي وتلو کوډ سره وځي.
  • -هو - په ساده ډول متقابل شیل غیر فعالوي تاسو ډاډه یاست؟ کله چې ګمارل کیږي.

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .gitlab-ci.yml
git commit -m "Automate deploy"

او وروسته ګيټ فشار موږ به وګورو چې زموږ غوښتنلیکونه څنګه ځای پرځای شوي دي:

د دوهم پایپ لاین سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

11. اثار او مجلس کله چې ماسټر ته فشار ورکول کیږي

عموما، پورته بیان شوي ګامونه د نږدې هر مایکرو سرویس جوړولو او وړاندې کولو لپاره کافي دي، مګر موږ نه غواړو هرکله چې د سایټ تازه کولو ته اړتیا ولرو یو ټګ اضافه کړو. له همدې امله، موږ به یو ډیر متحرک لاره واخلو او په ماسټر څانګه کې به د هضم ځای پرځای کړو.

نظر ساده دی: اوس زموږ عکس ویب پاڼه هرکله چې تاسو دننه کړئ بیا به جوړ شي د بادار، او بیا په اتوماتيک ډول Kubernetes ته ځای په ځای شي.

راځئ چې دا دوه دندې زموږ په برخه کې تازه کړو .gitlab-ci.yml:

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/
  only:
    refs:
      - master
      - tags

deploy_website:
  extends: .deploy_qbec_app
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

مهرباني وکړئ په یاد ولرئ چې موږ یو تار اضافه کړی دی د بادار к ردوی د دندو لپاره build_website او موږ اوس کاروو $CI_COMMIT_REF_NAME د ځای پرځای $CI_COMMIT_TAG، دا دی ، موږ په ګیټ کې له ټاګونو څخه خلاص یو او اوس به موږ د ژمنې څانګې نوم سره یو عکس فشار راوړو چې پایپ لاین یې پیل کړ. دا د یادونې وړ ده چې دا به د ټګونو سره هم کار وکړي، کوم چې موږ ته اجازه راکوي د سایټ سنیپ شاټونه په ډاکر-رجسټري کې د ځانګړي نسخې سره خوندي کړو.

کله چې د سایټ د نوې نسخې لپاره د ډاکر ټاګ نوم بدل نشي ، موږ لاهم باید په کوبرنیټس کې بدلونونه تشریح کړو ، که نه نو دا به په ساده ډول د نوي عکس څخه غوښتنلیک له سره ځای په ځای نکړي ، ځکه چې دا به په کې کوم بدلون ونه ګوري. د ګمارنې څرګندونه.

غوراوي —vm:ext-str هضم =”$DIGEST” د qbec لپاره - تاسو ته اجازه درکوي چې یو بهرنی متغیر jsonnet ته انتقال کړئ. موږ غواړو چې دا زموږ د غوښتنلیک د هرې خوشې کیدو سره په کلستر کې له سره ځای په ځای شي. موږ نور نشو کولی د ټاګ نوم وکاروو، کوم چې اوس د بدلون وړ نه وي، ځکه چې موږ اړتیا لرو چې د عکس ځانګړي نسخه سره وتړل شو او ځای پرځای کول کله چې دا بدلون ومومي.

دلته به موږ سره د کانیکو وړتیا سره مرسته وشي چې فایل ته د هضم عکس خوندي کړي (اختیار -- ډایجسټ فایل)
بیا به موږ دا فایل انتقال کړو او د ځای پرځای کولو په وخت کې به یې ولولئ.

راځئ چې زموږ لپاره پیرامیټونه تازه کړو deploy/website/environments/base.libsonnet کوم چې اوس به داسې ښکاري:

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website@' + std.extVar('digest'),
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

سرته ورسیده، اوس هر ډول ژمنه د بادار لپاره د ډاکر عکس جوړول پیل کوي ویب پاڼه، او بیا یې Kubernetes ته ځای په ځای کړئ.

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .
git commit -m "Configure dynamic build"

موږ به وروسته وګورو ګيټ فشار موږ باید داسې یو څه وګورو:

د ماسټر لپاره د پایپ لاین سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

په اصولو کې ، موږ اړتیا نلرو چې د هر فشار سره د ګیټ لاب رنر له سره ځای په ځای کړو ، پرته لدې چې ، البته ، د دې په ترتیب کې هیڅ بدلون نه دی راغلی ، راځئ چې دا تنظیم کړو. .gitlab-ci.yml:

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
  only:
    changes:
      - deploy/gitlab-runner/**/*

بدلونونه تاسو ته اجازه درکوي چې د بدلونونو څارنه وکړئ ځای پرځای کول/gitlab-runner/ او زموږ دنده به یوازې هغه مهال پیل کړي چې شتون ولري

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"

ګيټ فشاردا غوره ده:

د تازه شوي پایپ لاین سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

12. متحرک چاپیریال

دا وخت دی چې زموږ پایپ لاین د متحرک چاپیریال سره تنوع کړو.

لومړی، راځئ چې دنده تازه کړو build_website زموږ کې .gitlab-ci.ymlله دې څخه بلاک لرې کول یوازې، کوم چې به ګیټلاب دې ته اړ کړي چې دا کومې څانګې ته په هر ډول ژمنې کې متحرک کړي:

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/

بیا دنده تازه کړئ deploy_website، هلته یو بلاک اضافه کړئ چاپیریال:

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

دا به Gitlab ته اجازه ورکړي چې دنده ورسره شریکه کړي پروډ چاپیریال او د هغې سره سم لینک ښکاره کړئ.

اوس راځئ چې دوه نورې دندې اضافه کړو:

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

deploy_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: http://$CI_ENVIRONMENT_SLUG.docs.example.org
    on_stop: stop_review
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply review --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  only:
    refs:
    - branches
  except:
    refs:
      - master

stop_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop
  stage: deploy
  before_script:
    - git clone "$CI_REPOSITORY_URL" master
    - cd master
  script:
    - qbec delete review --root deploy/website --force:k8s-context __incluster__ --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  variables:
    GIT_STRATEGY: none
  only:
    refs:
    - branches
  except:
    refs:
      - master
  when: manual

دوی به د ماسټر پرته هر څانګو ته د فشار ورکولو پرمهال پیل شي او د سایټ مخکتنه نسخه به ځای په ځای کړي.

موږ د qbec لپاره نوی اختیار ګورو: --app-tag - دا تاسو ته اجازه درکوي د اپلیکیشن ګمارل شوي نسخې ټګ کړئ او یوازې په دې ټاګ کې کار وکړئ؛ کله چې په کوبرنیټس کې سرچینې رامینځته کول او له مینځه وړل ، qbec به یوازې د دوی سره کار وکړي.
پدې توګه موږ نشو کولی د هرې بیاکتنې لپاره جلا چاپیریال رامینځته کړو ، مګر په ساده ډول ورته بیا وکاروو.

دلته موږ هم کاروو qbec د بیاکتنې پلي کول، پرځای د qbec د ډیفالټ پلي کول - دا دقیقا هغه شیبه ده کله چې موږ به هڅه وکړو چې زموږ د چاپیریال لپاره توپیرونه تشریح کړو (بیاکتنه او ډیفالټ):

راځئ چې اضافه کړو کتنه په چاپیریال کې deploy/website/qbec.yaml

spec:
  environments:
    review:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443

بیا به موږ دا اعلان وکړو deploy/website/params.libsonnet:

local env = std.extVar('qbec.io/env');
local paramsMap = {
  _: import './environments/base.libsonnet',
  default: import './environments/default.libsonnet',
  review: import './environments/review.libsonnet',
};

if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile

او د دې لپاره دودیز پیرامیټونه په کې ولیکئ deploy/website/environments/review.libsonnet:

// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');

base {
  components+: {
    website+: {
      name: 'example-docs-' + slug,
      domain: subdomain + '.docs.example.org',
    },
  },
}

راځئ چې د دندې په اړه هم نږدې وګورو stop_review، دا به هغه وخت رامینځته شي کله چې څانګه حذف شي او له دې امله ګیټلاب هڅه نه کوي چې چیک آوټ وکاروي دا کارول کیږي GIT_STRATEGY: هیڅ نه، وروسته موږ کلون کوو د بادار- د هغې له لارې بیاکتنه برانچ او حذف کړئ.
دا یو څه ګډوډ دی، مګر ما تر اوسه نوره ښکلې لاره نه ده موندلې.
یو بدیل اختیار به دا وي چې هره بیاکتنه د هوټل نوم ځای ته ځای په ځای کړي، کوم چې تل په بشپړه توګه ویجاړ کیدی شي.

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .
git commit -m "Enable automatic review"

ګيټ فشار, git checkout -b ازموینه, git push origin testچک کول:

په ګیټلاب کې د رامینځته شوي چاپیریال سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

هرڅه کار کوي؟ - ښه، زموږ د ازموینې څانګه حذف کړئ: د چیک چیک آټ ماسټر, git push origin: test، موږ ګورو چې د چاپیریال حذف کولو دندې پرته له خطا کار کوي.

دلته زه غواړم سمدلاسه دا روښانه کړم چې په پروژه کې کوم پراختیا کونکی کولی شي څانګې رامینځته کړي ، هغه هم بدلولی شي .gitlab-ci.yml فایل او پټ متغیرونو ته لاسرسی.
له همدې امله، دا په کلکه سپارښتنه کیږي چې د دوی کارولو ته اجازه ورکړي یوازې د خوندي څانګو لپاره، د بیلګې په توګه د بادار، یا د هر چاپیریال لپاره د متغیرونو جلا سیټ رامینځته کړئ.

13. ایپس بیاکتنه

د ایپس بیاکتنه دا د GitLab ځانګړتیا ده چې تاسو ته اجازه درکوي په ذخیره کې د هرې فایل لپاره یو تڼۍ اضافه کړئ ترڅو دا په ګمارل شوي چاپیریال کې په چټکۍ سره وګورئ.

د دې لپاره چې دا تڼۍ ښکاره شي، تاسو اړتیا لرئ یو فایل جوړ کړئ gitlab/route-map.yml او په دې کې د لارې ټول بدلونونه تشریح کړئ؛ زموږ په قضیه کې دا به خورا ساده وي:

# Indices
- source: /content/(.+?)_index.(md|html)/ 
  public: '1'

# Pages
- source: /content/(.+?).(md|html)/ 
  public: '1/'

زموږ د بدلونونو ژمن کول مه هیروئ:

git add .gitlab/
git commit -m "Enable review apps"

ګيټ فشار، او چک کړئ:

د بیاکتنې اپلیکیشن تڼۍ سکرین شاټ

په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

کار وشو!

د پروژې سرچینې:

ستاسو د پاملرنې څخه مننه، زه هیله لرم چې تاسو یې خوښ کړئ په Kubernetes کې د جوړولو او اتوماتیک ګمارلو لپاره د نوي وسایلو هڅه کول

سرچینه: www.habr.com

Add a comment