Compare commits

...

13 Commits

Author SHA1 Message Date
Nikolai Rodionov db9e85216c
Add some tasks examples and update format a bit
ci/woodpecker/push/spellcheck Pipeline is pending Details
ci/woodpecker/push/build Pipeline was successful Details
2024-04-23 14:47:30 +02:00
Nikolai Rodionov ba7f7e5310
Add Longhorn to storages
ci/woodpecker/push/build Pipeline was successful Details
2024-04-23 14:08:21 +02:00
Nikolai Rodionov d8e7071943
Stop using anchors
ci/woodpecker/push/spellcheck Pipeline was successful Details
ci/woodpecker/push/build Pipeline was successful Details
Currently, I don't know how to make it work
2024-04-23 13:29:38 +02:00
Nikolai Rodionov b3bd01c16d
Try using woodpecker variables and rclone copyto
ci/woodpecker/push/build Pipeline was successful Details
2024-04-23 13:11:20 +02:00
Nikolai Rodionov ecfb624fff
Run builder as a privileged container
ci/woodpecker/push/spellcheck Pipeline was successful Details
ci/woodpecker/push/build Pipeline failed Details
2024-04-23 12:51:17 +02:00
Nikolai Rodionov ed03f1c0e4
Update the CI jobs name
ci/woodpecker/push/build Pipeline failed Details
2024-04-23 12:40:16 +02:00
Nikolai Rodionov 8cbfb22b25
Format the ci file a bit and trigger a build
ci/woodpecker/push/build Pipeline was successful Details
2024-04-23 12:39:02 +02:00
Nikolai Rodionov f4bbc1e5fa
Generate CV per a commit
ci/woodpecker/push/spellcheck Pipeline was successful Details
ci/woodpecker/push/build Pipeline was successful Details
In order to have different CV versions, I've decided to publish each CV
with a commit SHA in the name. They should be put in the ./n.rodionov
directory. Once the change is merged to the main, it should be copied to
the root directory of a bucket without a hash in the name
2024-04-23 12:30:15 +02:00
Nikolai Rodionov 7decf2b0cf
Make some lines look nicer and add some tools
ci/woodpecker/push/build Pipeline was successful Details
Since email is the only contact information in the CV, it makes no sense
to comment it with the preffered note, also I've updated a set of tools
I've been working with.

Additionaly, I've added a Makefile because I like it more than npm
2024-04-23 12:11:34 +02:00
Nikolai Rodionov 2da1469b17
Fix a typo
ci/woodpecker/push/build Pipeline was successful Details
2024-03-12 13:21:27 +01:00
Nikolai Rodionov 1fe981edae
Make the CV a bit more neutral 2024-03-12 13:21:03 +01:00
Nikolai Rodionov 4cb433f938
Fix a typo
ci/woodpecker/push/build Pipeline was successful Details
2024-03-05 11:22:59 +01:00
Nikolai Rodionov f6474effdb
Fix a typo
ci/woodpecker/push/build Pipeline was successful Details
2024-02-29 11:06:58 +01:00
5 changed files with 369 additions and 458 deletions

View File

@ -37,6 +37,10 @@ mysql
percona
redis
ceph
CRDs
RabbitMQ
postgres
- index.md
Rodionov
db-operator
Tekton

View File

@ -1,12 +1,17 @@
---
when:
event: push
steps:
build:
name: Build the CV
image: node
environment:
OUTPUT: /tmp/out
backend_options:
kubernetes:
securityContext:
privileged: true
commands:
- apt-get update
- |-
@ -20,11 +25,9 @@ steps:
- npm install
- npm run build
- mkdir $CI_WORKSPACE/cv
- mv index.pdf $CI_WORKSPACE/cv/n.rodionov.pdf
- mv index.pdf $CI_WORKSPACE/cv/n.rodionov.$CI_COMMIT_SHA.pdf
upload:
when:
branch: main
name: Upload the CV
image: rclone/rclone:latest
secrets:
@ -33,4 +36,21 @@ steps:
RCLONE_CONFIG: /tmp/rclone.conf
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- rclone copy -P $CI_WORKSPACE/cv badhouseplants-minio:/public-download
- |-
rclone copy -P $CI_WORKSPACE/cv badhouseplants-minio:/public-download/n.rodionov
release:
when:
branch: main
name: Upload the official version
image: rclone/rclone:latest
secrets:
- rclone_config_content
environment:
RCLONE_CONFIG: /tmp/rclone.conf
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- |-
rclone copyto \
badhouseplants-minio:/public-download/n.rodionov/n.rodionov.$CI_COMMIT_SHA.pdf \
badhouseplants-minio:/public-download/n.rodionov.pdf

