Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Pẹlẹ o! Laipẹ, ọpọlọpọ awọn irinṣẹ adaṣe itura ni a ti tu silẹ mejeeji fun kikọ awọn aworan Docker ati fun imuṣiṣẹ si Kubernetes. Ni iyi yii, Mo pinnu lati ṣere ni ayika pẹlu GitLab, ṣe iwadi awọn agbara rẹ daradara ati, nitorinaa, ṣeto opo gigun ti epo.

Iṣẹ yii jẹ atilẹyin nipasẹ oju opo wẹẹbu kubernetes.io, eyi ti o ti ipilẹṣẹ lati awọn koodu orisun laifọwọyi, ati fun kọọkan pool ìbéèrè rán, awọn robot laifọwọyi ina kan awotẹlẹ ti ikede awọn ojula pẹlu rẹ ayipada ati ki o pese ọna asopọ kan fun wiwo.

Mo gbiyanju lati kọ ilana ti o jọra lati ibere, ṣugbọn ti a kọ patapata lori Gitlab CI ati awọn irinṣẹ ọfẹ ti Mo lo lati lo awọn ohun elo si Kubernetes. Loni Emi yoo nipari sọ fun ọ diẹ sii nipa wọn.

Nkan naa yoo jiroro lori awọn irinṣẹ bii:
Hugo, qbec, kaniko, git-crypt и GitLab CI pẹlu awọn ẹda ti ìmúdàgba ayika.

Akoonu

  1. Pade Hugo
  2. Ngbaradi Dockerfile
  3. Ngba lati mọ kaniko
  4. Ngba lati mọ qbec
  5. Gbiyanju Gitlab-olusare pẹlu Kubernetes-executor
  6. Gbigbe awọn shatti Helm pẹlu qbec
  7. Ifihan git-crypt
  8. Ṣiṣẹda aworan apoti irinṣẹ
  9. Pipeline akọkọ wa ati apejọ awọn aworan nipasẹ awọn afi
  10. adaṣiṣẹ imuṣiṣẹ
  11. Artifacts ati ijọ nigbati titari si titunto si
  12. Awọn agbegbe ti o ni agbara
  13. Atunwo Apps

1. Ngba lati mọ Hugo

Gẹgẹbi apẹẹrẹ ti iṣẹ akanṣe wa, a yoo gbiyanju lati ṣẹda aaye titẹjade iwe ti a ṣe lori Hugo. Hugo jẹ olupilẹṣẹ akoonu aimi.

Fun awọn ti ko mọ pẹlu awọn olupilẹṣẹ aimi, Emi yoo sọ fun ọ diẹ sii nipa wọn. Ko dabi awọn ẹrọ oju opo wẹẹbu ti aṣa pẹlu data data kan ati diẹ ninu PHP, eyiti, nigbati olumulo kan ba beere, ṣe awọn oju-iwe lori fo, awọn olupilẹṣẹ aimi jẹ apẹrẹ ni iyatọ diẹ. Wọn gba ọ laaye lati mu awọn orisun, nigbagbogbo ṣeto awọn faili ni isamisi Markdown ati awọn awoṣe akori, lẹhinna ṣajọ wọn sinu oju opo wẹẹbu ti pari patapata.

Iyẹn ni, bi abajade, iwọ yoo gba ilana ilana kan ati ṣeto awọn faili HTML ti ipilẹṣẹ, eyiti o le nirọrun gbejade si eyikeyi alejo gbigba olowo poku ati gba oju opo wẹẹbu ṣiṣẹ.

O le fi Hugo sori agbegbe ati gbiyanju rẹ:

Bibẹrẹ aaye tuntun kan:

hugo new site docs.example.org

Ati ni akoko kanna ibi ipamọ git:

cd docs.example.org
git init

Titi di isisiyi, aaye wa jẹ pristine ati pe ki ohun kan le han lori rẹ, a nilo akọkọ lati sopọ akori kan; akori kan jẹ eto awọn awoṣe nikan ati awọn ofin pato nipasẹ eyiti o jẹ ipilẹṣẹ aaye wa.

Fun akori ti a yoo lo Mọ, eyi ti, ni ero mi, ni ibamu daradara fun aaye iwe-ipamọ.

Emi yoo fẹ lati san ifojusi pataki si otitọ pe a ko nilo lati ṣafipamọ awọn faili akori ninu ibi ipamọ iṣẹ akanṣe wa; dipo, a le sopọ nirọrun ni lilo git submodule:

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

Nitorinaa, ibi ipamọ wa yoo ni awọn faili nikan ti o ni ibatan taara si iṣẹ akanṣe wa, ati pe akori ti o sopọ yoo wa bi ọna asopọ si ibi ipamọ kan pato ati adehun ninu rẹ, iyẹn ni, o le fa nigbagbogbo lati orisun atilẹba ati ki o ma bẹru ti aisedede ayipada.

