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
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"
|
|
|
|
|