8
Makefile Normal file
View File

@ -0,0 +1,8 @@
build:
npm run build
test:
npm run test
fix:
npm run fix

View File

@ -1,4 +1,8 @@
---
pdf_options:
format: a4
margin: 20mm 10mm
printBackground: true
stylesheet:
- https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown.css
body_class: markdown-body
@ -13,23 +17,30 @@ css: |-
```
> Location: Hamburg, Germany
> Email: allanger@zohomail.com (preffered)
> Email: allanger@zohomail.com
> Github: https://github.com/allanger
```
*This CV is built in a CI pipeline, and uploaded to Minio Bucket, so you should be able to download the latest version here: <https://s3.badhouseplants.net/public-download/n.rodionov.pdf>*
*This CV is built in a CI pipeline, and uploaded to a Minio Bucket, so you should be able to download the latest version here: <https://s3.badhouseplants.net/public-download/n.rodionov.pdf>*
### About me
I'm a DevOps engineer with 5++ years of hands-on experience with a decent amount of tools. One of the most important tools that I love and want to continue working with, is Kubernetes. At least, until I see a better alternative. I think that containers themselves are one of greatest inventions in development, and I'm trying to use them as long as it's possible. Also, I believe that every routine must be automated, because routing is a boring job that lets people lose focus and make mistakes.
I'm a DevOps engineer with 5++ years of hands-on experience with a decent amount of tools. My main focus is Kubernetes and CI/CD, but it absolutely doesn't mean that I would like to avoid tasks on other areas.
I think that there are several things that a DevOps engineer must be able to do:
- To build reliable and stable infrastructure
- Keep this infrastructure up-to-date
- Keep all the source and instructions of this infrastructure clean and simple
- Avoid a human factor as long as possible
- And when it's not possible to avoid it, not to be afraid to take responsibility
As an engineer, I've got some beliefs and I hope that they should be capable of describing me, because that what I'm trying to bring with me:
- One should tend not to repeat oneself
- One should never edit what's constantly generated
- Unless something is in CI, it doesn't exist
- Any routine must be automated, because otherwise it's error-prone
Also, I think it's important that before implementing anything, an engineer has understood all the requirements and checked tools that can fulfil them. I often see, how people try to use a tool for its name but not for its functionality, and hence they have to do a lot of additional work and deal with compromises. And if nothing really can fulfil those requirements, you need not be afraid of writing something new *and open-source it*.
A couple of bigger tasks I've been working on:
- A migration of several MySQL Percona clusters to Kubernetes using the Percona Operator
- An implementation of a downtime-free blue-green deployment for RabbitMQ
- A dynamic "preview" environments deployment using ArgoCD
- A data streaming automation from ~800 Postgres databases with structural changes via Kafka deployed to Kubernetes
- An introduction of versioned Gitlab-CI templates for replacing per-repo pipelines
Also, I'm a maintainer of a kubernetes operator that should help users manage databases via CRDs: <https://github.com/db-operator/db-operator>
### Experience
@ -47,10 +58,11 @@ Also, I think it's important that before implementing anything, an engineer has
- **Kubernetes**: Helm - Kustomize - Kubebuilder - Helmfile
- **Scripting/Coding**: Bash - Go - Rust - Perl
- **Continuous Integration**: Gitlab-CI - Github Actions - Circle-CI - Woodpecker-CI - Drone-CI
- **Continuous Delivery**: ArgoCD - Flux
- **Infrastructure as Code**: Ansible - Terraform
- **Continuous Delivery**: ArgoCD - Flux - Tekton
- **Infrastructure as Code**: Ansible - Terraform - Cluster API
- **Cloud Providers**: Microsoft Azure - Google Cloud - AWS - Yandex Cloud - Hetzner - Self-Hosted
- **Observability**: Prometheus - Grafana - Loki - Elasticsearch - Kibana - FluentBit - Promtail - Fluentd
- **Secrets/Encryption**: Sops - Age - Helm Secrets
- **Databases**: PostgreSQL - MySQL - Percona MySQL - Redis
- **Storages**: Minio - Ceph
- **Storages**: Minio - Ceph - Longhorn
- **Others**: Kafka - RabbitMQ - Selenium

749
package-lock.json generated

File diff suppressed because it is too large Load Diff