Jẹ ki a ṣe atunṣe atunto naa config.toml:

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

Tẹlẹ ni ipele yii o le ṣiṣẹ:

hugo server

Ati ni adirẹsi http://localhost:1313/ ṣayẹwo oju opo wẹẹbu tuntun ti a ṣẹda, gbogbo awọn ayipada ti a ṣe ninu itọsọna ṣe imudojuiwọn oju-iwe ṣiṣi laifọwọyi ni ẹrọ aṣawakiri, rọrun pupọ!

Jẹ ká gbiyanju lati ṣẹda kan ideri iwe ni akoonu / _index.md:

# My docs site

## Welcome to the docs!

You will be very smart :-)

Sikirinifoto ti oju-iwe tuntun ti a ṣẹda

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Lati ṣẹda aaye kan, kan ṣiṣẹ:

hugo

Awọn akoonu liana gbangba / ati pe yoo jẹ oju opo wẹẹbu rẹ.
Bẹẹni, nipasẹ ọna, jẹ ki a fi kun lẹsẹkẹsẹ .gitignore:

echo /public > .gitignore

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

2. Ngbaradi Dockerfile

O to akoko lati setumo ọna ti ibi ipamọ wa. Mo maa n lo nkan bii:

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

  • dockerfiles/ - ni awọn ilana pẹlu Dockerfiles ati ohun gbogbo pataki fun kikọ awọn aworan Docker wa.
  • ran lọwọ/ - ni awọn ilana fun gbigbe awọn ohun elo wa si Kubernetes

Nitorinaa, a yoo ṣẹda Dockerfile akọkọ wa ni ọna naa dockerfiles / aaye ayelujara / 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" ]

Bi o ti le rii, Dockerfile ni meji ninu LATI, anfani yi ni a npe ni olona-ipele kọ ati gba ọ laaye lati yọkuro ohun gbogbo ti ko wulo lati aworan Docker ikẹhin.
Nitorinaa, aworan ikẹhin yoo ni ninu nikan duduhttpd (lightweight olupin HTTP) ati gbangba / - akoonu ti oju opo wẹẹbu wa ti ipilẹṣẹ.

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

3. Ngba lati mọ kaniko

Gẹgẹbi olupilẹṣẹ aworan docker, Mo pinnu lati lo kanikoNiwọn igba ti iṣiṣẹ rẹ ko nilo daemon docker kan, ati pe o le kọ funrararẹ le ṣee ṣe lori ẹrọ eyikeyi ati pe kaṣe le wa ni ipamọ taara ni iforukọsilẹ, nitorinaa imukuro iwulo lati ni ibi ipamọ itẹramọṣẹ ni kikun.

Lati kọ aworan naa, kan ṣiṣe apoti naa pẹlu kaniko executor ki o si kọja ni ayika kikọ lọwọlọwọ; eyi tun le ṣee ṣe ni agbegbe, nipasẹ docker:

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

Nibo registry.gitlab.com/kvaps/docs.example.org/website - orukọ aworan docker rẹ; lẹhin ile, yoo ṣe ifilọlẹ laifọwọyi sinu iforukọsilẹ docker.

Apaadi -- kaṣe gba ọ laaye lati kaṣe awọn fẹlẹfẹlẹ ni iforukọsilẹ docker; fun apẹẹrẹ ti a fun, wọn yoo wa ni fipamọ ni registry.gitlab.com/kvaps/docs.example.org/website/cache, ṣugbọn o le pato ona miiran nipa lilo paramita --cache-repo.

Sikirinifoto ti docker-registry

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

4. Ngba lati mọ qbec

Qbec jẹ ohun elo imuṣiṣẹ ti o fun ọ laaye lati ṣapejuwe asọye ohun elo rẹ ṣafihan ati gbe wọn lọ si Kubernetes. Lilo Jsonnet gẹgẹbi sintasi akọkọ n gba ọ laaye lati jẹ ki o rọrun pupọ apejuwe awọn iyatọ kọja awọn agbegbe pupọ, ati pe o fẹrẹ yọkuro atunwi koodu patapata.

Eyi le jẹ otitọ paapaa ni awọn ọran nibiti o nilo lati fi ohun elo ranṣẹ si ọpọlọpọ awọn iṣupọ pẹlu awọn aye oriṣiriṣi ati fẹ lati ṣe apejuwe wọn ni asọye ni Git.

Qbec tun gba ọ laaye lati ṣe awọn shatti Helm nipa gbigbe wọn awọn aye pataki ati lẹhinna ṣiṣẹ wọn ni ọna kanna bi awọn ifihan deede, pẹlu o le lo ọpọlọpọ awọn iyipada si wọn, ati pe eyi, ni ọna, gba ọ laaye lati yọ iwulo kuro. lo ChartMuseum. Iyẹn ni, o le fipamọ ati ṣe awọn shatti taara lati git, nibiti wọn wa.

