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
replicas1
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
port3306
protocol TCP
targetPort3306
nodePort10040
selector
app mysql
type NodePort
---
apiVersion apps/v1
kind Deployment
metadata
labels
app registry
name registry
namespace droneci
spec
replicas1
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
port5000
nodePort50000
protocol TCP
targetPort5000
selector
app registry
type NodePort
---
apiVersion apps/v1
kind Deployment
metadata
labels
app phpmyadmin
name phpmyadmin
namespace droneci
spec
replicas1
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
port80
protocol TCP
targetPort80
nodePort10050
selector
app phpmyadmin
type NodePort
---
apiVersion v1
kind Service
metadata
labels
app gogs
name gogs
namespace droneci
spec
ports
name 3000-3000
port3000
protocol TCP
targetPort3000
nodePort10080
name 22-22
port22
protocol TCP
targetPort22
nodePort10022
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
replicas1
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
replicas1
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
port80
protocol TCP
targetPort80
nodePort10010
selector
app drone
type NodePort
---
apiVersion apps/v1
kind Deployment
metadata
labels
app drone-runner-ssh
name drone-runner-ssh
namespace droneci
spec
replicas1
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
port3000
protocol TCP
targetPort3000
nodePort10025
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
replicas1
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
port3000
protocol TCP
targetPort3000
nodePort10020
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_ENABLED0
GO111MODULEon
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 环境
结果如下: