2022-03-12:k8s如何搭建gogs+drone实现自动化部署cicd,yaml如何写?

答案2022-03-12:

需要安装docker和k3s,见 docker和k3s,k3s不需要依赖docker,但是drone-run-docker依赖docker,所以一定要安装docker。

第一种方法:

yaml如下,需要把192.168.204.13替换成自己电脑的ip:

apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: mysql
name: mysql
namespace: droneci
data:
initdb.sql: |
create database if not exists gogs;
create database if not exists drone;
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
value: '123456'
- name: TZ
value: Asia/Shanghai
image: 'mysql:8.0'
imagePullPolicy: IfNotPresent
name: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: volv
- mountPath: /docker-entrypoint-initdb.d
name: volv2
volumes:
- hostPath:
path: /root/k8s/droneci/mysql/var/lib/mysql
type: DirectoryOrCreate
name: volv
- configMap:
name: mysql
name: volv2 ---
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: droneci
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 10040
selector:
app: mysql
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: registry
name: registry
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: registry
template:
metadata:
labels:
app: registry
spec:
containers:
- image: 'registry'
imagePullPolicy: IfNotPresent
name: registry
volumeMounts:
- mountPath: /var/lib/registry
name: volv
volumes:
- hostPath:
path: /root/k8s/droneci/registry/var/lib/registry
type: DirectoryOrCreate
name: volv
---
apiVersion: v1
kind: Service
metadata:
labels:
app: registry
name: registry
namespace: droneci
spec:
ports:
- port: 5000
nodePort: 50000
protocol: TCP
targetPort: 5000
selector:
app: registry
type: NodePort ---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: phpmyadmin
name: phpmyadmin
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: phpmyadmin
template:
metadata:
labels:
app: phpmyadmin
spec:
containers:
- env:
- name: PMA_HOST
value: mysql
- name: PMA_PORT
value: '3306'
- name: PMA_USER
value: root
- name: PMA_PASSWORD
value: '123456'
image: phpmyadmin/phpmyadmin
imagePullPolicy: IfNotPresent
name: phpmyadmin
---
apiVersion: v1
kind: Service
metadata:
labels:
app: phpmyadmin
name: phpmyadmin
namespace: droneci
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
nodePort: 10050
selector:
app: phpmyadmin
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
labels:
app: gogs
name: gogs
namespace: droneci
spec:
ports:
- name: 3000-3000
port: 3000
protocol: TCP
targetPort: 3000
nodePort: 10080
- name: 22-22
port: 22
protocol: TCP
targetPort: 22
nodePort: 10022
selector:
app: gogs
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: gogs
name: gogs
namespace: droneci
data:
appini: |
BRAND_NAME = Gogs
RUN_USER = git
RUN_MODE = prod [database]
TYPE = mysql
HOST = mysql:3306
NAME = gogs
SCHEMA = public
USER = root
PASSWORD = 123456
SSL_MODE = disable
PATH = /app/gogs/data/gogs.db [repository]
ROOT = /data/git/gogs-repositories [server]
DOMAIN = gogs
HTTP_PORT = 3000
EXTERNAL_URL = http://192.168.204.13:10080/ # 192.168.204.13需要修改成自己电脑的ip
DISABLE_SSH = false
SSH_PORT = 10022
START_SSH_SERVER = false
OFFLINE_MODE = false [mailer]
ENABLED = false [auth]
REQUIRE_EMAIL_CONFIRMATION = false
DISABLE_REGISTRATION = false
ENABLE_REGISTRATION_CAPTCHA = true
REQUIRE_SIGNIN_VIEW = false [user]
ENABLE_EMAIL_NOTIFICATION = false [picture]
DISABLE_GRAVATAR = false
ENABLE_FEDERATED_AVATAR = false [session]
PROVIDER = file [log]
MODE = file
LEVEL = Info
ROOT_PATH = /app/gogs/log [security]
INSTALL_LOCK = true
SECRET_KEY = ToSeZnPToSyWt9r
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: gogs
name: gogs
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: gogs
template:
metadata:
creationTimestamp: null
labels:
app: gogs
spec:
containers:
- env:
- name: TZ
value: Asia/Shanghai
image: gogs/gogs
imagePullPolicy: IfNotPresent
name: gogs
volumeMounts:
- mountPath: /data/gogs/conf/app.ini
subPath: appini
name: config
- mountPath: /data
name: volv volumes:
- configMap:
name: gogs
name: config
- hostPath:
path: /root/k8s/droneci/gogs/data
type: DirectoryOrCreate
name: volv
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: drone
name: drone
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: drone
template:
metadata:
labels:
app: drone
spec:
containers:
- env:
- name: DRONE_OPEN
- name: DRONE_GOGS
- name: DRONE_PROVIDER
value: gogs
- name: DRONE_GOGS_SERVER
value: 'http://gogs:3000'
- name: DRONE_SERVER_HOST
value: drone
- name: DRONE_RPC_SECRET
value: hh
- name: DRONE_SERVER_PROTO
value: http
- name: DRONE_USER_CREATE
value: 'username:moonfdd,admin:true'
- name: DRONE_DATABASE_DRIVER
value: mysql
- name: DRONE_DATABASE_DATASOURCE
value: 'root:123456@tcp(mysql:3306)/drone?parseTime=true'
image: 'drone/drone:1'
imagePullPolicy: IfNotPresent
name: drone
volumeMounts:
- mountPath: /data
name: volv
volumes:
- hostPath:
path: /root/k8s/droneci/drone/data
type: DirectoryOrCreate
name: volv
---
apiVersion: v1
kind: Service
metadata:
labels:
app: drone
name: drone
namespace: droneci
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
nodePort: 10010
selector:
app: drone
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: drone-runner-ssh
name: drone-runner-ssh
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: drone-runner-ssh
template:
metadata:
labels:
app: drone-runner-ssh
spec:
containers:
- env:
- name: DRONE_RPC_SECRET
value: hh
- name: DRONE_RPC_HOST
value: drone
- name: DRONE_RPC_PROTO
value: http
image: 'drone/drone-runner-ssh'
imagePullPolicy: IfNotPresent
name: drone-runner-ssh
---
apiVersion: v1
kind: Service
metadata:
labels:
app: drone-runner-ssh
name: drone-runner-ssh
namespace: droneci
spec:
ports:
- port: 3000
protocol: TCP
targetPort: 3000
nodePort: 10025
selector:
app: drone-runner-ssh
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: drone-runner-docker
name: drone-runner-docker
namespace: droneci
spec:
replicas: 1
selector:
matchLabels:
app: drone-runner-docker
template:
metadata:
labels:
app: drone-runner-docker
spec:
containers:
- env:
- name: DRONE_RPC_SECRET
value: hh
- name: DRONE_RPC_HOST
value: drone
- name: DRONE_RPC_PROTO
value: http
- name: DRONE_RUNNER_CAPACITY
value: '1'
- name: DRONE_RUNNER_NAME
value: runner-docker
image: 'drone/drone-runner-docker:1'
imagePullPolicy: IfNotPresent
name: drone-runner-docker
volumeMounts:
- mountPath: /var/run/docker.sock
name: volv
volumes:
- hostPath:
path: /var/run/docker.sock
type: Socket
name: volv
---
apiVersion: v1
kind: Service
metadata:
labels:
app: drone-runner-docker
name: drone-runner-docker
namespace: droneci
spec:
ports:
- port: 3000
protocol: TCP
targetPort: 3000
nodePort: 10020
selector:
app: drone-runner-docker
type: NodePort

