当前位置: 首页 > news >正文

建设工程其它费计算网站seo快速整站上排名教程

建设工程其它费计算网站,seo快速整站上排名教程,凉山州建设厅官方网站,注册深圳公司流程和费用Jenkins file一行代码部署.NET程序什么是Jenkins共享库随着微服务的增多#xff0c;每个项目的都需要pipline文件#xff0c;这样的话Pipeline代码冗余度高#xff0c;并且pipeline的功能越来越复杂。jenkins可以使用Shared Lib#xff0c;将一些公共的pipeline抽象做成模块… Jenkins file一行代码部署.NET程序什么是Jenkins共享库随着微服务的增多每个项目的都需要pipline文件这样的话Pipeline代码冗余度高并且pipeline的功能越来越复杂。jenkins可以使用Shared Lib将一些公共的pipeline抽象做成模块代码在各种项目pipeline之间复用以减少冗余。共享库目录结构共享库根目录 |-- vars|-- test1.groovy |-- src|-- test2.groovy |-- resourcesvars: 依赖于Jenkins运行环境的Groovy脚本。其中的Groovy脚本被称之为全局变量。src: 标准的Java源码目录结构,其中的Groovy脚本被称为类库(Library class)。resources: 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。引用共享库的方式#!/usr/bin/env groovy// 引用默认配置的共享库 Library(demo-shared-library) _// 引用指定分支、tag的共享库代码 Library(demo-shared-library1.0) _// 引用多个指定分支tag的共享库 Library(demo-shared-library$Branch/Tag,demo-shared-library-test$Branch/Tag) _Library(utils) import org.foo.UtilitiesLibrary(utils) import static org.foo.Utilities.*vars下的全局变量/vars下的全局变量必须以全小写或驼峰camelCased/vars/*.groovy若实现call()方法直接引用时默认执行其中的方法实现一行代码部署.NET程序到K8S安装Jenkins Master# master docker run --name jenkins-blueocean -u root --privileged -d -p 8080:8080 -p 50000:50000 -v D:/architecture/jenkins/data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean # 访问http://ip:8080/ # jenkins密码查看容器日志: 7285ced325a24483bfdaab227415fdac # 安装推荐插件安装Jenkins AgentManage Jenkins - Manage Nodes and Clouds - New NodeName: agent2/agent3Labels: agentnodeLaunch method: Launch agent by connecting it to the masterBuild Agent Docker Image# slave # Dockerfile FROM jenkins/inbound-agent:latest USER rootRUN apt-get update RUN apt-get -y install ca-certificates curl gnupg lsb-release RUN curl -fsSL https://get.docker.com -o get-docker.sh RUN sh get-docker.shRUN curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl RUN install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl RUN kubectl version --clientENV JMETER_VERSION5.4.1 ENV JMETER_HOME/jmeter/apache-jmeter-${JMETER_VERSION} ENV JMETER_PATH${JMETER_HOME}/bin:${PATH} ENV PATH${JMETER_HOME}/bin:${PATH}RUN mkdir /jmeter COPY apache-jmeter-${JMETER_VERSION}.tgz /jmeter RUN cd /jmeter tar xvf apache-jmeter-${JMETER_VERSION}.tgz #其中tgz文件请去官网下载 RUN sed -i s/#jmeter.save.saveservice.output_formatcsv/jmeter.save.saveservice.output_formatxml/g /jmeter/apache-jmeter-5.4.1/bin/jmeter.propertiesdocker build -t chesterjenkinsagent . docker tag chesterjenkinsagent:latest 192.168.43.95/jenkins/chesterjenkinsagent:v1 docker login --usernameadmin --password123456 192.168.43.95 docker push 192.168.43.95/jenkins/chesterjenkinsagent:v1运行Agent其中的密钥通过jenkins的agent信息获取# agent4 docker run  -v /var/run/docker.sock:/var/run/docker.sock --name agent4  -d --init 192.168.43.95/jenkins/chesterjenkinsagent:v1 -url http://192.168.43.94:8080   1e84c896dbffc0c325587eedb6301ab0ae66d3f4b49c4628dbb05714e382d7a2 agent4新增K8S凭据将k8s集群的配置文件导出 ~/.kube/config Mange Jenkins - Manage Credentials - Add Credentials - Secret File选择导出的kubeconfig设置id为kubeconfig新增Harbor凭据Mange Jenkins - Manage Credentials - Add Credentials - Username with password输入Harbor的用户名密码新增Gitee凭据Mange Jenkins - Manage Credentials - Add Credentials - Username with password输入Gitee的用户名密码安装插件Manage Jenkins - Manage Plugins - Search Performance - install管理共享库Manage Jenkins - Configure System - Global Pipeline Libraries其中的git地址是共享库的地址共享库中新增以下代码vars/run.groovy#!/usr/bin/env groovydef call(String nameSpaceName, String serviceName, String servicePath, String servicePort, String nodePort, Map envInfo) {def devBranch envInfo[dev]def prodBranch envInfo[prod]pipeline {agent {label agentnode}environment {DEV_MY_KUBECONFIG credentials(kubeconfig)PROD_MY_KUBECONFIG credentials(kubeconfig)HARBOR credentials(harbor)}stages {stage(Dev - GitPull) {steps {deleteDir()gitCheckOut devBranch, env.GIT_URL}post {success {script {echo pull done}}}}stage(Dev - DockerBuild) {steps {dockerImageBuild serviceName, ${servicePath}Dockerfile}}stage(Dev - DockerTag) {steps {dockerTag serviceName, dev}}stage(Dev - DockerLogin) {steps {dockerLogin dev}}stage(Dev - DockerPush) {steps {dockerPush serviceName, dev}}stage(Dev - GenerateHarborSecretYAML) {steps {harborSecret nameSpaceName, serviceName, dev}}stage(Dev - GenerateK8SYAML) {steps {k8sGenerateYaml nameSpaceName, serviceName, servicePath, dev, servicePort, nodePort}}stage(Dev - DeployToK8S) {steps {k8sDeploy servicePath, dev}}stage(Dev - CheckDeployStatus) {steps {k8sCheckDeployStatus nameSpaceName, serviceName, dev}}stage(Dev - Jmeter Test) {steps {jmeterTest servicePath}}stage(DeployToProd?) {steps {input 部署生产}}stage(Prod - GitPull) {steps {gitCheckOut prodBranch, env.GIT_URL}}stage(Prod - DockerBuild) {steps {dockerImageBuild serviceName, ${servicePath}Dockerfile}}stage(Prod - DockerTag) {steps {dockerTag serviceName, prod}}stage(Prod - DockerLogin) {steps {dockerLogin prod}}stage(Prod - DockerPush) {steps {dockerPush serviceName, prod}}stage(Prod - GenerateHarborSecretYAML) {steps {harborSecret nameSpaceName, serviceName, prod}}stage(Prod - GenerateK8SYAML) {steps {k8sGenerateYaml nameSpaceName, serviceName, servicePath, prod, servicePort, nodePort}}stage(Prod - DeployToK8S) {steps {k8sDeploy servicePath, prod}}stage(Prod - CheckDeployStatus) {steps {k8sCheckDeployStatus nameSpaceName, serviceName, prod}}}} }vars/dockerImageBuild.groovy#!/usr/bin/env groovydef call(String serviceName, String dockerfilePath) {echo serviceName:${serviceName} dockerfilePath:${dockerfilePath}sh docker build -t ${serviceName} -f ${dockerfilePath} . }vars/dockerLogin.groovy#!/usr/bin/env groovydef call(String envName) {sh docker login --username$HARBOR_USR --password$HARBOR_PSW 192.168.43.95 }vars/dockerPush.groovy#!/usr/bin/env groovydef call(String serviceName,String envName) {sh docker push 192.168.43.95/dapr/${serviceName}:${envName}-${BUILD_NUMBER} }vars/dockerTag.groovy#!/usr/bin/env groovydef call(String serviceName, String envName) {sh docker tag ${serviceName}:latest 192.168.43.95/dapr/${serviceName}:${envName}-${BUILD_NUMBER} }vars/gitCheckOut.groovy#!/usr/bin/env groovydef call(String branchName, String gitUrl) {echo branchName:${branchName} gitUrl:${gitUrl}checkout([$class: GitSCM, branches: [[name: branchName]], extensions: [], userRemoteConfigs: [[credentialsId: gitee, url: gitUrl]]]) }vars/harborSecret.groovydef call(String namespaceName, String serviceName, String envName) {dir(harborsecret) {checkout([$class: GitSCM, branches: [[name: */master]], extensions: [], userRemoteConfigs: [[credentialsId: gitee, url: https://gitee.com/chesterdotchen/jenkins-demo-secrets.git]]])sh sed -i s/{{ServiceName}}/${serviceName}/g secrets.yamlsh sed -i s/{{NameSpaceName}}/${namespaceName}/g secrets.yamlif (envName dev) {sh(kubectl --kubeconfig ${DEV_MY_KUBECONFIG} apply -f secrets.yaml)}if (envName prod) {sh(kubectl --kubeconfig ${PROD_MY_KUBECONFIG} apply -f secrets.yaml)}} }vars/jmeterTest.groovy#!/usr/bin/env groovydef call(String servicePath) {sh jmeter -j jmeter.save.saveservice.output_formatxml -n -t ${servicePath}jmeter.jmx -l ${servicePath}jmeter.report.jtlsh cp ${servicePath}jmeter.report.jtl ${servicePath}jmeter.report.${BUILD_NUMBER}.jtlperfReport errorFailedThreshold:5, sourceDataFiles:${servicePath}jmeter.report.jtlsh cat ${servicePath}jmeter.report.${BUILD_NUMBER}.jtlsh #!/bin/shgrep failuretrue/failure ${servicePath}jmeter.report.${BUILD_NUMBER}.jtlif [ \$? 0 ]thenexit 1elseexit 0fi }vars/k8sCheckDeployStatus.groovy#!/usr/bin/env groovydef call(String nameSpaceName, String serviceName, String envName) {if (envName dev) {sh(ATTEMPTS0ROLLOUT_STATUS_CMDkubectl --kubeconfig ${DEV_MY_KUBECONFIG} rollout status deployment/${serviceName} -n ${nameSpaceName}-nsuntil \$ROLLOUT_STATUS_CMD || [ \$ATTEMPTS -eq 60 ]; do\$ROLLOUT_STATUS_CMDATTEMPTS\$((attempts 1))sleep 10done)}if (envName prod) {sh(ATTEMPTS0ROLLOUT_STATUS_CMDkubectl --kubeconfig ${PROD_MY_KUBECONFIG} rollout status deployment/${serviceName} -n ${nameSpaceName}-nsuntil \$ROLLOUT_STATUS_CMD || [ \$ATTEMPTS -eq 60 ]; do\$ROLLOUT_STATUS_CMDATTEMPTS\$((attempts 1))sleep 10done)} }vars/k8sDeploy.groovy#!/usr/bin/env groovydef call(String servicePath, String envName) {if (envName dev) {sh(kubectl --kubeconfig ${DEV_MY_KUBECONFIG} apply -f ${servicePath}deployment.yaml)}if (envName prod) {sh(kubectl --kubeconfig ${PROD_MY_KUBECONFIG} apply -f ${servicePath}deployment.yaml)} }vars/k8sGenerateYaml.groovy#!/usr/bin/env groovydef call(String namespaceName, String serviceName, String servicePath, String envName, String servicePort, String nodePort) {sh sed s/{{tagversion}}/${envName}-${BUILD_NUMBER}/g ${servicePath}deployment.yaml.tpl ${servicePath}deployment.yaml sh sed -i s/{{ServiceName}}/${serviceName}/g ${servicePath}deployment.yamlsh sed -i s/{{ServicePort}}/${servicePort}/g ${servicePath}deployment.yamlsh sed -i s/{{NodePort}}/${nodePort}/g ${servicePath}deployment.yamlsh sed -i s/{{NameSpaceName}}/${namespaceName}/g ${servicePath}deployment.yaml }jenkins-demo-secrets中代码如下apiVersion: v1 kind: Namespace metadata:name: {{NameSpaceName}}-ns--- apiVersion: v1 kind: Secret metadata:name: harbor-keynamespace: {{NameSpaceName}}-ns type: kubernetes.io/dockerconfigjson data:.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjQzLjk1IjogewoJCQkiYXV0aCI6ICJZV1J0YVc0Nk1USXpORFUyIgoJCX0sCgkJInJlZ2lzdHJ5LmNuLWJlaWppbmcuYWxpeXVuY3MuY29tIjogewoJCQkiYXV0aCI6ICI2Wm1JNUxpQTU0dXVPbU5vWlc1NWFYTm9hVEV5TXc9PSIKCQl9Cgl9Cn0dockerconfigjson可通过以下方式获取docker login --usernameadmin --password123456 192.168.43.95 cat ~/.docker/config.json | base64Jenkinsfile中引用共享库项目库中需要提前编写好DockerfileJenkinsfiledeployment.yaml.tpljmeter.jmxDockerfile#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 5001FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY [FrontEnd/FrontEnd.csproj, FrontEnd/] COPY [Common/Common.csproj, Common/] RUN dotnet restore FrontEnd/FrontEnd.csproj COPY . . WORKDIR /src/FrontEnd RUN dotnet build FrontEnd.csproj -c Release -o /app/buildFROM build AS publish RUN dotnet publish FrontEnd.csproj -c Release -o /app/publishFROM base AS final WORKDIR /app COPY --frompublish /app/publish . ENTRYPOINT [dotnet, FrontEnd.dll]Jenkinsfile#!/usr/bin/env groovyLibrary(sharemaster) _run daprtest, frontend, ./FrontEnd/, 5001, 31111, [dev:*/master, prod:*/master]deployment.yaml.tplapiVersion: v1 kind: Namespace metadata:name: {{NameSpaceName}}-ns--- apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: statestorenamespace: {{NameSpaceName}}-ns spec:type: state.redisversion: v1metadata:- name: redisHostvalue: 192.168.43.102:6379- name: redisPasswordvalue: 123456- name: actorStateStorevalue: true--- apiVersion: apps/v1 kind: Deployment metadata:name: {{ServiceName}}namespace: {{NameSpaceName}}-nslabels:app: {{ServiceName}} spec:replicas: 1selector:matchLabels:app: {{ServiceName}}template:metadata:namespace: {{NameSpaceName}}-nslabels:app: {{ServiceName}}annotations:dapr.io/enabled: truedapr.io/app-id: {{ServiceName}}dapr.io/app-port: {{ServicePort}}spec:imagePullSecrets:- name: harbor-keycontainers:- name: {{ServiceName}}image: 192.168.43.95/dapr/{{ServiceName}}:{{tagversion}}ports:- containerPort: {{ServicePort}}imagePullPolicy: Always--- apiVersion: v1 kind: Service metadata:namespace: {{NameSpaceName}}-nsname: {{ServiceName}}-svc spec:type: NodePortselector:app: {{ServiceName}}ports:- port: {{ServicePort}}targetPort: {{ServicePort}}nodePort: {{NodePort}}jmter.jmx则根据需要自行编写新建pipline其中的URL指向自己项目的git地址构建pipline至此我们已经完成了Jenkinsfile中一行代码部署我们的项目如果有新的service在编写好Dockerfiledeployment.yaml.tpl保持一致jmeter.jmx的前提下我们只需要Jenkinsfile中通过共享库引用run方法即可
http://www.zqtcl.cn/news/896574/

相关文章:

  • wordpress 主页位置seo是什么意思教程
  • 网站开发甘特图网站是别人做的域名自己怎么续费
  • 如何查询网站是否备案江苏省句容建设局网站
  • 中国商业网点建设开发中心官方网站天津中小企业网站制作
  • 莱芜网站建设及优化云开发小程序源码
  • 珠海商城网站学校建网站
  • 自己网站如何做关键词排名网站配色网
  • 做二手物资哪个网站好江苏大汉建设实业集团网站
  • j2ee 建设简单网站Wordpress 导航条样式
  • 创客贴网页设计网站企业局域网
  • 深圳哪里网站制作云南建设网站首页
  • 赤峰做网站哪家好岳阳网站设计u
  • 腾讯云10g数字盘做网站够么网站开元棋牌怎么做app
  • 天津网站建设信息科技有限公司门户网站开发公司排名
  • 优秀策划设计网站jsp mysql开发网站开发
  • 深圳做微信网站建设我爱水煮鱼 wordpress
  • 企业网站推广是不是必要的蓝色网站建设
  • 浙江企业响应式网站建设网站建设 找vx cp5173
  • nodejs做的网站音乐网站制作教程
  • 怎么利用网站做外链接阿里云网站部署
  • 做学校网站简述网站的制作步骤
  • 怎样让网站响应式推广策划案
  • 网站开发 面试 适当吹牛网站文件命名规则
  • 河北省建设中心网站图片分享网站源码
  • 工信部网站备案修改个人求职网站怎么做
  • 关于建设公司网站的申请宁波网站制作出售
  • 织梦电影网站免费模板网站域名asia是
  • 顺德中小企业网站建设宁乡市建设局网站
  • 静态网页模板 网站模板兰州做网站价格
  • 吕梁推广型网站建设godaddy托管 wordpress