基于docker快速搭建cicd学习环境
docker+gitlab+ci+rancher(k8s)
自动化集成部署实战,把你从简单重复的步骤中解放出来。
下面用到的公网ip和内网ip请自行使用你自己的ip
- 购买云服务器主机,选择centos7.9 64位版本。
阿里云竞价实例 4c16g,2毛钱一小时,买它两小时的玩儿。强烈推荐先用云服务来学习,本地网络各种慢,等你掌握了再探索在本地用服务器玩儿
- 安装docker运行环境并配置代理镜像
登陆上服务器执行下列命令安装
# 安装docker curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh --mirror Aliyun # 开启开机自启动docker systemctl enable docker systemctl start docker # 添加阿里云的docker镜像代理,可以快速下载镜像 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://nj7j21cs.mirror.aliyuncs.com"], "insecure-registries": ["172.26.63.39:5000"] } EOF # 重启docker容器 sudo systemctl daemon-reload sudo systemctl restart docker # 安装私有镜像仓库 docker run -d -p 5000:5000 --restart=unless-stopped registry:2 # 安装docker-compose yum install -y docker-compose
- 安装gitlab
详细文档看这里 https://github.com/sameersbn/docker-gitlab
mkdir gitlab && cd gitlab # 创建gitlab的docker-compose文件 # 注意,修改下面的 "hostIp" 为你当前主机的访问域名 sudo tee docker-compose.yml <<-'EOF' version: '2.3' services: redis: restart: always image: redis:6.2.6 container_name: redis command: - --loglevel warning volumes: - ./redis:/var/lib/redis:Z postgresql: restart: always image: sameersbn/postgresql:12-20200524 container_name: postgresql volumes: - ./posgresql:/var/lib/postgresql:Z environment: - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production - DB_EXTENSION=pg_trgm,btree_gist gitlab: restart: always image: sameersbn/gitlab:14.4.3 container_name: gitlab depends_on: - redis - postgresql ports: - "88:80" - "822:22" volumes: - ./gitlab/data:/home/git/data:Z healthcheck: test: ["CMD", "/usr/local/sbin/healthcheck"] interval: 5m timeout: 10s retries: 3 start_period: 5m environment: - DEBUG=false - DB_ADAPTER=postgresql - DB_HOST=postgresql - DB_PORT=5432 - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production - REDIS_HOST=redis - REDIS_PORT=6379 - TZ=Asia/Kolkata - GITLAB_TIMEZONE=Kolkata - GITLAB_HTTPS=false - SSL_SELF_SIGNED=false - GITLAB_HOST=hostIp - GITLAB_PORT=88 - GITLAB_SSH_PORT=822 - GITLAB_RELATIVE_URL_ROOT= - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_ROOT_PASSWORD= - GITLAB_ROOT_EMAIL= - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true - GITLAB_NOTIFY_PUSHER=false - GITLAB_EMAIL=admin@xxx.cn - GITLAB_EMAIL_REPLY_TO=admin@xxx.cn - GITLAB_INCOMING_EMAIL_ADDRESS=admin@xxx.cn - GITLAB_BACKUP_SCHEDULE=daily - GITLAB_BACKUP_TIME=01:00 - GITLAB_BACKUP_EXPIRY=259200 - PUMA_WORKERS=0 - RACK_ATTACK_ENABLED=false # 修复登录登出500的bug - SIDEKIQ_CONCURRENCY=1 - SIDEKIQ_MEMORY_KILLER_MAX_RSS=400000 # sidekiq 内存最大给400MB EOF docker-compose up -d # 等3分钟访问 ip:88 即可
- 安装rancher
k8s的发行版,类似于centos是linux的发行版
文档看这里 http://docs.rancher.cn/
# 80和443留给ingress使用
docker run --privileged -d \
--restart=unless-stopped \
-v /mnt/data/rancher:/var/lib/rancher \
-p 8080:80 -p 8443:443 rancher/rancher:v2.5.10
# 等3分钟访问 https://ip:8443 即可
登陆进去后右下角设置语言为中文,然后添加集群,创建一个自定义集群即可,这里名称填demo,其他值默认,直接点击下一步
[X]Etcd [X]Control Plane [X]Worker
这三个选项都选上,点击复制按钮,将命令复制到粘贴板,拿到服务器上执行
等到5~10分钟k8s安装组件,然后就可以在rancher的网页上启动容器了
-
安装gitlab-ci组件,开始搞CICD
-
在rancher网站上找到集群的kubeconfig配置文件,写入到有kubectl工具的机器上,这里写入在服务器”/root/.kube/config”路径下
-
在服务器上安装kubectl
# 参考 https://www.kubernetes.org.cn/installkubectl curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/bin/kubectl
-
可以正常使用kubectl工具查看k8s的节点信息了
kubectl get nodes
-
http://ip:88/admin/runners 可以看到runners的注册地址和注册token
-
创建gitlab-runner.yml文件在k8s里启动gitlab-runner
sudo tee gitlab-runner.yml <<-'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: gitlab-runner namespace: default spec: minReadySeconds: 15 selector: matchLabels: app: gitlab-runner replicas: 3 template: metadata: labels: app: gitlab-runner spec: containers: - name: gitlab-runner image: registry.cn-beijing.aliyuncs.com/guanweiming/gitlab-runner:v14.2.0 imagePullPolicy: Always env: - name: GITLAB_URL value: http://121.89.220.75:88 - name: CI_TOKEN value: JNsinRK_Xy-GGVyJqo-5 - name: TAG_NAME value: prod volumeMounts: - name: docker mountPath: /usr/bin/docker - name: docker-sock mountPath: /var/run/docker.sock - name: kubectl mountPath: /usr/bin/kubectl volumes: - hostPath: path: /usr/bin/docker name: docker - hostPath: path: /var/run/docker.sock name: docker-sock - hostPath: path: /usr/bin/kubectl name: kubectl --- EOF # 部署到k8s中 kubectl apply -f gitlab-runner.yml
-
-
测试cicd效果
https://gitlab.coding-space.cn/guange/demo-cicd
下载demo springboot项目上传到当前的gitlab上,可以看到代码推送到gitlab上之后,gitlab自动开始编译打包代码,部署docker镜像到k8s集群中