2022-03-12:k8s如何搭建gogs+drone实现自动化部署cicd,yaml如何写?
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如何写?的更多相关文章
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新 ...
- Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Gogs+Jenkins+Docker 自动化部署.NetCore
环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Doc ...
- ubuntu21.10搭建jenkins和gitlab自动化部署环境
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 前置环境: vmware pro 16 + ubuntu21.10 安装gitlab 搭建ssh远程 打开终端 sudo apt-get insta ...
- Gogs+Drone搭建CI/CD平台
Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...
- K8S(16)集成实战-使用spinnaker进行自动化部署
K8s集成实战-使用spinnaker进行自动化部署 1 spinnaker概述和选型 1.1 概述 1.1.1 主要功能 Spinnaker是一个开源的多云持续交付平台,提供快速.可靠.稳定的软件变 ...
- [原创]自动化部署K8S(v1.10.11)集群
标准运维实现自动化部署K8S集群主要分两步,第一步是部署gse-agent,拱第二步执行部署. 第一步:部署gse-agent.如下: 第二步:部署k8s集群.主要通过作业平台分为5小步执 ...
随机推荐
- ADOStoredProc动态调用存储过程
有些用ADOStoredProc进行操作时,要动态创建输入输出参数,一定要用 ADOStoredProc1.Parameters.Refresh;将参数进行刷新一下.
- https传输流程(加密方式、证书、传输安全)
http的缺点 http的数据是明文传输 如果用明文传输 很容易被第三方获取到传输的数据 因此我们一般要在网络传输过程中对数据进行加密 常见的加密方式 对称加密 秘钥key 待加密数据data a和b ...
- web目录扫描工具
在对Web网站进行审计时,首先我们会对进场出现的/admin和robots.txt等信息和目录进行初步的审计获取重要的信息,但是手动猜测目录过于缓慢,使用工具能够迅速的爆破出目录 目录爆破取决于字典的 ...
- 今日Python相关练习
1.计算日期范围内的所有日期 def get_date_list(begin_date,end_date): date_list = [] while begin_date <= end_dat ...
- RPC通信原理概述
RPC通信原理概述 1.RPC概述 1.什么是RPC RPC(Remote Procedure Call Protocol)远程过程调用协议.它是一种通过网络从远程计算机程序上请求服务,而不需要了解底 ...
- 修改host文件
host文件路径 Windows 系统:C:\Windows\System32\drivers\etc\hosts Linux 系统:/etc/hosts Mac(苹果电脑)系统:/etc/hosts ...
- RFS[3]: No standby redo logfiles available for thread 1
问题描述:备库恢复DG之后,mrp进程一直是wait_for_log,主库创建数据没有正常同步,只有在切换归档的时候备库才能同步主库数据 查看主库日志,主库RFS进程提示没有可用的standby re ...
- Zabbix_sender基础命令浅析
zabbix_sender是Zabbix监控系统中用于向Zabbix服务器发送数据的命令行工具.以下是zabbix_sender基础命令教学: 语法: zabbix_sender -z <ser ...
- Tomcat长轮询原理与源码解析
Tomcat长轮询原理与源码解析 系列文章目录和关于我 零丶长轮询的引入 最近在看工作使用到的diamond配置中心原理,发现大多数配置中心在推和拉模型上做的选择出奇的一致选择了基于长轮询的拉模型 基 ...
- 简单的了解下 Fetch API 的工作原理
一.简介 Fetch API是一种现代的Web API,提供了一种异步获取网络资源的方法.由于其简单性.灵活性和一致性,它已经成为Web应用程序中获取数据和资源的流行选择.在本文中,我们将深入探讨Fe ...