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小步执 ...
随机推荐
- Liunx下tomcat安装配置
1.在LIUNX下下载tomcat.wget apache-tomcat-7.0.41.tar.gz 2.在安装目录下解压. tar -zxvf apache-tomcat-7.0.41.tar.gz ...
- Hyperf安装
转载网址: https://www.cnblogs.com/lyc94620/p/12821723.html
- [RoarCTF 2019]Easy Calc 1
进入主页面是一个计算器,可以计算 右键源代码发现提示信息,javascript脚本,其中还有calc.php文件 注释说明了这里引入了waf 尝试访问calc.php 是一道命令执行,尝试输入phpi ...
- ASP.NET Core - 配置系统之自定义配置提供程序
4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口 ...
- Python学习笔记--PySpark的相关基础学习(一)
PySpark包的下载 下载PySpark第三方包: 构建PySpark的执行环境入口对象 PySpark的编程模型 数据输入 对于SparkContext对象里面的成员方法parallelize,支 ...
- Javaweb学习笔记第七弹
Maven依赖范围 对于Maven的安装配置等环境准备问题,可详细参考我的前几篇博客, 网址1:https://www.cnblogs.com/liuzijin/p/16654344.html 网址2 ...
- 创业团队如何落地敏捷测试,提升质量效能?丨声网开发者创业讲堂 Vol.03
前言 老牛是资深测试专家.技术架构师.具备多年互联网公司从业经验以及十多年一线研发经验.同时也是 DevOps 践行者,近几年兼任质量团队的管理工作.其中,负责的某技术平台,稳定运行两年多,累计调用量 ...
- Latex符号
上标 $\hat{x}$ : \(\hat{x}\) $\widehat{x}$ : \(\widehat{x}\) $\tilde{x}$ : \(\tilde{x}\) $\widetilde{x ...
- 64位的单周期 RISC-V 模拟器
分享一个我最近完成过的小项目--64位的单周期 RISC-V 模拟器,这个项目我最近参与一生一芯计划过程中完成的一个小项目. 需要用到的相关知识:Verilog.Verilator.计算机组成原理.汇 ...
- sealos踩坑记录
前言 记录下我安装sealos的踩坑历程,全网基本没有什么类似的可靠资料,也许是因为太小众了吧,希望能帮助到搜索到此文的人. sealos是什么 Sealos 是以 kubernetes 为内核的云操 ...