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小步执 ...
随机推荐
- mfc edit只允许输入数字
1.给EDIT控件添加 EN_CHANGE 事件 2.事件中的代码如下: 1 CString strEditVidoe; 2 GetDlgItem( iId )->GetWindowText( ...
- 笔精墨妙,妙手丹青,微软开源可视化版本的ChatGPT:Visual ChatGPT,人工智能AI聊天发图片,Python3.10实现
说时迟那时快,微软第一时间发布开源库Visual ChatGPT,把 ChatGPT 的人工智能AI能力和Stable Diffusion以及ControlNet进行了整合.常常被互联网人挂在嘴边的& ...
- Android笔记--常用布局
线性布局--LinearLayout 线性布局的方向 orientation属性值:若为horizontal,内部视图在水平方向从左往右排列 若为vertical,内部视图在垂直方向从上往下排列 如果 ...
- 全网最详细中英文ChatGPT接口文档(一)开始使用ChatGPT——导言
目录 Introduction 导言 Overview 概述 Key concepts 关键概念 Prompts and completions 提示和完成 Tokens 标记/符号 Models 模 ...
- 【2019CCPC秦皇岛:A】Angle Beats 分类讨论 (unordered_map 加 hash)
题意:n个给定点,q个询问点,每次询问给出一个坐标A,问从n中选定两个点B,C,有多少种方案使得ABC是个直角三角形. 思路:直角三角形能想的就那几个,枚举边,枚举顶点,这个题都行,写的枚举顶点的,A ...
- FastCorrect:语音识别快速纠错模型丨RTC Dev Meetup
前言 「语音处理」是实时互动领域中非常重要的一个场景,在声网发起的「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自百度.寰宇科技和依图的技术专家,围绕该话题进行了相 ...
- MySQL 更新执行的过程
更多内容,前往 IT-BLOG Select语句的执行过程会经过连接器.分析器.优化器.执行器.存储引擎,同样的 Update语句也会同样走一遍 Select语句的执行过程. 但是和 Select ...
- Three.js 进阶之旅:全景漫游-初阶移动相机版
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 摘要 3D 全景技术可以实现日常生活中的很多功能需求,比如地图的街景全景模式.数 ...
- [WEB]对于"Refused to execute script from 'http://xx.xx.xx/yy/zz.js' because its MIME type ('') is not executable, and strict MIME type checking is enabled."问题的解决办法
1 文由 阶段一:对WEB服务器HTTP通信的header设置了安全头(X-Content-Options:nosniff) 两个月前协助交付侧大哥处理.修复一个三级等保项目的第三方安全公司释出的安全 ...
- etcd/raft选举源码解读
ETCD-raft笔记 0. 引言 该篇博客基于etcd v3.5.7版本,首先会简单介绍etcd/raft对Raft选举部分的算法优化,然后通过源码分析etcd/raft的选举实现. 1. etcd ...