Gẹgẹbi Mo ti sọ tẹlẹ, a yoo tọju gbogbo awọn imuṣiṣẹ sinu itọsọna kan ran lọwọ/:

mkdir deploy
cd deploy

Jẹ ki a bẹrẹ ohun elo wa akọkọ:

qbec init website
cd website

Bayi ilana ti ohun elo wa dabi eyi:

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

jẹ ki a wo faili naa qbec.yaml:

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

Nibi ti a ba wa nipataki nife ninu spec.awọn agbegbe, qbec ti ṣẹda agbegbe aiyipada tẹlẹ fun wa ati mu adirẹsi olupin naa, bakanna bi aaye orukọ lati kubeconfig lọwọlọwọ wa.
Bayi nigbati ransogun si aiyipada ayika, qbec yoo ma gbe lọ nigbagbogbo si iṣupọ Kubernetes ti a sọ pato ati si aaye orukọ ti a sọ, iyẹn ni, iwọ ko ni lati yipada laarin awọn aaye ati awọn aaye orukọ lati le ṣe imuṣiṣẹ kan.
Ti o ba jẹ dandan, o le ṣe imudojuiwọn awọn eto nigbagbogbo ninu faili yii.

Gbogbo awọn agbegbe rẹ ni a ṣe apejuwe ninu qbec.yaml, ati ninu faili params.libsonnet, ibi ti o ti sọ ibi ti lati gba awọn paramita fun wọn.

Nigbamii ti a ri awọn ilana meji:

  • irinše/ - gbogbo awọn ifihan fun ohun elo wa yoo wa ni ipamọ nibi; wọn le ṣe apejuwe mejeeji ni jsonnet ati awọn faili yaml deede
  • awọn agbegbe / - nibi a yoo ṣe apejuwe gbogbo awọn oniyipada (awọn paramita) fun awọn agbegbe wa.

Nipa aiyipada a ni awọn faili meji:

  • ayika/base.libsonnet - yoo ni awọn paramita ti o wọpọ fun gbogbo awọn agbegbe
  • ayika/default.libsonnet - ni awọn paramita ti o bori fun ayika aiyipada

jẹ ki a ṣii ayika/base.libsonnet ati ṣafikun awọn paramita fun paati akọkọ wa nibẹ:

{
  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',
    },
  },
}

Jẹ ki a tun ṣẹda paati akọkọ wa irinše / 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,
                },
              },
            ],
          },
        },
      ],
    },
  },
]

Ninu faili yii a ṣe apejuwe awọn nkan Kubernetes mẹta ni ẹẹkan, iwọnyi ni: imuṣiṣẹ, Service и Ingress. Ti a ba fẹ, a le fi wọn sinu awọn ẹya oriṣiriṣi, ṣugbọn ni ipele yii ọkan yoo to fun wa.

Syntax jsonnet jọra pupọ si json deede, ni ipilẹ, json deede ti wulo jsonnet, nitorinaa ni akọkọ o le rọrun fun ọ lati lo awọn iṣẹ ori ayelujara bii yaml2json lati yi yaml rẹ deede pada si json, tabi, ti awọn paati rẹ ko ba ni awọn oniyipada eyikeyi ninu, lẹhinna wọn le ṣe apejuwe ni irisi yaml deede.

Nigbati o ba n ṣiṣẹ pẹlu jsonnet Mo ṣeduro gíga fifi ohun itanna sori ẹrọ fun olootu rẹ

Fun apẹẹrẹ, ohun itanna kan wa fun vim vim-jsonnet, eyi ti o tan-an sintasi afihan ati ki o ṣiṣẹ laifọwọyi jsonnet fmt ni gbogbo igba ti o ba fipamọ (nilo jsonnet fi sori ẹrọ).

Ohun gbogbo ti ṣetan, bayi a le bẹrẹ imuṣiṣẹ:

Lati wo ohun ti a ni, jẹ ki a sare:

qbec show default

Ni iṣẹjade, iwọ yoo rii awọn ifihan yaml ti a ṣe afihan ti yoo lo si iṣupọ aiyipada.

Nla, ni bayi lo:

qbec apply default

Ni iṣelọpọ iwọ yoo rii nigbagbogbo ohun ti yoo ṣee ṣe ninu iṣupọ rẹ, qbec yoo beere lọwọ rẹ lati gba awọn ayipada nipa titẹ y iwọ yoo ni anfani lati jẹrisi awọn ero rẹ.

Ohun elo wa ti šetan ati ransogun!

Ti o ba ṣe awọn ayipada, o le ṣe nigbagbogbo:

qbec diff default

lati wo bi awọn ayipada wọnyi yoo ṣe ni ipa lori imuṣiṣẹ lọwọlọwọ

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

5. Gbiyanju Gitlab-olusare pẹlu Kubernetes-executor

Titi di aipẹ Mo lo deede nikan gitlab-olusare lori ẹrọ ti a ti pese tẹlẹ (eiyan LXC) pẹlu ikarahun tabi docker-executor. Ni ibẹrẹ, a ni ọpọlọpọ iru awọn asare ni agbaye ni asọye ni gitlab wa. Wọn gba awọn aworan docker fun gbogbo awọn iṣẹ akanṣe.

Ṣugbọn gẹgẹbi iṣe ti fihan, aṣayan yii kii ṣe apẹrẹ julọ, mejeeji ni awọn ofin ti ilowo ati ailewu. O dara pupọ julọ ati pe o tọ ni imọran diẹ sii lati ni awọn asare lọtọ ti a gbe lọ fun iṣẹ akanṣe kọọkan, tabi paapaa fun agbegbe kọọkan.

Da, yi ni ko kan isoro ni gbogbo, niwon bayi a yoo ran awọn gitlab-olusare taara gẹgẹbi apakan ti iṣẹ akanṣe wa ni ọtun Kubernetes.

Gitlab n pese iwe apẹrẹ Helm ti o ti ṣetan fun gbigbe gitlab-runner si Kubernetes. Nitorinaa gbogbo ohun ti o nilo lati ṣe ni wiwa ìforúkọsílẹ àmi fun ise agbese wa ni Eto -> CI / CD -> Awọn asare ki o si fi si Helm:

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

Nibo ni:

  • https://gitlab.com - adirẹsi olupin Gitlab rẹ.
  • yga8y-jdCusVDn_t4Wxc - aami ìforúkọsílẹ fun ise agbese rẹ.
  • rbac.create=otitọ - pese olusare pẹlu iye pataki ti awọn anfani lati ni anfani lati ṣẹda awọn adarọ-ese lati ṣe awọn iṣẹ ṣiṣe wa nipa lilo kubernetes-executor.

Ti ohun gbogbo ba ṣe ni deede, o yẹ ki o wo olusare ti o forukọsilẹ ni apakan Awọn aṣaju, ninu rẹ ise agbese eto.

Sikirinifoto ti olusare ti a ṣafikun

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Ṣe o rọrun bi? - Bẹẹni, o rọrun! Ko si wahala diẹ sii pẹlu awọn asare fiforukọṣilẹ pẹlu ọwọ, lati isisiyi lọ awọn aṣaju yoo ṣẹda ati run laifọwọyi.

6. Ran awọn Helm shatti pẹlu QBEC

Niwon a pinnu lati ro gitlab-olusare apakan ti iṣẹ akanṣe wa, o to akoko lati ṣapejuwe rẹ ni ibi ipamọ Git wa.

A le ṣe apejuwe rẹ gẹgẹbi paati lọtọ aaye ayelujara, ṣugbọn ni ojo iwaju a gbero lati ran awọn oriṣiriṣi awọn ẹda aaye ayelujara gan igba, ko gitlab-olusare, eyi ti yoo wa ni ransogun ni ẹẹkan fun Kubernetes iṣupọ. Nitorinaa jẹ ki a bẹrẹ ohun elo lọtọ fun rẹ:

cd deploy
qbec init gitlab-runner
cd gitlab-runner

Ni akoko yii a kii yoo ṣapejuwe awọn nkan Kubernetes pẹlu ọwọ, ṣugbọn yoo gba iwe-aṣẹ Helm ti o ti ṣetan. Ọkan ninu awọn anfani ti qbec ni agbara lati ṣe awọn shatti Helm taara lati ibi ipamọ Git kan.

Jẹ ki a sopọ pẹlu git submodule:

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

Bayi liana ataja / gitlab-olusare A ni ibi ipamọ kan pẹlu chart fun gitlab-runner.

Ni ọna kanna, o le sopọ awọn ibi ipamọ miiran, fun apẹẹrẹ, gbogbo ibi ipamọ pẹlu awọn shatti osise https://github.com/helm/charts

Jẹ ki a ṣe apejuwe paati naa irinše / 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,
  }
)

Ni igba akọkọ ti ariyanjiyan to faagunHelmTemplate a kọja ọna si chart, lẹhinna params.iye, eyi ti a mu lati awọn paramita ayika, lẹhinna o wa ohun elo pẹlu

  • orukọ Àdàkọ - Tu akọle
  • orukọ orukọ - namespace gbe si Helm
  • Faili yii - paramita ti o nilo ti o kọja ọna si faili lọwọlọwọ
  • ọrọ-ọrọ - fihan aṣẹ Helm awoṣe pẹlu gbogbo awọn ariyanjiyan nigba ti o nṣe chart

Bayi jẹ ki a ṣe apejuwe awọn paramita fun paati wa ninu ayika/base.libsonnet:

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

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

