You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

344 lines
12 KiB

#!/bin/bash
set -o errexit
KIND_K8S_NAME="pipeline"
echo "Create K8s $KIND_K8S_NAME and Registry..."
echo '==============================================================================='
# create registry container unless it already exists
reg_name='kind-registry'
reg_port='5001'
if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then
docker run \
-d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \
registry:2
fi
# create a cluster with the local registry enabled in containerd
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: $KIND_K8S_NAME
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:${reg_port}"]
endpoint = ["http://${reg_name}:5000"]
nodes:
- role: control-plane
image: kindest/node:v1.24.4
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 30022
hostPort: 22
protocol: TCP
- containerPort: 30080
hostPort: 80
protocol: TCP
EOF
# connect the registry to the cluster network if not already connected
if [ "$(docker inspect -f='{{json .NetworkSettings.Networks.kind}}' "${reg_name}")" = 'null' ]; then
docker network connect "kind" "${reg_name}"
fi
# Document the local registry
# https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: local-registry-hosting
namespace: kube-public
data:
localRegistryHosting.v1: |
host: "localhost:${reg_port}"
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF
echo "Create k8s done"
echo "Load image to K8s ${KIND_K8S_NAME} ..."
echo '==============================================================================='
dockerID=`docker ps|grep ${KIND_K8S_NAME}-control-plane|awk '{print $1}'`
images=(
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.40.2@sha256:dc7bc7d6607466b502d8dc22ba0598461d7477f608ab68aaff1ff4dedaa04f81
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.40.2@sha256:6b8aadbdcede63969ecb719e910b55b7681d87110fc0bf92ca4ee943042f620b
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.40.2@sha256:0129ea222522c861c0023d5fe4a078fa86fec11aa48faab71128b079434eb2d0
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.40.2@sha256:28ff94e63e4058afc3f15b4c11c08cf3b54fa91faa646a4bbac90380cd7158df
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.40.2@sha256:9dfeaaa371733189ddb97d8f1a07895356cf34e1c3c4dc5d1eb67c2caaf7f1d2
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.40.2@sha256:9d12412d03a203d37f82040e0bb81c0a1d62a48b34dadabb587e007049306848
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.40.2@sha256:00f18439a37474910d29326afdada8c18af2fbb656c6ca16b7d1345bec94c7b1
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.40.2@sha256:e72aa3aff06960f007b9b59abb70fd14644f40a085e4a81bbdb058a95e272544
gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/workingdirinit:v0.40.2@sha256:677ec1dd01ea891e9bb72d5dee252f6e9c13b7914b9c57f6e9ade2508828cacf
gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/controller:v0.21.0@sha256:c260835027b2d5bfccef8221eed5fb4571a2a4cb843c5bdea006163ee1f617bf
gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/webhook:v0.21.0@sha256:bdaef43faede7bc05ded54387f2dee0a3a032710fe876cc17034e75b9faf758d
gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/interceptors:v0.21.0@sha256:6ec2a6df146507411dfc7b853efd97e43fa5dcbe7e8d9aeb810b704dde3069a1
gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f
gcr.io/tekton-releases/github.com/tektoncd/results/cmd/api:v0.3.0@sha256:ed956232dc782cb9bb16f7bf15459fd56db52ce0952b5e2be70ae5314d0ad8de
gcr.io/tekton-releases/github.com/tektoncd/results/cmd/watcher:v0.3.0@sha256:00b6df37bcee791a96691675a0f83db8ff04bfcf07993e07c61847766f015b44
distroless.dev/busybox@sha256:19f02276bf8dbdd62f069b922f10c65262cc34b710eea26ff928129a736be791
)
for imageName in ${images[@]} ; do
#docker pull $imageName
perfix=`echo $imageName|awk -F':|@' '{print $1}'`
id=`docker images --no-trunc $perfix|sed 1d|awk '{print $3}'`
kind load --name ${KIND_K8S_NAME} docker-image $imageName
docker exec -it $dockerID ctr -n=k8s.io image tag $id $imageName
done
docker tag kindest/node:v1.24.4 localhost:5001/kindest/node:v1.24.4
docker push localhost:5001/kindest/node:v1.24.4
#docker pull docker.io/library/docker:18.05-dind
kind load --name ${KIND_K8S_NAME} docker-image docker.io/library/docker:18.05-dind
#docker pull docker.io/library/bash:5.1.4@sha256:c523c636b722339f41b6a431b44588ab2f762c5de5ec3bd7964420ff982fb1d9
kind load --name ${KIND_K8S_NAME} docker-image docker.io/library/bash:5.1.4@sha256:c523c636b722339f41b6a431b44588ab2f762c5de5ec3bd7964420ff982fb1d9
#docker pull docker.io/gitlab/gitlab-ce:latest
kind load --name ${KIND_K8S_NAME} docker-image docker.io/gitlab/gitlab-ce:latest
#docker pull docker.io/library/postgres:alpine
kind load --name ${KIND_K8S_NAME} docker-image docker.io/library/postgres:alpine
#docker pull docker.io/library/redis:latest
kind load --name ${KIND_K8S_NAME} docker-image docker.io/library/redis:latest
#docker pull docker.io/library/golang:1.18
kind load --name ${KIND_K8S_NAME} docker-image docker.io/library/golang:1.18
#docker pull docker.io/dyrnq/tektoncd-triggers-cmd-eventlistenersink:v0.21.0
kind load --name ${KIND_K8S_NAME} docker-image docker.io/dyrnq/tektoncd-triggers-cmd-eventlistenersink:v0.21.0
echo "Load images done"
echo "Install dependent softwares"
echo '==============================================================================='
echo "Install Tekton..."
echo '-------------------------------------------------------------------------------'
curl --connect-timeout 5 \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 40 \
--silent \
https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.40.2/release.yaml | kubectl apply -f -
curl --connect-timeout 5 \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 40 \
--silent \
https://storage.googleapis.com/tekton-releases/triggers/previous/v0.21.0/release.yaml|sed 's/gcr\.io\/tekton-releases\/github.com\/tektoncd\/triggers\/cmd\/eventlistenersink:v0.21.0@sha256:10605e3af3cf534e10734ea684c94520299c26b29b9dfb67669f7b01a70147dd/docker.io\/dyrnq\/tektoncd-triggers-cmd-eventlistenersink:v0.21.0/' | kubectl apply -f -
curl --connect-timeout 5 \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 40 \
--silent \
https://storage.googleapis.com/tekton-releases/triggers/previous/v0.21.0/interceptors.yaml | kubectl apply -f -
kubectl patch configmap -ntekton-pipelines feature-flags -p '{"data":{"enable-api-fields":"alpha"}}'
echo "Install Tekton Done"
echo "Install Gitlab"
echo '==============================================================================='
echo "Install Postgres..."
echo '-------------------------------------------------------------------------------'
cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
name: gitlab-db
spec:
selector:
pod: gitlab-db
ports:
- protocol: TCP
port: 5432
targetPort: 5432
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: gitlab-db-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab-db
spec:
replicas: 1
selector:
matchLabels:
pod: gitlab-db
template:
metadata:
labels:
pod: gitlab-db
spec:
containers:
- name: gitlab-db
image: postgres:alpine
imagePullPolicy: IfNotPresent
env:
- name: POSTGRES_USER
value: gitlab
- name: POSTGRES_DB
value: gitlabhq_production
- name: POSTGRES_PASSWORD
value: gitlab
ports:
- containerPort: 5432
volumeMounts:
- name: gitlab-db-volume
mountPath: /var/lib/postgresql/data
subPath: gitlab
volumes:
- name: gitlab-db-volume
persistentVolumeClaim:
claimName: gitlab-db-pvc
EOF
echo "Install Redis..."
echo '-------------------------------------------------------------------------------'
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: gitlab-memcache
spec:
selector:
pod: gitlab-memcache
ports:
- protocol: TCP
port: 6379
targetPort: 6379
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab-memcache
spec:
replicas: 1
selector:
matchLabels:
pod: gitlab-memcache
template:
metadata:
labels:
pod: gitlab-memcache
spec:
containers:
- name: gitlab-redis-master
image: redis
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "0.2"
ports:
- containerPort: 6379
EOF
echo "Install Gitlab instanse..."
echo '-------------------------------------------------------------------------------'
cat <<EOF | kubectl apply -f -
---
apiVersion: v1
kind: Service
metadata:
name: gitlab
spec:
type: NodePort
selector:
pod: gitlab
ports:
- name: ssh
protocol: TCP
port: 22
targetPort: 22
nodePort: 30022
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitlab-pvc
labels:
pod: gitlab
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
spec:
replicas: 1
selector:
matchLabels:
pod: gitlab
template:
metadata:
labels:
pod: gitlab
spec:
containers:
- name: gitlab
image: gitlab/gitlab-ce
imagePullPolicy: IfNotPresent
env:
- name: GITLAB_OMNIBUS_CONFIG
value: |
postgresql['enable'] = false
prometheus['monitor_kubernetes'] = false
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "gitlab"
gitlab_rails['db_host'] = "gitlab-db"
gitlab_rails['db_port'] = "5432"
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
redis['enable'] = false
gitlab_rails['redis_host'] = 'gitlab-memcache'
gitlab_rails['redis_port'] = '6379'
gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['initial_root_password'] = '12345678'
ports:
- containerPort: 80
- containerPort: 22
volumeMounts:
- name: gitlab
mountPath: /var/opt/gitlab
subPath: gitlab_data
- name: gitlab
mountPath: /etc/gitlab
subPath: gitlab_configuration
volumes:
- name: gitlab
persistentVolumeClaim:
claimName: gitlab-pvc
EOF
echo "Install Gitlab Done"