访问http://192.168.204.13:10080/,创建账号,创建项目。然后git clone http://192.168.204.13:10080/moonfddgroup/testdemo.git。







写好.drone.yml文件,然后push上去。.drone.yml文件内容如下:

kind: pipeline
type: docker
name: dev steps:
- name: build
image: golang
pull: if-not-exists
environment:
GOPROXY: https://goproxy.cn,direct
CGO_ENABLED: 0
GO111MODULE: on
GOOS: linux
GOARCH: amd64
commands:
- go env trigger:
branch:
- master

push上去,drone里的结果如下:



第二种方法:

1.先copy项目

git clone https://gitee.com/moonfdd/k8syaml.git
cd k8syaml/droneci

2.修改Makefile文件,把192.168.204.13 改成自己电脑IP:


.PHONY: all all: build build:
k3s kubectl apply -f mysql.yaml
k3s kubectl apply -f registry.yaml
k3s kubectl apply -f phpmyadmin.yaml
cp gogs.yaml gogs2.yaml
sed -i "s/moonfddmyip/192.168.204.13/g" gogs2.yaml # 192.168.204.13 需要替换成宿主机IP
k3s kubectl apply -f gogs2.yaml
rm -rf gogs2.yaml
k3s kubectl apply -f drone.yaml
k3s kubectl apply -f drone-runner-ssh.yaml
k3s kubectl apply -f drone-runner-docker.yaml
test:
pwd clean:
k3s kubectl delete -f mysql.yaml
k3s kubectl delete -f registry.yaml
k3s kubectl delete -f phpmyadmin.yaml
k3s kubectl delete -f gogs.yaml
k3s kubectl delete -f drone.yaml
k3s kubectl delete -f drone-runner-ssh.yaml
k3s kubectl delete -f drone-runner-docker.yaml

