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:
apiVersionv1
kindConfigMap
metadata
labels
appmysql
namemysql
namespacedroneci
data
initdb.sql
create database if not exists gogs;
create database if not exists drone;
---
apiVersionapps/v1
kindDeployment
metadata
labels
appmysql
namemysql
namespacedroneci
spec
replicas1
selector
matchLabels
appmysql
template
metadata
labels
appmysql
spec
containers
env
nameMYSQL_ROOT_PASSWORD
value'123456'
nameTZ
valueAsia/Shanghai
image'mysql:8.0'
imagePullPolicyIfNotPresent
namemysql
volumeMounts
mountPath/var/lib/mysql
namevolv
mountPath/docker-entrypoint-initdb.d
namevolv2
volumes
hostPath
path/root/k8s/droneci/mysql/var/lib/mysql
typeDirectoryOrCreate
namevolv
configMap
namemysql
namevolv2
---
apiVersionv1
kindService
metadata
labels
appmysql
namemysql
namespacedroneci
spec
ports
port3306
protocolTCP
targetPort3306
nodePort10040
selector
appmysql
typeNodePort
---
apiVersionapps/v1
kindDeployment
metadata
labels
appregistry
nameregistry
namespacedroneci
spec
replicas1
selector
matchLabels
appregistry
template
metadata
labels
appregistry
spec
containers
image'registry'
imagePullPolicyIfNotPresent
nameregistry
volumeMounts
mountPath/var/lib/registry
namevolv
volumes
hostPath
path/root/k8s/droneci/registry/var/lib/registry
typeDirectoryOrCreate
namevolv
---
apiVersionv1
kindService
metadata
labels
appregistry
nameregistry
namespacedroneci
spec
ports
port5000
nodePort50000
protocolTCP
targetPort5000
selector
appregistry
typeNodePort
---
apiVersionapps/v1
kindDeployment
metadata
labels
appphpmyadmin
namephpmyadmin
namespacedroneci
spec
replicas1
selector
matchLabels
appphpmyadmin
template
metadata
labels
appphpmyadmin
spec
containers
env
namePMA_HOST
valuemysql
namePMA_PORT
value'3306'
namePMA_USER
valueroot
namePMA_PASSWORD
value'123456'
imagephpmyadmin/phpmyadmin
imagePullPolicyIfNotPresent
namephpmyadmin
---
apiVersionv1
kindService
metadata
labels
appphpmyadmin
namephpmyadmin
namespacedroneci
spec
ports
port80
protocolTCP
targetPort80
nodePort10050
selector
appphpmyadmin
typeNodePort
---
apiVersionv1
kindService
metadata
labels
appgogs
namegogs
namespacedroneci
spec
ports
name3000-3000
port3000
protocolTCP
targetPort3000
nodePort10080
name22-22
port22
protocolTCP
targetPort22
nodePort10022
selector
appgogs
typeNodePort
---
apiVersionv1
kindConfigMap
metadata
labels
appgogs
namegogs
namespacedroneci
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
---
apiVersionapps/v1
kindDeployment
metadata
labels
appgogs
namegogs
namespacedroneci
spec
replicas1
selector
matchLabels
appgogs
template
metadata
creationTimestampnull
labels
appgogs
spec
containers
env
nameTZ
valueAsia/Shanghai
imagegogs/gogs
imagePullPolicyIfNotPresent
namegogs
volumeMounts
mountPath/data/gogs/conf/app.ini
subPathappini
nameconfig
mountPath/data
namevolv
volumes
configMap
namegogs
nameconfig
hostPath
path/root/k8s/droneci/gogs/data
typeDirectoryOrCreate
namevolv
---
apiVersionapps/v1
kindDeployment
metadata
labels
appdrone
namedrone
namespacedroneci
spec
replicas1
selector
matchLabels
appdrone
template
metadata
labels
appdrone
spec
containers
env
nameDRONE_OPEN
nameDRONE_GOGS
nameDRONE_PROVIDER
valuegogs
nameDRONE_GOGS_SERVER
value'http://gogs:3000'
nameDRONE_SERVER_HOST
valuedrone
nameDRONE_RPC_SECRET
valuehh
nameDRONE_SERVER_PROTO
valuehttp
nameDRONE_USER_CREATE
value'username:moonfdd,admin:true'
nameDRONE_DATABASE_DRIVER
valuemysql
nameDRONE_DATABASE_DATASOURCE
value'root:123456@tcp(mysql:3306)/drone?parseTime=true'
image'drone/drone:1'
imagePullPolicyIfNotPresent
namedrone
volumeMounts
mountPath/data
namevolv
volumes
hostPath
path/root/k8s/droneci/drone/data
typeDirectoryOrCreate
namevolv
---
apiVersionv1
kindService
metadata
labels
appdrone
namedrone
namespacedroneci
spec
ports
port80
protocolTCP
targetPort80
nodePort10010
selector
appdrone
typeNodePort
---
apiVersionapps/v1
kindDeployment
metadata
labels
appdrone-runner-ssh
namedrone-runner-ssh
namespacedroneci
spec
replicas1
selector
matchLabels
appdrone-runner-ssh
template
metadata
labels
appdrone-runner-ssh
spec
containers
env
nameDRONE_RPC_SECRET
valuehh
nameDRONE_RPC_HOST
valuedrone
nameDRONE_RPC_PROTO
valuehttp
image'drone/drone-runner-ssh'
imagePullPolicyIfNotPresent
namedrone-runner-ssh
---
apiVersionv1
kindService
metadata
labels
appdrone-runner-ssh
namedrone-runner-ssh
namespacedroneci
spec
ports
port3000
protocolTCP
targetPort3000
nodePort10025
selector
appdrone-runner-ssh
typeNodePort
---
apiVersionapps/v1
kindDeployment
metadata
labels
appdrone-runner-docker
namedrone-runner-docker
namespacedroneci
spec
replicas1
selector
matchLabels
appdrone-runner-docker
template
metadata
labels
appdrone-runner-docker
spec
containers
env
nameDRONE_RPC_SECRET
valuehh
nameDRONE_RPC_HOST
valuedrone
nameDRONE_RPC_PROTO
valuehttp
nameDRONE_RUNNER_CAPACITY
value'1'
nameDRONE_RUNNER_NAME
valuerunner-docker
image'drone/drone-runner-docker:1'
imagePullPolicyIfNotPresent
namedrone-runner-docker
volumeMounts
mountPath/var/run/docker.sock
namevolv
volumes
hostPath
path/var/run/docker.sock
typeSocket
namevolv
---
apiVersionv1
kindService
metadata
labels
appdrone-runner-docker
namedrone-runner-docker
namespacedroneci
spec
ports
port3000
protocolTCP
targetPort3000
nodePort10020
selector
appdrone-runner-docker
typeNodePort访问http://192.168.204.13:10080/,创建账号,创建项目。然后git clone http://192.168.204.13:10080/moonfddgroup/testdemo.git。



写好.drone.yml文件,然后push上去。.drone.yml文件内容如下:
kindpipeline
typedocker
namedev
steps
namebuild
imagegolang
pullif-not-exists
environment
GOPROXYhttps//goproxy.cn,direct
CGO_ENABLED0
GO111MODULEon
GOOSlinux
GOARCHamd64
commands
go env
trigger
branch
masterpush上去,drone里的结果如下:


第二种方法:
1.先copy项目
git clone https://gitee.com/moonfdd/k8syaml.git
cd k8syaml/droneci2.修改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 环境结果如下:











