东莞连衣裙 东莞网站建设,本科学计算机是做网站吗,湖北省麻城建设局官方网站,o2o电商网站基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 测试jenkins的CI/CD在Jenkins中安装kubernetes插件安装blueocean插件配置jenkins连接到我们存在的k8s集群配置pod-template添加自己的dockerhub凭据测试通过Jenkins部署应用发布到k8s开发环境、测试环境、生产环… 基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 测试jenkins的CI/CD在Jenkins中安装kubernetes插件安装blueocean插件配置jenkins连接到我们存在的k8s集群配置pod-template添加自己的dockerhub凭据测试通过Jenkins部署应用发布到k8s开发环境、测试环境、生产环境 基于Jenkinsk8sGitharbor构建DevOps容器云平台编写jenkins pipelineJenkins实现k8s应用按照指定版本回滚 jenkinsk8sharbor实现DevOps编写jenkins pipeline Jenkins接入SonarqubeJenkinsk8snexusgitlabharborsonarqubespringloud构建DevOps配置sonarqubeJenkins界面添加harbor凭据安装nexus概念 安装gitlab在Jenkins安装git插件提交本地代码到gitlab: Jenkinsk8snexussonarqubeharborgitlab构建DevOps Jenkins Pipeline语法介绍Jenkins Pipeline介绍总结 测试jenkins的CI/CD
在Jenkins中安装kubernetes插件
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/ 系统管理------插件管理------可选插件------搜索kubernetes------出现如下 清华大学jekins源 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/安装blueocean插件 配置jenkins连接到我们存在的k8s集群 访问http://192.168.40.180:30002/configureClouds/ 新增一个云,在下拉菜单中选择kubernets并添加 填写云kubernetes配置内容 名称 kubernetes
Kubernetes地址
https://192.168.40.180:6443测试jenkins和k8s是否可以通信 Kubernetes名称空间 jenkins-k8s-sa点击连接测试如果显示Connected to Kubernetes v1.23.1说明测试成功Jenkins可以和k8s进行通信 Jenkins地址: http://jenkins-service.jenkins-k8s.svc.cluster.local:8080配置pod-template 配置pod template 点击Pod Template details 点击容器列表下的添加容器 名称jnlp Docker镜像jenkins-slave-latest:v1 jenkins-slave-latest:v1给上面的pod template添加卷 /var/run/docker.sock
/var/run/docker.sock/root/.kube
/home/jenkins/.kube 在k8smaster1 执行 scp -r /root/.kube/ k8snode1:/root/在Service Account处输入jenkins-k8s-sa这个sa就是我们最开始安装jenkins时的sa 上面配置好之后Apply(应用)------Save(保存) 添加自己的dockerhub凭据 首页------系统管理Manage Credentials管理凭据------点击Stores scoped to Jenkins下的第一行jenkins后的全局显示如下 点击添加凭据出现如下------ usernametest
password1989*****
IDdockerhub
描述随意写一段描述即可
上面改好之后选择确定即可测试通过Jenkins部署应用发布到k8s开发环境、测试环境、生产环境 开发提交代码到代码仓库gitlab–jenkins检测到代码更新–调用k8s api在k8s中创建jenkins slave pod Jenkins slave pod拉取代码—通过maven把拉取的代码进行构建成war包或者jar包—上传代码到Sonarqube进行静态代码扫描- --基于war包构建docker image–把镜像上传到harbor镜像仓库–基于镜像部署应用到开发环境–部署应用到测试环境—部署应用到生产环境。 复制 jenkins-pipeline-script.txt 文件内容至Pipeline Script 在k8s的控制节点创建名称空间 kubectl create ns devlopment
kubectl create ns production
kubectl create ns qatest回到首页 开始创建一个新任务------ 输入一个任务名称jenkins-variable-test-deploy------ 流水线------ 确定------ 在Pipeline script处输入如下内容 node(testhan) {stage(Clone) {echo 1.Clone Stagegit url: https://github.com/luckylucky421/jenkins-sample.gitscript {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(Test) {echo 2.Test Stage}stage(Build) {echo 3.Build Docker Image Stagesh docker build -t xianchao/jenkins-demo:${build_tag} .}stage(Push) {echo 4.Push Docker Image StagewithCredentials([usernamePassword(credentialsId: dockerhub, passwordVariable: dockerHubPassword, usernameVariable: dockerHubUser)]) {sh docker login -u ${dockerHubUser} -p ${dockerHubPassword}sh docker push xianchao/jenkins-demo:${build_tag}}}stage(Deploy to dev) {echo 5. Deploy DEVsh sed -i s/BUILD_TAG/${build_tag}/ k8s-dev.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-dev.yaml
// sh bash running-devlopment.shsh kubectl apply -f k8s-dev.yaml --validatefalse} stage(Promote to qa) { def userInput input(id: userInput,message: Promote to qa?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-qa.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-qa.yaml
// sh bash running-qa.shsh kubectl apply -f k8s-qa.yaml --validatefalsesh sleep 6sh kubectl get pods -n qatest} else {//exit}}stage(Promote to pro) { def userInput input(id: userInput,message: Promote to pro?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-prod.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-prod.yaml
// sh bash running-production.shsh cat k8s-prod.yamlsh kubectl apply -f k8s-prod.yaml --record --validatefalse}}
}应用------保存------立即构建,在#1的Console Output可看到构建过程 在Console Output如果看到如下 点击Input requested 点击继续 上面可以看到已经把应用部署到dev环境了 点击Input requested 通过上面可以看到把应用部署到了pro环境了 验证是否在devlopment和production名称空间下有应用 kubectl get pods -n production
kubectl get pods -n devlopment
kubectl get pods -n qatest通过上面可以看到jenkins对接k8s可以把应用发布到k8s集群的开发、测试、生产环境了。 基于Jenkinsk8sGitharbor构建DevOps容器云平台 需要有一台harbor服务我的harbor安装在了192.168.40.182机器上 添加凭据 首页------系统管理管理凭据------点击Stores scoped to Jenkins下的第一行jenkins显示如下 点击这个全局凭据,出现如下------ 点击左侧的添加凭据出现如下------ usernameadmin
passwordHarbor12345
IDdockerharbor编写jenkins pipeline 因为镜像要上传到harbor私有镜像仓库所以需要在harbor上创建一个项目项目名称是jenkins-demo如下所示 上面项目创建成功之后执行如下步骤 复制jenkins-pipeline-harbor-script.txt文件 里面内容到Pipeline Script 新建一个任务------输入一个任务名称处输入jenkins-harbor------流水线------确定------在Pipeline script处输入如下内容 node(testhan) {stage(Clone) {echo 1.Clone Stagegit url: https://github.com/luckylucky421/jenkins-sample.gitscript {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(Test) {echo 2.Test Stage}stage(Build) {echo 3.Build Docker Image Stagesh docker build -t 192.168.40.182/jenkins-demo/jenkins-demo:${build_tag} .}stage(Push) {echo 4.Push Docker Image StagewithCredentials([usernamePassword(credentialsId: dockerharbor, passwordVariable: dockerHubPassword, usernameVariable: dockerHubUser)]) {sh docker login 192.168.40.182 -u ${dockerHubUser} -p ${dockerHubPassword}sh docker push 192.168.40.182/jenkins-demo/jenkins-demo:${build_tag}}}stage(Deploy to dev) {echo 5. Deploy DEVsh sed -i s/BUILD_TAG/${build_tag}/ k8s-dev-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-dev-harbor.yaml
// sh bash running-devlopment.shsh kubectl apply -f k8s-dev-harbor.yaml --validatefalse} stage(Promote to qa) { def userInput input(id: userInput,message: Promote to qa?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-qa-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-qa-harbor.yaml
// sh bash running-qa.shsh kubectl apply -f k8s-qa-harbor.yaml --validatefalsesh sleep 6sh kubectl get pods -n qatest} else {//exit}}stage(Promote to pro) { def userInput input(id: userInput,message: Promote to pro?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-prod-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-prod-harbor.yaml
// sh bash running-production.shsh cat k8s-prod-harbor.yamlsh kubectl apply -f k8s-prod-harbor.yaml --record --validatefalse}}
}应用------保存------立即构建即可,打开blue ocean会看到如下流程可以手动点击确认 Jenkins实现k8s应用按照指定版本回滚 回到首页 新建一个任务------输入一个任务名称处输入jenkins-variable-test-deploy-rollout------流水线------确定------在Pipeline script处输入如下内容 node(testhan) {stage(git clone) {git url: https://github.com/luckylucky421/jenkins-rolloutsh ls -alsh pwd
}stage(select env) {def envInput input(id: envInput,message: Choose a deploy environment,parameters: [[$class: ChoiceParameterDefinition,choices: devlopment\nqatest\nproduction,name: Env]]
)
echo This is a deploy step to ${envInput}
sh sed -i s/namespace/${envInput}/ getVersion.sh
sh sed -i s/namespace/${envInput}/ rollout.sh
sh bash getVersion.sh
// env.WORKSPACE pwd()
// def version readFile ${env.WORKSPACE}/version.csv
// println version
}stage(select version) {env.WORKSPACE pwd()def version readFile ${env.WORKSPACE}/version.csvprintln versiondef userInput input(id: userInput,message: 选择回滚版本,parameters: [[$class: ChoiceParameterDefinition,choices: $version\n,name: Version]]
)sh sed -i s/version/${userInput}/ rollout.sh
}stage(rollout deploy) {sh bash rollout.sh
}
}点击应用-保存-立即构建 jenkinsk8sharbor实现DevOps 添加凭据 首页------系统管理管理凭据------点击Stores scoped to Jenkins下的第一行jenkins显示如下 点击这个全局凭据,出现如下------
点击左侧的添加凭据出现如下------
usernameadmin
passwordHarbor12345
IDdockerharbor
描述随意上面改好之后选择确定即可
编写jenkins pipeline 因为镜像要上传到harbor私有镜像仓库所以需要在harbor上创建一个项目项目名称是jenkins-demo如下所示 新建一个任务------输入一个任务名称处输入jenkins-harbor------流水线------确定------在Pipeline script处输入如下内容 node(testhan) {stage(Clone) {echo 1.Clone Stagegit url: https://github.com/luckylucky421/jenkins-sample.gitscript {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(Test) {echo 2.Test Stage}stage(Build) {echo 3.Build Docker Image Stagesh docker build -t 192.168.40.132/jenkins-demo/jenkins-demo:${build_tag} .}stage(Push) {echo 4.Push Docker Image StagewithCredentials([usernamePassword(credentialsId: dockerharbor, passwordVariable: dockerHubPassword, usernameVariable: dockerHubUser)]) {sh docker login 192.168.40.132 -u ${dockerHubUser} -p ${dockerHubPassword}sh docker push 192.168.40.132/jenkins-demo/jenkins-demo:${build_tag}}}stage(Deploy to dev) {echo 5. Deploy DEVsh sed -i s/BUILD_TAG/${build_tag}/ k8s-dev-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-dev-harbor.yaml
// sh bash running-devlopment.shsh kubectl apply -f k8s-dev-harbor.yaml --validatefalse} stage(Promote to qa) { def userInput input(id: userInput,message: Promote to qa?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-qa-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-qa-harbor.yaml
// sh bash running-qa.shsh kubectl apply -f k8s-qa-harbor.yaml --validatefalsesh sleep 6sh kubectl get pods -n qatest} else {//exit}}stage(Promote to pro) { def userInput input(id: userInput,message: Promote to pro?,parameters: [[$class: ChoiceParameterDefinition,choices: YES\nNO,name: Env]])echo This is a deploy step to ${userInput}if (userInput YES) {sh sed -i s/BUILD_TAG/${build_tag}/ k8s-prod-harbor.yamlsh sed -i s/BRANCH_NAME/${env.BRANCH_NAME}/ k8s-prod-harbor.yaml
// sh bash running-production.shsh cat k8s-prod-harbor.yamlsh kubectl apply -f k8s-prod-harbor.yaml --record --validatefalse}}
}应用------保存------立即构建即可,打开blue ocean会看到如下流程可以手动点击确认 Jenkins接入Sonarqube 在dockerharbor上安装sonarqube docker run -d --name postgres10 -p 5432:5432 -e POSTGRES_USERsonar -e POSTGRES_PASSWORD123456 postgres
docker run -d --name sonarqube7.9 -p 9000:9000 --link postgres10 -e SONARQUBE_JDBC_URLjdbc:postgresql://postgres10:5432/sonar -e SONARQUBE_JDBC_USERNAMEsonar -e SONARQUBE_JDBC_PASSWORD123456 -v sonarqube_conf:/opt/sonarqube/conf -v sonarqube_extensions:/opt/sonarqube/extensions -v sonarqube_logs:/opt/sonarqube/logs -v sonarqube_data:/opt/sonarqube/data sonarqube在jenkins中安装sonarqube插件 系统管理-插件管理-可选插件搜索sonar找到Sonarqube Scanner 选择Sonarqube Scanner直接安装安装之后重启jenkins即可 在sonarqube的web界面创建一个token 选择Generate出现如下 把copy后面的一串token记录下来 2b91be9d40a28385d8b2f61b0fc0a52efd5abf97回到k8s的master1节点 cd /root/microservic-test
mvn sonar:sonar -Dsonar.host.urlhttp://192.168.40.181:9000 -Dsonar.login2b91be9d40a28385d8b2f61b0fc0a52efd5abf97这样就可以把代码上传到sonarqube了 Jenkinsk8snexusgitlabharborsonarqubespringloud构建DevOps
配置sonarqube
如上面步骤
Jenkins界面添加harbor凭据
如上面步骤
安装nexus
概念
Nexus服务器是一个代码包管理的服务器可以理解 Nexus 服务器是一个巨大的 Library 仓库。Nexus 可以支持管理的工具包括 Maven npm 等对于 JAVA 开发来说只要用到 Maven 管理就可以了。Nexus服务器作用因为传统的中央仓库在国外其地理位置比较远下载速度比较缓慢。因此当公司开发人员数量越来越多时如果不架设一台自己的Nexus服务器会产生大量的流量阻塞带宽并且在出现一些不可抗原因光缆被挖断导致无法连接到中央仓库时开发就会因为无法下载相关依赖包而进度停滞。因此在本地环境部署一台私有的Nexus服务器来缓存所有依赖包并且将公司内部开发的私有包也部署上去方便其他开发人员下载是非常有必要的。因为 Nexus 有权限控制因此外部人员是无法得到公司内部开发的项目包的。 下面将介绍如何将自己的maven构件发布到nexus私服 上呢 在192.168.40.133上安装 docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 -v /etc/localtime:/etc/localtime --name nexus3 sonatype/nexus3在日志中会看到一条消息 Started Sonatype Nexus OSS 3.20.1-01 这意味着Nexus Repository Manager可以使用了。现在转到浏览器并打开 http://your-ip-addr:8081第一步在 pom.xml 文件中声明发布的宿主仓库和 release 版本发布的仓库。 !-- 发布构件到Nexus --distributionManagementrepositoryidreleases/idnamenexus-releases/nameurlhttp://192.168.40.133:8081/repository/maven-releases//url/repositorysnapshotRepositoryidsnapshots/idnamenexus-snapshots/nameurlhttp://192.168.40.133:8081/repository/maven-snapshots//url/snapshotRepository/distributionManagement第二步在 settings.xml 文件中配置 由于用 Maven 分发构件到远程仓库需要认证须要在~/.m2/settings.xml或者中加入验证信息 servers server idpublic/id usernameadmin/username password123456/password /server server idreleases/id usernameadmin/username password123456/password /server server idsnapshots/id usernameadmin/username password123456/password /server /servers注意 settings.xml 中 server 元素下 id 的值必须与 POM 中 repository 或 snapshotRepository 下 id 的值完全一致 。 安装gitlab 在192.168.40.135上安装 docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce gitlab/gitlab-ce改配置增加如下三行 cat /home/gitlab/config/gitlab.rbexternal_url http://192.168.40.135
gitlab_rails[gitlab_ssh_host] 192.168.40.135
gitlab_rails[gitlab_shell_ssh_port] 222重启docker docker restart gitlab登录192.168.40.135即可登录 第一次登录注册账号密码之后报错如下 Your account is pending approval from your GitLab administrator and hence bl docker exec -it gitlab sh
irb(main):004:0 uUser.where(id:1).first#User id:1 root
irb(main):005:0 u.password1234567812345678
irb(main):006:0 u.password_confirmation12345678 12345678
irb(main):007:0 u.save!true再次登录192.168.40.135 用户名是root
密码是12345678在Jenkins安装git插件 系统管理-插件管理-可选插件-搜索git安装即可 Jenkins-凭据-全局凭据 在gitlab上新建项目 创建密钥对 ssh-keygen -t rsa
#一路回车上传密钥 cat ~/.ssh/id_rsa.pub #查看公钥ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8KZUePJykjZzJherolDvXsw8/aL3OMyX/x1HF6Rz73dNZFCERQxA6t/9ahRrya8iY7IIloLjzi5iX666mzYI3fAEq1Ga3Dz2MWqEeWZGdbNKvL9lf0qTy0aLBIRe2fnQwrkrP2YakiqzDRpyjQgr05VkrnF5bVLX2HCHuC2GXwnHUAuJEkjb1f9vmII7YP0BmYDMOMpricQ1LeFnQ9cc2ZvPw6212yiXOrbhrbiMtjCYTPoRA8EIfmRAPcNcVl4GT3fZxAVocDk70rA/tEWCguzzFFHaWhaIXMdkC70FEWLD28AxLWwwKj22KA9ezqp0eoxofzU3tSCIymVU9 rootlocalhost.localdomain提交本地代码到gitlab:
yum install git -y
unzip microservic-test.zip
cd microservic-test
git init #建仓
git add * #把当前文件夹所有代码提交
git commit -m add microservic-test #代码提交到缓冲区
git remote add origin http://192.168.40.135/root/microservic-test.git #代码提交到远程仓库
git push -u origin master #最后一步push推送过去,push的时候会让你输入账号和密码这里的用户名和密码就是gitlab上注册的用户了回到gitlab首页可以看到已经有项目了 Jenkinsk8snexussonarqubeharborgitlab构建DevOps jenkins-jnlp-v2.tar.gz这个压缩包封装的镜像带有mvn命令 上传至k8snode1 docker load -i jenkins-jnlp-v2.tar.gz在http://192.168.40.180:30002/configureClouds/把Container Template镜像改成jenkins-jnlp-v2.tar.gz压缩包解压之后的镜像xianchao/jenkins-jnlp:v2 修改gitlab上portal.yaml文件 把image镜像变成192.168.40.132/microservice/jenkins-demo:v1 注意microservice需要在harbor里提前创建这个仓库 打开Jenkins新建流水线流水线名字是mvn-gitlab-harbor-springcloud 在Pipeline Script处输入如下内容 node(testhan) {stage(Clone) {echo 1.Clone Stagegit credentialsId: gitlab, url: http://192.168.40.135/root/microservic-test.git script {build_tag sh(returnStdout: true, script: git rev-parse --shortHEAD).trim()}}stage(Test) {echo 2.Test Stage}stage(mvn) {sh mvn clean package -D maven.test.skiptrue}stage(Build) {echo 3.Build Docker Image Stagesh cd /home/jenkins/agent/workspace/mvn-gitlab-harbor-springcloud/portal-servicesh docker build --tag 192.168.40.132/microservice/jenkins-demo:v1 /home/jenkins/agent/workspace/mvn-gitlab-harbor-springcloud/portal-service/}stage(Push) {echo 4.Push Docker Image StagewithCredentials([usernamePassword(credentialsId: dockerharbor,passwordVariable: dockerHubPassword, usernameVariable: dockerHubUser)]) {sh docker login 192.168.40.132 -u ${dockerHubUser} -p ${dockerHubPassword}sh docker push 192.168.40.132/microservice/jenkins-demo:v1}}stage(Promoteto pro) { sh kubectl apply -f /home/jenkins/agent/workspace/mvn-gitlab-harbor-springcloud/k8s/portal.yaml}
} 立即构建即可 注意事项url: http://192.168.40.135/root/microservic-test.git Jenkins Pipeline语法介绍
Jenkins Pipeline介绍 Jenkins pipeline 流水线是一套运行于jenkins上的工作流框架将原本独立运行于单个或者多个节点的任务连接起来实现单个任务难以完成的复杂流程编排与可视化。它把持续提交流水线Continuous Delivery Pipeline的任务集成到Jenkins中。 pipeline 是jenkins2.X 最核心的特性 帮助jenkins 实现从CI到CD与DevOps的转变。 持续提交流水线Continuous Delivery Pipeline会经历一个复杂的过程 从版本控制、向用户和客户提交软件软件的每次变更提交代码到仓库到软件发布Release。这个过程包括以一种可靠并可重复的方式构建软件以及通过多个测试和部署阶段来开发构建好的软件称为Build。
总结
1.Jenkins Pipeline是一组插件让Jenkins可以实现持续交付管道的落地和实施。 2.持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完 整过程的自动化表现。 3.软件的每一次更改提交到源代码管理系统都要经过一个复杂的过程才能被发布。