然后make build。

make build # 搭建 ci/cd 环境
make clean # 卸载 ci/cd 环境

结果如下:

2022-03-12:k8s如何搭建gogs+drone实现自动化部署cicd,yaml如何写?的更多相关文章

  1. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  2. Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的

    前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...

  3. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记

    前言    持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新 ...

  4. Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  5. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  6. Gogs+Jenkins+Docker 自动化部署.NetCore

    环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Doc ...

  7. ubuntu21.10搭建jenkins和gitlab自动化部署环境

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 前置环境: vmware pro 16 + ubuntu21.10 安装gitlab 搭建ssh远程 打开终端 sudo apt-get insta ...

  8. Gogs+Drone搭建CI/CD平台

    Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...

  9. K8S(16)集成实战-使用spinnaker进行自动化部署

    K8s集成实战-使用spinnaker进行自动化部署 1 spinnaker概述和选型 1.1 概述 1.1.1 主要功能 Spinnaker是一个开源的多云持续交付平台,提供快速.可靠.稳定的软件变 ...

  10. [原创]自动化部署K8S(v1.10.11)集群

          标准运维实现自动化部署K8S集群主要分两步,第一步是部署gse-agent,拱第二步执行部署. 第一步:部署gse-agent.如下: 第二步:部署k8s集群.主要通过作业平台分为5小步执 ...

随机推荐

  1. LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)-转载

    1. LIS3DH管脚定义 PS:LIS3DH和mpu6050的X和Y方向是相反的, mpu6050如下图所示: 2.LIS3DH加速度计介绍 由于LIS3DH只可以得到XYZ加速度,无法获取角速度, ...

  2. 如何加快打开网页的速度------通过调节“QoS数据包计划程序”的“限制可保留宽带”实现&如何解决win10可能找不到gpedit.msc的问题

    参考:http://www.windowszj.com/news/win10/42119.html http://www.docin.com/p-1510367352.html(QoS数据包计划程序有 ...

  3. Eclipse使用Maven搭建SSM框架时遇到的问题以及解决办法

    1.新建项目后出现:Could not caculate build plan:plugin 解决方法:删除本地.m2仓库中 org.apache.maven.plugins:maven-resour ...

  4. 记一次 .NET某汽车零件采集系统 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究 ...

  5. MySQL 某一列的值加入到另一列

    0.背景 文件url 文件名 /usr/local/img/goods/1/2021-12-22-e05bb433bc7a451ca5d7cc9d505d8ed8.jpg 酸枣糕.jpg /usr/l ...

  6. 联邦学习开源框架FATE架构

    作者:京东科技 葛星宇 1.前言 本文除特殊说明外,所指的都是fate 1.9版本. fate资料存在着多处版本功能与发布的文档不匹配的情况,各个模块都有独立的文档,功能又有关联,坑比较多,首先要理清 ...

  7. windows cmd基础命令

    cmd md 新建目录rd 删除目录(非空目录)rd 删除目录下所有文件cd 改变当前目录cd .. 返回上一级目录cd \ 返回根目录d: 切换盘符到D盘dir 显示当前目录下的文件del 1.tx ...

  8. 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享

    前言 本文基于资深创业者@坚叔在「RTE 2022 创新编程挑战赛」宣讲活动中分享内容二次整理. 嘉宾简介:陈坚(坚叔),国内二次元 AR/VR 资深创业者,国内第一批空间虚拟数字化从业人员,获得政府 ...

  9. 声网Agora Lipsync 技术揭秘:通过实时语音驱动人像模拟真人说话

    元宇宙的火热让人们对未来虚拟世界的形态充满了幻想,此前我们为大家揭秘了声网自研的 3D 空间音频技术如何在虚拟世界中完美模拟现实听觉体验,增加玩家沉浸感.今天我们暂时离开元宇宙,回到现实世界,来聊聊声 ...

  10. 【CS231n assignment 2022】Assignment 2 - Part 2,优化器,批归一化以及层归一化

    前言 博客主页:睡晚不猿序程 首发时间:2022.7.23 最近更新时间:2022.7.23 本文由 睡晚不猿序程 原创 作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我,万分感谢!or ...