Kubernetes CICD发布架构流程思路
此篇只适合cicd的架构流程思维,不建议作为任何部署环境。前提环境:kubernetesJenkinsGitlabHarbor具体过程可参考文章涉及参考文档:阿里文档部分:快速搭建Jenkins环境并完成流水线作业 :获取镜像Jenkins on ACK实战(二):这是一条简单的流水线 :kubectl 部署到k8s 集群Serverless Kubernetes容器服务中快速部署jenkins环
·
此篇只适合cicd的架构流程思维,不建议作为任何部署环境。
前提环境:
- kubernetes
- Jenkins
- Gitlab
- Harbor
- 必须有Master与Slave分布式 环境
涉及参考文档:
阿里文档部分:
- 快速搭建Jenkins环境并完成流水线作业 : 获取镜像
- Jenkins on ACK实战(二):这是一条简单的流水线 :kubectl 部署到k8s 集群
- Serverless Kubernetes容器服务中快速部署jenkins环境及执行流水线构建: pipeline 语法
插件文档介绍:
涉及镜像:
- jenkins-slave-jnlp :jnlp代理
- maven: 编译打包
- kaniko: 镜像编译打包上传
- kubectl: 发布到k8s集群中
demo Git源码
https://github.com/AliyunContainerService/jenkins-demo.git
接下来步骤测试过程,踩坑必然希望不要放弃坚持下去
一、添加maven镜像
系统管理——> 节点管理——> Pod Templates——>添加Pod模板——>maven
registry.cn-beijing.aliyuncs.com/acs-sample/jenkins-slave-maven:3.3.9-jdk-8-alpine
二、maven编译测试
1、下载源码
git clone https://github.com/AliyunContainerService/jenkins-demo.git
2、Gitlab新建项目
将文件上传到此项目下,具体不做操作,只需要将git clone此项目到本地目录,再将之前git下来的文件复制到Gitlab拉取下来的目录再上传即可。
3、书写pipeline 语法测试
pipeline {
agent{
node{
label 'jnlp-slave'
}
}
stages {
stage('Git拉取代码') {
steps {
git 'http://192.168.11.178/root/aliyun.git'
}
}
stage('编译') {
steps {
container('maven') {
sh """
mvn package -B -DskipTests
"""
}
}
}
}
}
构建成功
三、kaniko编译打包
1、查看git下来dockerfile文件内容
2、添加kaniko镜像
3、书写pipeline 语法测试
pipeline {
agent{
node{
label 'jnlp-slave'
}
}
stages {
stage('Git拉取代码') {
steps {
git 'http://192.168.11.178/root/aliyun.git'
}
}
stage('编译') {
steps {
container('maven') {
sh """
mvn package -B -DskipTests
"""
}
}
}
stage('镜像打包上传镜像仓库'){
steps{
container("kaniko") {
sh "kaniko -f `pwd`/Dockerfile -c `pwd` --skip-tls-verify=true --destination=192.168.11.128:4430/library/test:latest"
}
}
}
}
}
现在只需要考虑如何将认证文件挂着到容器中,具体可查看github kaniko 简介,接下来操作。
4、k8s master节点登录harbor
docker login -u用户名 -p密码 Harbor地址
config.json文件已生成。
5、生成secret 密钥
kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file=~/.docker/config.json
6、再次添加kaniko secret密钥认证
7、再次构建Job
再次查看是否有镜像
踩坑点二个如下图:
四、修改deployment.yaml内容
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-java-demo
namespace: jenkins
spec:
replicas: 2
selector:
matchLabels:
app: jenkins-java-demo
template:
metadata:
labels:
app: jenkins-java-demo
spec:
containers:
- name: jenkins-java-demo
image: 192.168.11.128:4430/library/test:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-java-demo
namespace: jenkins
spec:
ports:
- name: jenkins-java-demo
port: 8080
targetPort: 8080
nodePort: 30082
selector:
app: jenkins-java-demo
type: NodePort
直接在gitlab上修改文件,也可以在项目修改修改完毕记得上传上去。
五、发布到K8s集群中
1、创建访问集群的serviceaccounts
kubectl create sa admin -n kube-system
2、admin赋予集群cluster-admin角色(最大权限不建议此操作,后期再优化)
kubectl create clusterrolebinding dengm --clusterrole=cluster-admin --serviceaccount=kube-system:admin
3、kubernetes 管道语法参考必看必看
4、获取为ServiceAccount admin
自动生成的令牌的名称
kubectl -n kube-system get serviceaccount admin -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'
5、检索令牌并使用base64对其进行解码。
kubectl -n kube-system get secrets admin-token-nswf5 -o go-template --template '{{index .data "token"}}' | base64 -d
6、将令牌粘贴到Secret text凭证中
7、书写pipeline 发布到k8s集群中
pipeline {
agent{
node{
label 'jnlp-slave'
}
}
stages {
stage('Git拉取代码') {
steps {
git 'http://192.168.11.178/root/aliyun.git'
}
}
stage('编译') {
steps {
container('maven') {
sh """
mvn package -B -DskipTests
"""
}
}
}
stage('镜像打包上传镜像仓库'){
steps{
container("kaniko") {
sh "kaniko -f `pwd`/Dockerfile -c `pwd` --skip-tls-verify=true --destination=192.168.11.128:4430/library/test:latest"
}
}
}
stage('发布到k8s集群'){
steps{
container("kubectl") {
withKubeConfig(caCertificate: '',
clusterName: '',
contextName: '',
credentialsId: 'admin-sa',
namespace: '',
serverUrl: 'https://kubernetes.default.svc.cluster.local'
)
{
sh '''
kubectl apply -f `pwd`/deployment.yaml -n jenkins
kubectl wait --for=condition=Ready pod -l app=jenkins-java-demo --timeout=60s -n jenkins
'''
}
}
}
}
}
}
黑屏查看Pod信息,可以看到有两个容器正在创建中
六、访问项目
kubectl get pod,svc,ep -n jenkins |grep jenkins-java-demo
更多推荐
已为社区贡献3条内容
所有评论(0)