
Jenkins + gitlab + harbor + k8s 自动化部属
Jenkins + gitlab + harbor + k8s 自动化部属
一、环境准备
1、准备三台服务器主机安装k8s,准备一台主机安装gitlab、harbor、jenkins
2、所有主机安装docker 【参考】
3、安装服务
二、部属流程
一)常规部署
1、jenkins 新增任务
新增任务 -> 配置任务
:::note{title=“注”}
要记住webhook 地址,生成令牌,用来配置gitlab的钩子。当gitlab提交代码的时候主动触发jenkins编译流程
:::
2、gitlab 上配置钩子
3、测试本地提交代码
二)、脚本部署
1、Jenkinsfile docker-compose
pipeline {
agent any
environment {
harbor_host = "harbor.wjaiot.net"
project_name = "xz-server"
image = "${harbor_host}/${project_name}/${server_name}-${server_type}"
config_path="service/${server_name}/rpc/etc/ch/config_test.yaml"
date = "${BUILD_TIMESTAMP}"
}
stages {
stage('编译') {
steps {
sh """
export GOPROXY=https://goproxy.cn
go mod tidy
go build -o ./bin/main service/${server_name}/${server_type}/${server_name}.go
"""
}
}
stage('构建镜像') {
steps {
sh """
docker build -t ${image}:latest .
docker tag ${image}:latest ${image}:test-${date}
docker push ${image}:test-${date}
"""
}
}
stage('部署') {
steps {
writeFile file: 'v-hosts', text: '''[test]
ip ansible_ssh_port=36000
ip ansible_ssh_port=36000'''
writeFile file: 'ansible.cfg', text: '''[defaults]
inventory = hosts
host_key_checking = False
command_warnings = false'''
writeFile file: "${server_name}-${server_type}-docker-compose.yaml", text: """version: \'3\'
services:
${server_name}-${server_type}:
image: ${image}:test-${date}
environment:
TZ: "Asia/Shanghai"
XZ_REGION: "ch"
XZ_ETCD_HOSTS: "ip:2379"
ENV: "test"
restart: always
network_mode: "host"
volumes:
- /data/logs:/app/logs
"""
sh """
ansible -i v-hosts test -m copy -a 'src=${server_name}-${server_type}-docker-compose.yaml dest=/mnt/'
ansible -i v-hosts test -m shell -a 'cd /mnt/ && docker-compose -p saas -f ${server_name}-${server_type}-docker-compose.yaml up -d'
"""
}
}
}
}
2、Jenkinsfile k8s
-
创建更新
1)配置k8s环境,jenkins必须能够使用docker、kubectl,使用挂载的方式
version: "3.8"
services:
jenkins:
image: jenkins/jenkins:2.419-centos7
restart: always
ports:
- "8081:8080"
- "50000:50000"
expose:
- "8081"
- "50000"
privileged: true
user: root
container_name: jenkins
volumes:
- ~/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/bin/kubectl:/usr/bin/kubectl
- /root/.kube/config:/root/.kube/config
- /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
environment:
JAVA_OPTS: '-Djava.util.logging.config.file=/var/jenkins_home/log.properties'
2)配置kubectl 配置 ~/.kube/config,通过挂载的方式实现
#####环境变量#####
harbor_host="x.x.x.x:5000"
project_name="ci-test"
tag="latest"
time=$(date "+%Y%m%d%H%M%S")
. ~/.bashrc
#####编译+构建镜像#####
docker login -u CI-runner -p CI-runner123456 x.x.x.x:5000
docker build -t x.x.x.x/platform/${project_name}:${tag} .
docker push x.x.x.x:5000/platform/${project_name}:${tag}
########部署 #######
sed -i "s#PROJECT_NAME#${project_name}#g" deployment.yaml
sed -i "s#TAG#${tag}#g" deployment.yaml
cat deployment.yaml
echo "start deployment"
kubectl version
kubectl apply -f deployment.yaml
# 清理无用镜像
#docker image prune -f
- 更新
#####环境变量#####
harbor_host="harbor.wjaiot.net"
project_name="xz-server"
time=$(date "+%Y%m%d%H%M%S")
. ~/.bashrc
#####编译+构建镜像#####
export GOPROXY=https://goproxy.cn
go mod tidy
for i in `echo $server_name |sed 's/,/ /g'`
do
mua=`echo $i |awk -F '-' '{print $1}'`
mub=`echo $i |awk -F '-' '{print $2}'`
image="${harbor_host}/${project_name}/${mua}-${mub}"
rm -rf ./bin/main
go build -o ./bin/main service/${mua}/${mub}/${mua}.go
docker build . -t ${image}:test-${time}
docker push ${image}:test-${time}
done
########部署 #######
for i in `echo $server_name |sed 's/,/ /g'`
do
mua=`echo $i |awk -F '-' '{print $1}'`
mub=`echo $i |awk -F '-' '{print $2}'`
kk set image deployment/$mua-$mub $mua-$mub=harbor.wjaiot.net/xz-server/$mua-$mub:test-${time} --record -n xz-server-test
done
# 清理无用镜像
#docker image prune -f
- 效果
三、参考
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果