"рдирдпрд╛рдБ рдорд╣рд╛рдХрд╛рд╡реНрдпрд╣рд░реВ"ред рд╣рд╛рддреНрддреАрд▓рд╛рдИ рдЯреБрдХреНрд░рд╛ рдЯреБрдХреНрд░рд╛рдорд╛ рдЦрд╛рдиреНрдЫреМрдВ

"рдирдпрд╛рдБ рдорд╣рд╛рдХрд╛рд╡реНрдпрд╣рд░реВ"ред рд╣рд╛рддреНрддреАрд▓рд╛рдИ рдЯреБрдХреНрд░рд╛ рдЯреБрдХреНрд░рд╛рдорд╛ рдЦрд╛рдиреНрдЫреМрдВ

рдпрд╕ рд▓реЗрдЦрдорд╛, рдо рдЦреЗрд▓ "Epics" рдХреЛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреЗрдЫреБ, рд░ OpenFaaS рдорд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рднрд╛рдЧрд╣рд░реВрдорд╛ рдЦреЗрд▓ рдЖрдлреИрдВрд▓рд╛рдИ рддреЛрдбреНрдиреЗрдЫреБред рдо рд▓рд┐рдирдХреНрд╕рдорд╛ рд╕рдмреИ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрдиреЗрдЫреБ, рдо VirtualBox рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ minikube рдорд╛ Kubernetes рддреИрдирд╛рдд рдЧрд░реНрдиреЗрдЫреБред рдореЗрд░реЛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдореЗрд╕рд┐рдирдорд╛ реи рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд░ резреи рдЬреАрдмреА рд░реНрдпрд╛рдо рдЫ; рдо рдкреНрд░рдгрд╛рд▓реА рдбрд┐рд╕реНрдХрдХреЛ рд░реВрдкрдорд╛ SSD рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБред рдо рдбреЗрдмрд┐рдпрди 2 рд▓рд╛рдИ рдореЗрд░реЛ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБ, emacs, sudo, git рд░ рднрд░реНрдЪреБрдЕрд▓рдмрдХреНрд╕ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛рдХреЛ рд╕рд╛рде, рдЕрд░реВ рд╕рдмреИ GitHub рд░ рдЕрдиреНрдп рд╕реНрд░реЛрддрд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реЗрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдиреЗрдЫред рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирдЧрд░реЗрд╕рдореНрдо рд╣рд╛рдореА рдпреА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ /usr/local/bin рдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╕реБрд░реБ рдЧрд░реМрдВ!

рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдЧрд░реНрджреИ

Go рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╣рд╛рдореА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдмрд╛рдЯ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрд╛рд▓рдирд╛ рдЧрд░реНрдЫреМрдВ:

$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ:

$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main

import "fmt"

func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, world

faas-cli рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╣рд╛рдореА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдмрд╛рдЯ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрд╛рд▓рдирд╛ рдЧрд░реНрдЫреМрдВ:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

рдердк рд░реВрдкрдорд╛, рддрдкрд╛рдЗрдБ bash-completion рд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

Kubernetes рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐, minikube рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ /usr/local/bin рдорд╛ kubelet, рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╣реЗрд▓реНрдо рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin

minikube рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

OpenFaaS рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдХрд╛рдо рдЧрд░реНрди 2 рдирд╛рдорд╕реНрдерд╛рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫрдиреН:

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

рд╣реЗрд▓реНрдордХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░ рдердкреНрдиреБрд╣реЛрд╕реН:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

рдЪрд╛рд░реНрдЯрдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдЫ, рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реМрдВ рд░ рдкрд╣реБрдБрдЪ рдбрд╛рдЯрд╛ k8s рдЧреЛрдкреНрдп рд░реВрдкрдорд╛ рдмрдЪрдд рдЧрд░реМрдВ:

$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth created

рдкреНрд░рдпреЛрдЧ рдЧрд░реМрдВ:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete.  Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:

  kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

рдХреЗрд╣рд┐ рд╕рдордп рдкрдЫрд┐, рд╣рд╛рдореА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдБрдЫреМрдВ:

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
alertmanager        1/1     1            1           114s
basic-auth-plugin   1/1     1            1           114s
faas-idler          1/1     1            1           114s
gateway             1/1     1            1           114s
nats                1/1     1            1           114s
prometheus          1/1     1            1           114s
queue-worker        1/1     1            1           114s

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ:

$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function                        Invocations     Replicas

Mongodb рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╣рд╛рдореА рд╣реЗрд▓реНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдмреИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдЫреМрдВ:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:

    mongodb-1577466908.default.svc.cluster.local

To get the root password run:

    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)

To connect to your database run the following command:

    kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ:

kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
If you don't see a command prompt, try pressing enter.

> db.version();
4.0.14

рдХрдиреНрдЯреЗрдирд░рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрди ctrl+D рдерд┐рдЪреНрдиреБрд╣реЛрд╕реНред

emacs рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рд╕рд┐рджреНрдзрд╛рдиреНрдд рдорд╛, рд╕рдмреИ рдХреБрд░рд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрдиреБрд╕рд╛рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдпреЛ рд▓реЗрдЦ, рддреНрдпрд╕реИрд▓реЗ рдо рд╡рд┐рд╕реНрддреГрддрдорд╛ рдЬрд╛рдиреЗрдЫреИрди ред

рдЦреЗрд▓рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджреИ

рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ http рдкреНрд░реЛрдЯреЛрдХрд▓ рдорд╛рд░реНрдлрдд рдЧрд░рд┐рдиреНрдЫ, JWT рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдмреАрдЪрдХреЛ рдЕрдиреНрддреНрдп-рджреЗрдЦрд┐-рдЕрдиреНрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреНрдЫред Mongodb рдЯреЛрдХрдирд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд╕рд╛рдереИ рдЦреЗрд▓ рд╕реНрдерд┐рддрд┐, рдЦреЗрд▓рд╛рдбреА рдбреЗрдЯрд╛, рд╕рдмреИ рдЦреЗрд▓рд╣рд░реВрдХреЛ рдЪрд╛рд▓рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реАред рд╣рд╛рдореА рд╕рдмреИ рднрдиреНрджрд╛ рд░реЛрдЪрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реБ рдорд╛ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВред

рджрд░реНрддрд╛

рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЗрдирдкреБрдЯ рдЦреЗрд▓ рдЙрдкрдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд╕рд╛рде JSON рд╣реЛред рдЬрдм рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░рд┐рдиреНрдЫ, рдпреЛ рдЙрдкрдирд╛рдо рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЫреИрди рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдиреНрдЫ; рдпрджрд┐ рдЬрд╛рдБрдЪ рд╕рдлрд▓ рднрдпреЛ рднрдиреЗ, рдЙрдкрдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рд╣реНрдпрд╛рд╕ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реБрдиреНрдЫрдиреНред рдЦреЗрд▓рдорд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рднрд╛рдЧ рд▓рд┐рди рджрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫред

рдкреНрд░рд╡реЗрд╢

рдкреНрд░рдХрд╛рд░реНрдп рдЗрдирдкреБрдЯ рдЦреЗрд▓ рдЙрдкрдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд╕рд╛рде JSON рд╣реЛ; рдпрджрд┐ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЙрдкрдирд╛рдо рдЫ рд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛрд╕рдБрдЧ рдкреНрд░рдорд╛рдгрд┐рдд рднрдпреЛ рднрдиреЗ, JWT рдлрд┐рд░реНрддрд╛ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ рдЬрдм рддрд┐рдиреАрд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред рдмреЛрд▓рд╛рдЗрдпреЛред рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкрдирд┐ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реБрдиреНрдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрдиреНрддрд┐рдо рд▓рдЧрдЗрди рд╕рдордп, рдЖрджрд┐ред

рдЦреЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН

рдХреБрдиреИ рдкрдирд┐ рдЕрдирдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рд╕рдХреНрд░рд┐рдп рдЦреЗрд▓рд╣рд░реВ рдмрд╛рд╣реЗрдХ рд╕рдмреИ рдЦреЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рд╕рдХреНрдЫред рдПрдХ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рд╕рдХреНрд░рд┐рдп рдЦреЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкрдирд┐ рджреЗрдЦреНрдЫред рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкрд░рд┐рдгрд╛рдо JSON рдЦреЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ (рдЦреЗрд▓ ID, рдорд╛рдирд╡-рдкрдвреНрди рдпреЛрдЧреНрдп рдирд╛рдо, рдЖрджрд┐)ред

рдЦреЗрд▓ рдирд┐рд░реНрдорд╛рдг

рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд╕рдБрдЧ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрджрдЫ; рдЗрдирдкреБрдЯрдорд╛ рдЦреЗрд▓рд╛рдбреАрд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░рд┐рдиреНрдЫ, рд╕рд╛рдереИ рдЦреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ рдЦреЗрд▓рдорд╛ рдХреБрди рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрдиреЗ, рдЦреЗрд▓рд╛рдбреАрд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛, рдЖрджрд┐)ред рдЦреЗрд▓рдХреЛ рдЫреБрдЯреНрдЯреИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕рд╛рдореЗрд▓ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЦреЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЦреЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкрд░рд┐рдгрд╛рдо JSON рд╣реЛ, рдЬрд╕рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рд╕рдлрд▓рддрд╛ рдХреНрд╖реЗрддреНрд░, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЦреЗрд▓ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛, рд░ рдЕрдиреНрдп рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреНред

рдЦреЗрд▓рдорд╛ рд╕рд╛рдореЗрд▓ рд╣реБрдБрджреИ

рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд╕рдБрдЧ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрджрдЫ, рдЗрдирдкреБрдЯ рдЦреЗрд▓ ID рд░ рдпрд╕рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛ, рдпрджрд┐ рдпреЛ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЦреЗрд▓ рд╣реЛ рднрдиреЗ, рдЖрдЙрдЯрдкреБрдЯ рдЦреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ JSON рд╣реЛред рдЦреЗрд▓рдорд╛ рд╕рд╛рдореЗрд▓ рднрдПрдХрд╛ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛, рд╕рд╛рдереИ рдЦреЗрд▓рдХреЛ рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рд▓рд╛рдИ рдпрд╕рдкрдЫрд┐ рдЧреЗрдо рд╕рд╣рднрд╛рдЧреА рднрдирд┐рдиреНрдЫред

рдЦреЗрд▓ рдШрдЯрдирд╛рд╣рд░реВ рд╣реЗрд░реНрджреИ

рдХреБрдиреИ рдкрдирд┐ рдЕрдирдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЦреЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдПрдХ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╕рдХреНрд░рд┐рдп рдЦреЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫред рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдШрдЯрдирд╛ рдирдореНрдмрд░ рд╣реБрди рд╕рдХреНрдЫ рдЬреБрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкрдЫрд┐ рднрдПрдХрд╛ рдШрдЯрдирд╛рд╣рд░реВ рдорд╛рддреНрд░ рд╕реВрдЪреАрдорд╛ рдлрд░реНрдХрд╛рдЗрдиреЗрдЫред рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдпреЛ рдкреНрд░рдХрд╛рд░реНрдп рд╕реБрд░реБ рдЧрд░реЗрд░, рдПрдХ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЦреЗрд▓рдорд╛ рдХреЗ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рд╣реЗрд░реНрдЫред рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдХрд╛рд░реНрдп рдЕрдиреБрд░реЛрдз рдкрдирд┐ рдлрд░реНрдХрд╛рдЙрдБрдЫ, рдЬреБрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЦреЗрд▓рдХреЛ рдШрдЯрдирд╛ рдкреНрд░реЗрд╖рдг рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рд╕рдХреНрдЫред

рдЦреЗрд▓ рдШрдЯрдирд╛ рдкрдард╛рдЙрдБрджреИ

рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЦреЗрд▓ рд╕рд╣рднрд╛рдЧреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрджрдЫ: рдпреЛ рдЦреЗрд▓ рд╕реБрд░реБ рдЧрд░реНрди, рдЪрд╛рд▓ рдмрдирд╛рдЙрди, рднреЛрдЯ рдЧрд░реНрди, рдЦреЗрд▓ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд╛рда рд╕рдиреНрджреЗрд╢ рд▓реЗрдЦреНрди, рдЖрджрд┐ рд╕рдореНрднрд╡ рдЫред
рдЦреЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЖрдлреИрдВ рд╕рд╣рд┐рдд рдЦреЗрд▓рдорд╛ рд╕рдмреИ рд╕рд╣рднрд╛рдЧреАрд╣рд░реВрд▓рд╛рдИ рднреВрдорд┐рдХрд╛рд╣рд░реВ рд╡рд┐рддрд░рдг рдЧрд░реНрди рдерд╛рд▓реНрдЫ, рдЙрдиреАрд╣рд░реВрд▓реЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрдиреАрд╣рд░реВрдХреЛ рднреВрдорд┐рдХрд╛ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдПрдХ рдкрдЯрдХ рд╕рдмреИ рднреВрдорд┐рдХрд╛рд╣рд░реВ рдкреБрд╖реНрдЯрд┐ рднрдПрдкрдЫрд┐, рдЦреЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд░рд╛рдд рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рд╣реБрдиреНрдЫред

рдЦреЗрд▓ рддрдереНрдпрд╛рдЩреНрдХ

рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЦреЗрд▓рдХрд╛ рд╕рд╣рднрд╛рдЧреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрдЫ; рдпрд╕рд▓реЗ рдЦреЗрд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛, рдЦреЗрд▓рд╛рдбреАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ рд╕рдЩреНрдЦреНрдпрд╛ (рдЙрдкрдирд╛рдорд╣рд░реВ), рднреВрдорд┐рдХрд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ (рд╕рд╛рд░рд┐рдПрдХреЛ рд╡рд╛ рдирдЧрд░реЗрдХреЛ), рд╕рд╛рдереИ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реАрд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрдЫред рдЕрдШрд┐рд▓реНрд▓реЛ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд░реВрдкрдорд╛, рд╕рдмреИ рдХреБрд░рд╛ рдЦреЗрд▓ рд╕рд╣рднрд╛рдЧреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрджрдЫред

рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реБрд░реБ рдЧрд░рд┐рдпреЛ

рдпрджрд┐ рдЦреЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЦреЗрд▓ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ, рдпреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдХреНрд░рд┐рдп рдЦреЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдиреЗрдЫред

рдЕрд░реНрдХреЛ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рднрдиреЗрдХреЛ рдЦреЗрд▓ рдореЛрдбрдХреЛ рд░рд╛рддрджреЗрдЦрд┐ рджрд┐рди рд░ рдкрдЫрд╛рдбрд┐ рдЬрдмрд░рдЬрд╕реНрддреА рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБ рд╣реЛ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдкрд╛рд▓реЛрдХреЛ рд╕рдордпрдорд╛ рднрдПрдХреЛ рдерд┐рдПрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЦреЗрд▓ рдШрдЯрдирд╛рдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рдЦреЗрд▓рд╛рдбреАрд▓реЗ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рдЖрдлреНрдиреЛ рд╕рдорд╛рдзрд╛рди рдкрдард╛рдЙрди рд╕рдХреЗрдиред )ред

рдШреЛрд╖рдгрд╛

  • рдкрд░рд┐рдЪрдп
  • рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ, рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджреИ
  • рдмреНрдпрд╛рдХрдПрдиреНрдб рдХрд╛рдо
  • рдЕрдЧрд╛рдбрд┐рдХреЛ рдХрд╛рдо
  • CICD рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ, рдкрд░реАрдХреНрд╖рдг рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрджреИ
  • рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЦреЗрд▓ рд╕рддреНрд░ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди