k8s学习(8)--devops自动化发布项目
- 首先开启devops,这里也同时开启sonar qube代码检测
kubectl edit cm -n kubesphere-system ks-installer

- 创建凭证
创建git凭证,这里代码是放在gitee上面保存的,输入gitee登录的用户名和密码

创建sonar凭证
查看sonarqube暴露的端口
kubectl get svc --all-namespaces

通过admin/admin登录以后,会让我们enter a name for your token,这里我们输入gulimall

依次选择java,maven:

mvn sonar:sonar \-Dsonar.host.url=http://10.12.34.53:32411 \-Dsonar.login=dea8cd0312f13e132b8843d3fa63e11eebc829ca
创建凭证:

这里输入刚刚生成的token

创建kubeconfig凭证,用于访问接入正在运行的kubenernetes

创建dockerhub远程镜像仓库凭证

2. 创建项目
在企业空间下创建自己的一个项目

3. 创建一个devops工程

4. 在devops工程下面创建流水线

进入创建的流水线,可以编辑jenkinsfile或者流水线

这里我已经创建好一个流水线了,主要是代码拉取,sonar检测,推送值dockerhub镜像,再创建服务
pipeline {agent {node {label 'maven'}}stages {stage('拉取代码') {steps {git(credentialsId: 'gitee-id', url: 'https://gitee.com/yuwengoku/security.git', branch: 'master', changelog: true, poll: false)container('maven') {sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn-settings.xml '}}}stage('sonar代码质量分析') {steps {container('maven') {withCredentials([string(credentialsId: "$SONAR_CREDENTIAL_ID", variable: 'SONAR_TOKEN')]) {withSonarQubeEnv('sonar') {sh "mvn sonar:sonar -gs `pwd`/mvn-settings.xml -Dsonar.branch=$BRANCH_NAME -Dsonar.login=$SONAR_TOKEN"}}timeout(time: 1, unit: 'HOURS') {waitForQualityGate true}}}}stage('构建镜像并推送') {steps {container('maven') {sh 'mvn -Dmaven.test.skip=true -gs `pwd`/mvn-settings.xml clean package'sh 'cd $PROJECT_NAME && docker build --no-cache -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION .'withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION'}}}}stage('部署到开发环境') {steps {input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?")kubernetesDeploy(configs: "$PROJECT_NAME/deploy/**", enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")}}}environment {DOCKER_CREDENTIAL_ID = 'dockerhub-id'GITEE_CREDENTIAL_ID = 'gitee-id'KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'REGISTRY = 'docker.io'DOCKERHUB_NAMESPACE = 'yuwengoku'GITEE_ACCOUNT = 'yuwengoku'SONAR_CREDENTIAL_ID = 'sonar-qube'BRANCH_NAME = 'master'}parameters {string(name: 'PROJECT_VERSION', defaultValue: 'v0.0Beta', description: '')string(name: 'PROJECT_NAME', defaultValue: 'gateway', description: '')}
}
- 执行流水线部署服务,输入镜像版本和项目名称

项目名称即每个微服务下pom文件的名称

部署好了,可以查看服务

- 测试

- 问题总结
7.1 如果和我一样是部署微服务的话,如果微服务中用common这种共通代码的话,则pom中不能添加一下插件
org.springframework.boot spring-boot-maven-plugin repackage

而web服务,即需要@SpringBootApplication作为启动类的微服务,则必须在pom中添加此插件,也就是每个web微服务中必须单独添加此插件,不能在总的pom文件中添加此插件
7.2 每个流水线都是一个独立的空间,如果一个流水线只负责拉取代码,另一个流水线用来编译镜像,是不行的,两边不互通
7.3 在插入审核语句时,message中如果要插入参数,则需要前后加空格或者别的标志
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?")
或
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将 $PROJECT_NAME 部署到集群中?")
不能
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将$PROJECT_NAME部署到集群中?")
7.4 input审核语句改进

这里可以看到,默认时Proceed来表示同意,我们需要进行修改
input(id: "deploy-to-dev-$PROJECT_NAME", message: "是否将[$PROJECT_NAME]部署到集群中?", ok: "部署")

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