San ifojusi runnerRegistrationToken a gba lati ita faili asiri / base.libsonnet, jẹ ki a ṣẹda rẹ:

{
  runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}

Jẹ ki a ṣayẹwo ti ohun gbogbo ba ṣiṣẹ:

qbec show default

ti ohun gbogbo ba wa ni ibere, lẹhinna a le paarẹ idasilẹ ti a ti firanṣẹ tẹlẹ nipasẹ Helm:

helm uninstall gitlab-runner

ki o si gbe lọ ni ọna kanna, ṣugbọn nipasẹ qbec:

qbec apply default

7. Ifihan si git-crypt

Git-crypt jẹ ọpa ti o fun ọ laaye lati ṣeto fifi ẹnọ kọ nkan fun ibi ipamọ rẹ.

Ni akoko yii, ilana ilana wa fun gitlab-runner dabi eyi:

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

Ṣugbọn titoju awọn aṣiri ni Git kii ṣe ailewu, ṣe? Nitorina a nilo lati encrypt wọn daradara.

Nigbagbogbo, nitori iyipada kan, eyi kii ṣe oye nigbagbogbo. O le gbe awọn asiri si qbec ati nipasẹ awọn oniyipada ayika ti eto CI rẹ.
Ṣugbọn o tọ lati ṣe akiyesi pe awọn iṣẹ akanṣe diẹ sii tun wa ti o le ni ọpọlọpọ awọn aṣiri diẹ sii; gbigbe gbogbo wọn nipasẹ awọn oniyipada ayika yoo nira pupọju.

Pẹlupẹlu, ninu ọran yii Emi kii yoo ni anfani lati sọ fun ọ nipa iru irinṣẹ iyanu bii git-crypt.

git-crypt O tun rọrun ni pe o gba ọ laaye lati ṣafipamọ gbogbo itan-akọọlẹ ti awọn aṣiri, bakanna bi afiwe, dapọ ati yanju awọn ija ni ọna kanna bi a ti lo lati ṣe ninu ọran Git.

Ohun akọkọ lẹhin fifi sori ẹrọ git-crypt a nilo lati ṣe ina awọn bọtini fun ibi ipamọ wa:

git crypt init

Ti o ba ni bọtini PGP kan, lẹhinna o le ṣafikun ararẹ lẹsẹkẹsẹ gẹgẹbi alabaṣiṣẹpọ fun iṣẹ akanṣe yii:

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

Ni ọna yii o le ṣe ipiti ibi ipamọ yii nigbagbogbo nipa lilo bọtini ikọkọ rẹ.

Ti o ko ba ni bọtini PGP kan ati pe o ko nireti, lẹhinna o le lọ si ọna miiran ki o si okeere bọtini ise agbese:

git crypt export-key /path/to/keyfile

Bayi, ẹnikẹni ti o ni ohun okeere bọtini faili yoo ni anfani lati decrypt rẹ ibi ipamọ.

O to akoko lati ṣeto aṣiri akọkọ wa.
Jẹ ki n ran ọ leti pe a tun wa ninu iwe ilana naa ransogun/gitlab-olusare/, ibi ti a ti ni a liana asiri/, jẹ ki a encrypt gbogbo awọn faili ti o wa ninu rẹ, fun eyi a yoo ṣẹda faili kan asiri / .gitattributes pẹlu akoonu wọnyi:

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

Bi o ṣe le rii lati inu akoonu, gbogbo awọn faili ti wa ni boju-boju * yoo wa ni ìṣó nipasẹ git-crypt, ayafi fun julọ .gitattributes

A le ṣayẹwo eyi nipa ṣiṣe:

git crypt status -e

Ijade yoo jẹ atokọ ti gbogbo awọn faili ti o wa ninu ibi ipamọ fun eyiti fifi ẹnọ kọ nkan ṣiṣẹ

Iyẹn ni gbogbo rẹ, ni bayi a le ṣe awọn ayipada wa lailewu:

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

Lati dina ibi ipamọ kan, kan ṣiṣẹ:

git crypt lock

ati lẹsẹkẹsẹ gbogbo awọn faili ti paroko yoo yipada si nkan alakomeji, kii yoo ṣee ṣe lati ka wọn.
Lati yọkuro ibi ipamọ, ṣiṣẹ:

git crypt unlock

8. Ṣẹda aworan apoti irinṣẹ

Aworan apoti irinṣẹ jẹ aworan pẹlu gbogbo awọn irinṣẹ ti a yoo lo lati ran iṣẹ akanṣe wa lọ. Yoo jẹ lilo nipasẹ olusare Gitlab lati ṣe awọn iṣẹ ṣiṣe imuṣiṣẹ aṣoju.

Ohun gbogbo rọrun nibi, jẹ ki a ṣẹda tuntun kan dockerfiles / apoti irinṣẹ / Dockerfile pẹlu akoonu wọnyi:

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

