kubesphere3+jenkins实现cicd部署nodejs前端项目 |
发表者:admin分类:Devops2022-01-13 13:05:55 阅读[956] |
kubesphere3+jenkins实现cicd部署nodejs前端项目
一,具体环境.
1,两台主机,centos7+kubesphere3.2.1+devops-jenkins,his是项目企业空间名称。
2,演示demo,是ruoyi的ui前端,地址: https://gitee.com/micoder/demo.git,已经写好实现的Jenkinsfile,Dockerfile,deploy.yaml。
3,需要配置 gitee-id,凭证为 gitee的账号密码信息。k8s-demo是kubeconfig,是部署deploy.yaml资源时使用的凭证。aliyun-id是镜像仓库的账号密码的领证,这几个都是在流水线中的凭证里面创建的。这些凭证就是jenkinsfile中用来变量替换的。
4,还需要一个 密保字典 aliyun-docker-id ,这个是给微服务YAML文件应用部署时拉取镜像需要的,如果不需要,除非你是公开镜像。
如下图:
5,关于kubesphere登陆账号: devops-yp ,注意如果只是在 '企业空间成员' 中添加了账号,并且给了最大权限,那可能会出现,流水线最后一步k8s部署YAML文件时会出错误,提示没有对应his空间资源使用权限。
可以把devops-yp账号再加入到 his '项目成员' ,如果还是提示一样的问题。可以使用admin账号登陆,到 集群管理 ----> 配置字典 ----> kubesphere-controls-system -----> 找到自己账号配置信息中,将namespace 修改成自己需要的名称空间。
具体如下图:
二,具体过程。
1,使用kubesphere WebUI建好项目与his名称空间,并添加相关成员,不再细说。
2,建立一个devops流水线,并创建好相关流程。流水线的第2步,是我在k8s内部作了一个nginx站点,放置了新版的nodej的rpm安装包,
实现使用kubesphere的base镜像安装nodejs-16.x版本。并且k8s部署使用的deploy/deploy.yaml文件,会部署容器并创建一个service,再创建
一个ingress域名访问service,已经提前在k8s中安装了ingress,并监听了80,443端口(方法可以看这里https://www.micoder.cc/blog/2553.html)。
如下图:
3,流水线可以使用参数变量来构建,主要流程- git代码 ----> nodejs打包(建议直接使用docker中的容器打包,而不是使用kubesphere的低版本的镜像) ----> 镜像构建,上传-------> 部署至k8s。
具体 Jenkinsfile内容如下:
pipeline {
agent {
node {
label 'base'
}
}
stages {
stage('checkout') {
agent none
steps {
container('base') {
git(url: 'https://gitee.com/micoder/demo.git', branch: 'master', changelog: true, poll: false, credentialsId: 'gitee-id')
sh 'ls -al'
}
}
}
stage('build') {
agent none
steps {
container('base') {
sh 'rpm -ivh http://nodejs-web.his/nodejs-16.rpm'
sh 'npm -v'
sh 'npm install --registry=https://registry.npm.taobao.org'
sh 'npm run build:prod'
sh 'ls -al dist'
}
}
}
stage('image-build') {
agent none
steps {
container('base') {
sh 'ls -al dist'
sh 'docker build -t ui-web:latest -f Dockerfile .'
}
}
}
stage('image-push') {
agent none
steps {
container('base') {
sh 'docker tag ui-web:latest $REGISTRY/$ALIYUNHUB_NAMESPACE/ui-web:SNAPSHOT-$BUILD_NUMBER'
withCredentials([usernamePassword(credentialsId : 'aliyun-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker push $REGISTRY/$ALIYUNHUB_NAMESPACE/ui-web:SNAPSHOT-$BUILD_NUMBER'
}
}
}
}
stage('deploy to dev') {
agent none
steps {
container('base') {
withCredentials([
kubeconfigFile(
credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
variable: 'KUBECONFIG')
]) {
sh 'envsubst < deploy/deploy.yaml | kubectl apply -f -'
}
}
}
}
}
environment {
DOCKER_CREDENTIAL_ID = 'aliyun-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'k8s-demo'
REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
DOCKERHUB_NAMESPACE = 'ui-web'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'ui-web'
ALIYUNHUB_NAMESPACE = 'k8sops2021'
}
}
4,以上jenkinsfile中的environment中的都是参数变量,注意 KUBECONFIG_CREDENTIAL_ID = 'k8s-demo'
其中 k8s-demo是创建的kubeconfig凭证,在流水线中 显示 如下图。
5,deploy/deploy.yaml,是gitee项目中的k8s部署YAML文件。当然也可以直接使用ssh创建到k8s主机执行YAML文件,也是一样的效果。
三,最后运行流水线,提示运行成功,deployment,service,ingress都会配置完成。
转载请标明出处【kubesphere3+jenkins实现cicd部署nodejs前端项目】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论