Using below command you can clone all the git repos at once.
for i in `curl -u USERNAME:TOKEN_HERE -s "https://api.github.com/orgs/ottonova/repos?per_page=200" |grep ssh_url | cut -d ':' -f 2-3|tr -d '",'`; do git clone $i; done
Using below command you can clone all the git repos at once.
for i in `curl -u USERNAME:TOKEN_HERE -s "https://api.github.com/orgs/ottonova/repos?per_page=200" |grep ssh_url | cut -d ':' -f 2-3|tr -d '",'`; do git clone $i; done
GitLab is the first single application built from the ground up for all stages of the DevOps lifecycle for Product, Development, QA, Security, and Operations teams to work concurrently on the same project. GitLab enables teams to collaborate and work from a single conversation, instead of managing multiple threads across different tools. GitLab provides teams with a single data store, one user interface, and one permission model across the DevOps lifecycle allowing teams to collaborate, significantly reducing cycle time and focus exclusively on building great software quickly.
Here is a quick Tutorial that will teach you how to deploy Gitlab within Kubernetes Environment.
Requirements:
1. Working Kubernetes Cluster
2. Storage Class: We will use it for stateful deployment.
Here Git repository that I used to build Gitlab.
#Clone gitlab_k8s repo
git clone https://github.com/jaganthoutam/gitlab_k8s.git cd gitlab_k8s
gitlab-pvc.yaml Contains the pv,pvc voulmes for postgres,gitlab,redis..
Here I am using my NFS(nfs01.thoutam.loc) server…
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-gitlab
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-gitlab
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
nfs:
server: nfs01.thoutam.loc
# Exported path of your NFS server
path: "/mnt/gitlab"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-gitlab-post
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-gitlab-post
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
nfs:
server: nfs01.thoutam.loc
# Exported path of your NFS server
path: "/mnt/gitlab-post"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-gitlab-redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-gitlab-redis
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
nfs:
server: nfs01.thoutam.loc
# Exported path of your NFS server
path: "/mnt/gitlab-redis"
---
You can use other storage classes based on your cloud Providers.
gitlab-rc.yml Contains Gitlab Deployment config:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: gitlab
spec:
replicas: 1
# selector:
# name: gitlab
template:
metadata:
name: gitlab
labels:
name: gitlab
spec:
containers:
- name: gitlab
image: jaganthoutam/gitlab:11.1.4
env:
- name: TZ
value: Asia/Kolkata
- name: GITLAB_TIMEZONE
value: Kolkata
- name: GITLAB_SECRETS_DB_KEY_BASE
value: long-and-random-alpha-numeric-string #CHANGE ME
- name: GITLAB_SECRETS_SECRET_KEY_BASE
value: long-and-random-alpha-numeric-string #CHANGE ME
- name: GITLAB_SECRETS_OTP_KEY_BASE
value: long-and-random-alpha-numeric-string #CHANGE ME
- name: GITLAB_ROOT_PASSWORD
value: password #CHANGE ME
- name: GITLAB_ROOT_EMAIL
value: [email protected] #CHANGE ME
- name: GITLAB_HOST
value: gitlab.lb.thoutam.loc #CHANGE ME
- name: GITLAB_PORT
value: "80"
- name: GITLAB_SSH_PORT
value: "22"
- name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
value: "true"
- name: GITLAB_NOTIFY_PUSHER
value: "false"
- name: GITLAB_BACKUP_SCHEDULE
value: daily
- name: GITLAB_BACKUP_TIME
value: 01:00
- name: DB_TYPE
value: postgres
- name: DB_HOST
value: postgresql
- name: DB_PORT
value: "5432"
- name: DB_USER
value: gitlab
- name: DB_PASS
value: passw0rd
- name: DB_NAME
value: gitlab_production
- name: REDIS_HOST
value: redis
- name: REDIS_PORT
value: "6379"
- name: SMTP_ENABLED
value: "false"
- name: SMTP_DOMAIN
value: www.example.com
- name: SMTP_HOST
value: smtp.gmail.com
- name: SMTP_PORT
value: "587"
- name: SMTP_USER
value: [email protected]
- name: SMTP_PASS
value: password
- name: SMTP_STARTTLS
value: "true"
- name: SMTP_AUTHENTICATION
value: login
- name: IMAP_ENABLED
value: "false"
- name: IMAP_HOST
value: imap.gmail.com
- name: IMAP_PORT
value: "993"
- name: IMAP_USER
value: [email protected]
- name: IMAP_PASS
value: password
- name: IMAP_SSL
value: "true"
- name: IMAP_STARTTLS
value: "false"
ports:
- name: http
containerPort: 80
- name: ssh
containerPort: 22
volumeMounts:
- mountPath: /home/git/data
name: data
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 180
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: data
persistentVolumeClaim:
#NFS PVC name identifier
claimName: nfs-gitlab
gitlab-svc.yml contains the gitlab services. I used 80,20 default ports.
apiVersion: v1
kind: Service
metadata:
name: gitlab
labels:
name: gitlab
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: http
- name: ssh
port: 22
targetPort: ssh
selector:
name: gitlab
postgresql-rc.yml Contains Postgres ReplicationController config :
apiVersion: v1
kind: ReplicationController
metadata:
name: postgresql
spec:
replicas: 1
selector:
name: postgresql
template:
metadata:
name: postgresql
labels:
name: postgresql
spec:
containers:
- name: postgresql
image: jaganthoutam/postgresql:10
env:
- name: DB_USER
value: gitlab
- name: DB_PASS
value: passw0rd
- name: DB_NAME
value: gitlab_production
- name: DB_EXTENSION
value: pg_trgm
ports:
- name: postgres
containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql
name: data
livenessProbe:
exec:
command:
- pg_isready
- -h
- localhost
- -U
- postgres
initialDelaySeconds: 30
timeoutSeconds: 5
readinessProbe:
exec:
command:
- pg_isready
- -h
- localhost
- -U
- postgres
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: data
persistentVolumeClaim:
# NFS PVC identifier
claimName: nfs-gitlab-post
postgresql-svc.yml contains postgres service config :
apiVersion: v1
kind: Service
metadata:
name: postgresql
labels:
name: postgresql
spec:
ports:
- name: postgres
port: 5432
targetPort: postgres
selector:
name: postgresql
redis-rc.yml contains redis ReplicationController config:
apiVersion: v1
kind: ReplicationController
metadata:
name: redis
spec:
replicas: 1
selector:
name: redis
template:
metadata:
name: redis
labels:
name: redis
spec:
containers:
- name: redis
image: jaganthoutam/redis
ports:
- name: redis
containerPort: 6379
volumeMounts:
- mountPath: /var/lib/redis
name: data
livenessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 30
timeoutSeconds: 5
readinessProbe:
exec:
command:
- redis-cli
- ping
initialDelaySeconds: 5
timeoutSeconds: 1
volumes:
- name: data
persistentVolumeClaim:
#NFS PVC identifier
claimName: nfs-gitlab-redis
redis-svc.yml contain redis service config:
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
name: redis
spec:
ports:
- name: redis
port: 6379
targetPort: redis
selector:
name: redis
Change the configuration according to your needs and apply using kubectl.
kubectly apply -f . #and check if your pods are running or not. root@k8smaster-01:~# kubectl get po NAME READY STATUS RESTARTS AGE gitlab-589cb45ff4-hch2g 1/1 Running 1 1d postgres-55f6bcbb99-4x48g 1/1 Running 3 1d postgresql-v2svn 1/1 Running 4 1d redis-7r486 1/1 Running 2 1d
Let me know if this helps you.
Here are useful git alias commands…
g=git ga='git add' gaa='git add --all' gap='git apply' gapa='git add --patch' gau='git add --update' gb='git branch' gba='git branch -a' gbd='git branch -d' gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d' gbl='git blame -b -w' gbnm='git branch --no-merged' gbr='git branch --remote' gbs='git bisect' gbsb='git bisect bad' gbsg='git bisect good' gbsr='git bisect reset' gbss='git bisect start' gc='git commit -v' 'gc!'='git commit -v --amend' gca='git commit -v -a' 'gca!'='git commit -v -a --amend' gcam='git commit -a -m' 'gcan!'='git commit -v -a --no-edit --amend' 'gcans!'='git commit -v -a -s --no-edit --amend' gcb='git checkout -b' gcd='git checkout develop' gcf='git config --list' gcl='git clone --recursive' gclean='git clean -fd' gcm='git checkout master' gcmsg='git commit -m' 'gcn!'='git commit -v --no-edit --amend' gco='git checkout' gcount='git shortlog -sn' gcp='git cherry-pick' gcpa='git cherry-pick --abort' gcpc='git cherry-pick --continue' gcs='git commit -S' gcsm='git commit -s -m' gd='git diff' gdca='git diff --cached' gdct='git describe --tags `git rev-list --tags --max-count=1`' gdcw='git diff --cached --word-diff' gdt='git diff-tree --no-commit-id --name-only -r' gdw='git diff --word-diff' gf='git fetch' gfa='git fetch --all --prune' gfo='git fetch origin' gg='git gui citool' gga='git gui citool --amend' ggpull='git pull origin $(git_current_branch)' ggpush='git push origin $(git_current_branch)' ggsup='git branch --set-upstream-to=origin/$(git_current_branch)' ghh='git help' gignore='git update-index --assume-unchanged' gignored='git ls-files -v | grep "^[[:lower:]]"' git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk' gk='\gitk --all --branches' gke='\gitk --all $(git log -g --pretty=%h)' gl='git pull' glg='git log --stat' glgg='git log --graph' glgga='git log --graph --decorate --all' glgm='git log --graph --max-count=10' glgp='git log --stat -p' glo='git log --oneline --decorate' glod='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'\' glods='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'\'' --date=short' glog='git log --oneline --decorate --graph' gloga='git log --oneline --decorate --graph --all' glol='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\' glola='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --all' glp=_git_log_prettily glum='git pull upstream master' gm='git merge' gma='git merge --abort' gmom='git merge origin/master' gmt='git mergetool --no-prompt' gmtvim='git mergetool --no-prompt --tool=vimdiff' gmum='git merge upstream/master' gp='git push' gpd='git push --dry-run' gpoat='git push origin --all && git push origin --tags' gpristine='git reset --hard && git clean -dfx' gpsup='git push --set-upstream origin $(git_current_branch)' gpu='git push upstream' gpv='git push -v' gr='git remote' gra='git remote add' grb='git rebase' grba='git rebase --abort' grbc='git rebase --continue' grbd='git rebase develop' grbi='git rebase -i' grbm='git rebase master' grbs='git rebase --skip' grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}' grh='git reset' grhh='git reset --hard' grmv='git remote rename' grrm='git remote remove' grset='git remote set-url' grt='cd $(git rev-parse --show-toplevel || echo ".")' gru='git reset --' grup='git remote update' grv='git remote -v' gsb='git status -sb' gsd='git svn dcommit' gsi='git submodule init' gsps='git show --pretty=short --show-signature' gsr='git svn rebase' gss='git status -s' gst='git status' gsta='git stash save' gstaa='git stash apply' gstc='git stash clear' gstd='git stash drop' gstl='git stash list' gstp='git stash pop' gsts='git stash show --text' gsu='git submodule update' gts='git tag -s' gtv='git tag | sort -V' gunignore='git update-index --no-assume-unchanged' gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1' gup='git pull --rebase' gupv='git pull --rebase -v' gwch='git whatchanged -p --abbrev-commit --pretty=medium' gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip-- [skip ci]"'