Bi o ti le rii, ni aworan yii a fi gbogbo awọn ohun elo ti a lo lati fi ohun elo wa sori ẹrọ. A ko nilo rẹ nibi ayafi kubectl, ṣugbọn o le fẹ lati mu ṣiṣẹ ni ayika pẹlu rẹ lakoko iṣeto opo gigun ti epo.

Pẹlupẹlu, lati ni anfani lati ṣe ibaraẹnisọrọ pẹlu Kubernetes ki o si fi ranṣẹ si, a nilo lati tunto ipa kan fun awọn pods ti ipilẹṣẹ nipasẹ gitlab-runner.

Lati ṣe eyi, jẹ ki a lọ si liana pẹlu gitlab-runner:

cd deploy/gitlab-runner

ki o si fi titun kan paati irinše / 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,
      },
    ],
  },
]

A yoo tun ṣe apejuwe awọn paramita tuntun ni ayika/base.libsonnet, eyi ti o dabi bayi:

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',
    },
  },
}

San ifojusi $.components.rbac.orukọ ntokasi si orukọ fun paati rbac

Jẹ ki a ṣayẹwo ohun ti o yipada:

qbec diff default

ati ki o lo awọn ayipada wa si Kubernetes:

qbec apply default

Paapaa, maṣe gbagbe lati ṣe awọn ayipada wa si 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. Pipeline akọkọ wa ati apejọ awọn aworan nipasẹ awọn afi

Ni root ti ise agbese a yoo ṣẹda .gitlab-ci.yml pẹlu akoonu wọnyi:

.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

Jọwọ ṣe akiyesi pe a lo GIT_SUBMODULE_STRATEGY: deede fun awọn iṣẹ wọnyẹn nibiti o nilo lati ṣe ipilẹṣẹ awọn submodules ni gbangba ṣaaju ipaniyan.

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

Mo ro pe a le lailewu pe yi a ti ikede v0.0.1 ki o si fi aami sii:

git tag v0.0.1

A yoo ṣafikun awọn afi nigbakugba ti a nilo lati tu ẹya tuntun kan silẹ. Awọn afi ni awọn aworan Docker yoo so mọ awọn afi Git. Titari kọọkan pẹlu aami tuntun yoo ṣe ipilẹṣẹ kikọ awọn aworan pẹlu aami yii.

Jẹ ká ṣe o git titari --tags, ati pe jẹ ki a wo opo gigun ti epo akọkọ wa:

Sikirinifoto ti opo gigun ti epo akọkọ

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

O tọ lati fa ifojusi rẹ si otitọ pe apejọ nipasẹ awọn afi jẹ o dara fun kikọ awọn aworan docker, ṣugbọn ko dara fun gbigbe ohun elo kan si Kubernetes. Niwọn igba ti awọn aami tuntun le ṣe sọtọ si awọn adehun atijọ, ninu ọran yii, ipilẹṣẹ opo gigun ti epo fun wọn yoo yorisi imuṣiṣẹ ti ẹya atijọ.

Lati yanju iṣoro yii, igbagbogbo kikọ awọn aworan docker ti so si awọn afi, ati imuṣiṣẹ ohun elo si ẹka kan titunto si, ninu eyiti awọn ẹya ti awọn aworan ti a gbajọ jẹ koodu lile. Eyi ni ibiti o ti le ṣe ipilẹṣẹ yiyi pada pẹlu iyipada ti o rọrun titunto si-awọn ẹka.

10. Adaṣiṣẹ ti imuṣiṣẹ

Ni ibere fun olusare Gitlab lati sọ awọn aṣiri wa silẹ, a yoo nilo lati okeere bọtini ibi ipamọ ati ṣafikun si awọn oniyipada agbegbe CI wa:

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

A yoo fipamọ laini abajade ni Gitlab; lati ṣe eyi, jẹ ki a lọ si awọn eto iṣẹ akanṣe wa:
Eto -> CI / CD -> Awọn oniyipada

Ati pe jẹ ki a ṣẹda oniyipada tuntun:

iru
Key
iye
ni idaabobo
Masked
dopin

File
GITCRYPT_KEY
<your string>
true (Nigba ikẹkọ o le false)
true
All environments

Sikirinifoto ti awọn fi kun oniyipada

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Bayi jẹ ki a ṣe imudojuiwọn wa .gitlab-ci.yml fifi kun:

.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

Nibi a ti mu ọpọlọpọ awọn aṣayan titun ṣiṣẹ fun qbec:

  • --root diẹ ninu awọn/app - gba ọ laaye lati pinnu itọsọna ti ohun elo kan pato
  • --agbara: k8s-o tọ __incluster__ - eyi jẹ oniyipada idan ti o sọ pe imuṣiṣẹ yoo waye ni iṣupọ kanna ninu eyiti gtilab-runner nṣiṣẹ. Eyi jẹ pataki nitori bibẹẹkọ qbec yoo gbiyanju lati wa olupin Kubernetes ti o yẹ ninu kubeconfig rẹ
  • --duro - fi agbara mu qbec lati duro titi awọn orisun ti o ṣẹda yoo lọ sinu ipo Ṣetan ati pe lẹhinna jade nikan pẹlu koodu ijade aṣeyọri.
  • – beeni - nìkan disables ibanisọrọ ikarahun Ṣe o da ọ loju? nigba ti ransogun.

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

Ati lẹhin git titari a yoo rii bi a ti fi awọn ohun elo wa:

Sikirinifoto ti opo gigun ti epo keji

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

11. Artifacts ati ijọ nigbati titari si titunto si

Ni deede, awọn igbesẹ ti a ṣalaye loke to lati kọ ati fi jiṣẹ fere eyikeyi microservice, ṣugbọn a ko fẹ lati ṣafikun tag ni gbogbo igba ti a nilo lati ṣe imudojuiwọn aaye naa. Nitorinaa, a yoo gba ipa-ọna ti o ni agbara diẹ sii ati ṣeto imuṣiṣẹ imuṣiṣẹ ni ẹka titunto si.

Ero naa rọrun: bayi aworan ti wa aaye ayelujara yoo wa ni tun ni gbogbo igba ti o ba Titari sinu titunto si, ati lẹhinna gbe lọ laifọwọyi si Kubernetes.

Jẹ ki a ṣe imudojuiwọn awọn iṣẹ meji wọnyi ninu wa .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"

Jọwọ ṣe akiyesi pe a ti ṣafikun okun kan titunto si к awọn atunṣe fun awọn iṣẹ build_website ati pe a lo bayi $CI_COMMIT_REF_NAME dipo $CI_COMMIT_TAG, iyẹn ni, a ti ṣii lati awọn afi ni Git ati ni bayi a yoo Titari aworan kan pẹlu orukọ ẹka ifaramọ ti o bẹrẹ opo gigun ti epo. O ṣe akiyesi pe eyi yoo tun ṣiṣẹ pẹlu awọn afi, eyi ti yoo gba wa laaye lati ṣafipamọ awọn aworan ti aaye kan pẹlu ẹya kan pato ninu iforukọsilẹ-docker.

Nigbati orukọ aami docker fun ẹya tuntun ti aaye naa le yipada, a tun ni lati ṣapejuwe awọn ayipada si Kubernetes, bibẹẹkọ kii yoo ni tunṣe ohun elo lati aworan tuntun, nitori kii yoo ṣe akiyesi eyikeyi awọn ayipada ninu ifihan ifihan.

Aṣayan —vm:ext-str digest=”$ DIGEST” fun qbec - faye gba o lati kọja ohun ita oniyipada to jsonnet. A fẹ ki o tun gbe lọ sinu iṣupọ pẹlu itusilẹ ohun elo kọọkan. A ko le lo orukọ tag mọ, eyiti o le jẹ iyipada bayi, nitori a nilo lati so mọ ẹya kan pato ti aworan naa ki o fa imuṣiṣẹ nigbati o yipada.

Nibi a yoo ṣe iranlọwọ nipasẹ agbara Kaniko lati ṣafipamọ aworan daijesti si faili kan (aṣayan --digest-faili)
Lẹhinna a yoo gbe faili yii lọ ati ka ni akoko imuṣiṣẹ.

Jẹ ki a ṣe imudojuiwọn awọn paramita fun wa ransogun / aaye ayelujara / agbegbe / base.libsonnet eyi ti yoo dabi eyi:

{
  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',
    },
  },
}

Ti ṣe, ni bayi eyikeyi fi sinu titunto si initializes awọn Kọ ti docker image fun aaye ayelujara, ati lẹhinna gbe lọ si Kubernetes.

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

A yoo ṣayẹwo nigbamii git titari a yẹ ki o wo nkan bi eyi:

Sikirinifoto ti opo gigun ti epo fun oluwa

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Ni opo, a ko nilo lati tun gitlab-runner ṣiṣẹ pẹlu titari kọọkan, ayafi ti, dajudaju, ko si ohun ti o yipada ninu iṣeto rẹ, jẹ ki a ṣatunṣe ni .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/**/*

awọn ayipada yoo gba ọ laaye lati ṣe atẹle awọn ayipada ninu ransogun/gitlab-olusare/ ati pe yoo ṣe okunfa iṣẹ wa nikan ti eyikeyi ba wa

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

git titari, iyẹn dara julọ:

Sikirinifoto ti opo gigun ti epo ti a ṣe imudojuiwọn

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

12. Ìmúdàgba ayika

O to akoko lati ṣe iyatọ opo gigun ti epo wa pẹlu awọn agbegbe ti o ni agbara.

Ni akọkọ, jẹ ki a ṣe imudojuiwọn iṣẹ naa build_website ninu wa .gitlab-ci.yml, yọ awọn Àkọsílẹ lati o nikan, eyi ti yoo fi ipa mu Gitlab lati ṣe okunfa rẹ lori eyikeyi ifaramo si eyikeyi ẹka:

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/

Lẹhinna ṣe imudojuiwọn iṣẹ naa deploy_wẹbusaiti, fi kan Àkọsílẹ nibẹ ayika:

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"

Eyi yoo gba Gitlab laaye lati ṣepọ iṣẹ naa pẹlu PRODI ayika ati ṣafihan ọna asopọ ti o tọ si rẹ.

Bayi jẹ ki a ṣafikun awọn iṣẹ meji diẹ sii:

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

Wọn yoo ṣe ifilọlẹ lori titari si eyikeyi awọn ẹka ayafi oluwa ati pe yoo ran ẹya awotẹlẹ ti aaye naa lọ.

A rii aṣayan tuntun fun qbec: --app-tag - o fun ọ laaye lati samisi awọn ẹya ti ohun elo ti a fi ranṣẹ ati ṣiṣẹ nikan laarin aami yii; nigbati o ba ṣẹda ati iparun awọn orisun ni Kubernetes, qbec yoo ṣiṣẹ pẹlu wọn nikan.
Ni ọna yii a ko le ṣẹda agbegbe lọtọ fun atunyẹwo kọọkan, ṣugbọn nirọrun tun lo ọkan kanna.

Nibi ti a tun lo qbec waye awotẹlẹ, dipo qbec waye aiyipada - Eyi ni deede akoko ti a yoo gbiyanju lati ṣapejuwe awọn iyatọ fun awọn agbegbe wa (atunyẹwo ati aiyipada):

Jẹ ki a fi kun awotẹlẹ ayika ni ransogun / aaye ayelujara / qbec.yaml

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

Lẹhinna a yoo kede rẹ sinu ransogun / aaye ayelujara / 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

Ki o si kọ si isalẹ awọn aṣa sile fun o ni ransogun / aaye ayelujara / agbegbe / 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',
    },
  },
}

Jẹ ki a tun wo iṣẹ ni pẹkipẹki stop_awotẹlẹ, yoo jẹ okunfa nigbati ẹka naa ba paarẹ ati ki gitlab ko gbiyanju lati ṣayẹwo o ti lo. GIT_STRATEGY: ko si, nigbamii a oniye titunto si- eka ati ki o pa awotẹlẹ nipasẹ o.
O jẹ airoju diẹ, ṣugbọn Emi ko rii ọna ti o lẹwa diẹ sii sibẹsibẹ.
Aṣayan miiran yoo jẹ lati mu atunyẹwo kọọkan lọ si aaye orukọ hotẹẹli kan, eyiti o le wó patapata.

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

git titari, git isanwo -b igbeyewo, git titari ipilẹṣẹ igbeyewo, ṣayẹwo:

Sikirinifoto ti awọn agbegbe ti a ṣẹda ni Gitlab

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Ohun gbogbo n ṣiṣẹ? - nla, paarẹ ẹka idanwo wa: titunto si isanwo git, git titari orisun: idanwo, a ṣayẹwo pe awọn iṣẹ piparẹ ayika ṣiṣẹ laisi awọn aṣiṣe.

Nibi Emi yoo fẹ lati ṣalaye lẹsẹkẹsẹ pe eyikeyi idagbasoke ninu iṣẹ akanṣe kan le ṣẹda awọn ẹka, o tun le yipada .gitlab-ci.yml faili ati wiwọle awọn oniyipada asiri.
Nitorinaa, o gba ọ niyanju lati gba lilo wọn nikan fun awọn ẹka ti o ni aabo, fun apẹẹrẹ ni titunto si, tabi ṣẹda lọtọ ṣeto ti oniyipada fun kọọkan ayika.

13. Atunwo Apps

Atunwo Apps Eyi jẹ ẹya GitLab ti o fun ọ laaye lati ṣafikun bọtini kan fun faili kọọkan ninu ibi ipamọ lati yara wo ni agbegbe ti a fi ranṣẹ.

Ni ibere fun awọn bọtini wọnyi lati han, o nilo lati ṣẹda faili kan .gitlab/ipa-map.yml ati ṣe apejuwe gbogbo awọn iyipada ọna ninu rẹ; ninu ọran wa o yoo rọrun pupọ:

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

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

Maṣe gbagbe lati ṣe awọn ayipada wa:

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

git titariati ṣayẹwo:

Sikirinifoto ti awọn Atunwo App bọtini

Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

Iṣẹ ti ṣe!

Awọn orisun ise agbese:

O ṣeun fun akiyesi rẹ, Mo nireti pe o fẹran rẹ Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes

orisun: www.habr.com

Fi ọrọìwòye kun