1、下载安装Kubernetes Continuous Deploy
下载地址
2、配置秘钥连接EKS

如下

当按照下面的方式连接EKS时出现下面报错

                   script{ kubernetesDeploy(configs:"k8s-${iname}.yaml",kubeConfig: [path:'${env.dest_path}'], kubeconfigId: "Amazon_EKS") }

3、下载kubernet-cd包
下载地址
phi网页下载地址

网上都说下载1.0.0好使,但是我这边使用1.0.0却出现权限问题
phi下载地址
报错如下

找到别人的亚马逊客服解答

很高兴今天和您通话。在电话中我们探讨了 EKS 管理集群的用户或 IAM 角色,其中需要注意的是当您创建一个 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap[1]. 例如我们添加了 IAM 用户 arn:aws:iam::858659433780:user/zexiong.li 在 mapUsers 部分。我们通过屏幕共享查询了 aws-auth-cm.yaml 和 configmap 并确认您的 EKS 集群配置无误并且可以正常在跳板实例上操作 kubectl 相关命令。您遇到的主要问题是在利用 Jenkins 做持续部署导入 EKS 集群中时遇到如下报错:ERROR: ERROR: io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: GET at: https://1e73e810a71671022bc2eb1a4f79c434.sk1.ap-northeast-1.eks.amazonaws.com/apis/apps/v1/namespaces/test/deployments/lcm-user . Message: Forbidden! User arn:aws:eks:ap-northeast-1:858659433780:cluster/ap-lcm-test-k8sMaster doesn't have permission. deployments.apps "lcm-user" is forbidden: User "system:anonymous" cannot get resource "deployments" in API group "apps" in the namespace "test".通过细致排查,我们发现您 jenkins 用到的插件 kubernetes-cd-plugin [2] 目前不支持 [3] 我们 EKS 使用的 IAM 授权工具 aws-iam-authenticator [4]. 我们建议您在 Github 社区论坛里继续跟踪此问题看插件是否有更新。于此同时您问到是否有其他方法可以绕过报错达到 EKS 给予用户 "system:anonymous" get resource "deployments" 的权限。我查了不少相关讨论,很多都需要涉及 API server 的改动在 EKS 无法实现因为 api server 属于控制平面 (control plane),是由我们 EKS 内部团队在负责。而且这些改动大多被 k8s 社区看做有潜在的安全隐患 [5].关于使用 EKS 和 Jenkins 的集成来实现持续交付的架构您可以参考我们在电话里提到的一篇中文博客 - 使用 Amazon EKS 和 Jenkins X 持续交付 [6]. 这篇博客从头到尾有演示步骤以及解释,和您目前的架构非常相像,也可以绕开上面的插件报错。另外,Jenkins 及其插件属于第三方软件超出了我们技术支持的范畴,不过我们会尽最大努力来帮助您。希望以上信息对您有所帮助。如需任何其他协助,请随时联系我们。谢谢!相关文献:[1] - https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/add-user-role.html[2] - https://github.com/jenkinsci/kubernetes-cd-plugin[3] - https://github.com/jenkinsci/kubernetes-cd-plugin/issues/71[4] - https://github.com/kubernetes-sigs/aws-iam-authenticator[5] - https://github.com/kubernetes-sigs/apiserver-builder-alpha/issues/225#issuecomment-501444546[6] - https://aws.amazon.com/cn/blogs/china/continuous-delivery-eks-jenkins-x/

按照上文我就将kubernetes-cd版本提升,结果又得到如下报错
装完后出现一下错

接着又通过降低版本到kubernet-cd 1.0.0
4、最后还是没办法,于是我就只用使用硬办法
1)自己打jenkins镜像
Dokcerfile如下

FROM jenkins/jenkins:lts
USER rootENV VERSION v2.9.1
ENV HELM_URL https://storage.googleapis.com/kubernetes-helm/${FILENAME}
ENV KUBE_LATEST_VERSION="v1.11.0"
ENV PYTHON_PIP https://bootstrap.pypa.io/pip/2.7/get-pip.py# Install the latest Docker CE binaries
RUN apt-get update && \apt-get -y install apt-transport-https \ca-certificates \curl \gnupg2 \software-properties-common && \curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \$(lsb_release -cs) \stable" && \apt-get update && \apt-get -y install docker-ce python2.7\&& curl -L https://storage.googleapis.com/kubernetes-release/release/${KUBE_LATEST_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl \&& curl -L ${PYTHON_PIP} -o get-pip.py\&& python2.7 get-pip.py \&& chmod +x /usr/local/bin/kubectl \&& curl -L https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/aws-iam-authenticator -o /usr/local/bin/aws-iam-authenticator \&& chmod +x /usr/local/bin/aws-iam-authenticator \&& pip install awscli

2)重新部署jenkins
docker-compose内容

jenkins:#image: 'jenkins/jenkins:lts'image: 'harbor.abc.com/library/jenkins-aws:lts'restart: alwaysports:- "8080:8080"#dns:#  - 192.168.3.204expose:- "8080"- "50000"extra_hosts:- "gitlab.abc.com:192.168.1.37"- "nexus.abc.com:192.168.1.30" privileged: truecontainer_name: jenkinsenvironment:- TZ=Asia/Shanghaivolumes:- ./jenkins_home/:/var/jenkins_home- ./jenkinswar/jenkins.war:/usr/share/jenkins/jenkins.war

3)重新命令行授权
A、授予IAM权限

[root@ip-172-93-6-200 jenkins]# docker exec -it jenkins /bin/bash
root@9a5d0540450d:/# cat /root/.aws/config
[default]
region = ap-east-1
root@9a5d0540450d:/# cat /root/.aws/credentials
[default]
aws_access_key_id = SDFEWFREGDFSFEWSADE
aws_secret_access_key = SDFEWWFAFGRSADFREFWSAZDFSASDFVD+DSAFEWFSFDSFefadscf

B、授予EKS的权限

root@9a5d0540450d:/# cat /root/.kube/config
apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1UQXlOekEzTlRZMU1Gb1hEVE15TVRBeU5EQTNOVFkxTUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE1ZClNETVh4TTBrTEEzc2pDY1pscDhlclJaclk0Yi8ydHRmNFFUVU9CQVlRWVg5UDDGYwfHEFyRlVXcE9DTDg2MGUKY0MyZ1pqbHVyS3VsQ094RWE3NTdpeElPeWR3alhWYzEwM1pEOG1NMGtqTWEzOS9paE1CcVhWeS8yczQvOGsyRApnZHk1NVNXUm4wdXhEQ1BlLzd4QktrT3VBU0taMVlwb3RDanZxL3ZJNHNJb0Z4WnpkaVd5ZXQrcEhDY1VQZWRkCkZrTE1qUjlqV0QxYWpJZnBjcDRqaTN4RXJNaHFVUjkybXRZSitsb0JyckppaXA4OTNqYjNtaFFZSVVlZHRoMDkKQjhRc2d0TWZGS3RvTWhySVZwdmlJQWtnYldzeGdYei93dXcxU3pwNWNndlZZVTV5TGhCVlpIVUdscW53QmhNNQptUjQ0MFBnVENBK292ZzJDTWVrQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZOaU5rUWxDRm1ObkpaRDQ3NW9PTWJqQ0hSM2FNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQkYzWklNVzBzNXZ0bk91NHE5Nwo1NWhaQkVnNTFtcGpDRUFhV2lyOVdMU1RIK0ZnTUVrOFJzZWpaOFFhM05DFGDSVkhZdlEyZUhsMGhnMW9jCmMrVXVKRUJnekxQTElWNGtWQU9RM0EwUFdRdHRSSGltNVdXVlUrQWRPTVcxSmJ1Nm8wVFlSTGhId3Q5NVZURHYKeXpEYUZCWXBIREpRUFF4ZkN0RElsdEtzYm04SUpTd2t6R2VwOGRSbm5kc2htWDAzQ1hNNDVqUHBkL1U2WFF6Qwp6RWNSR0hBdkZ3aklBVWd5KzRmTE00cVFveS8xcjU5YVRucHI5Q1g2Z001dlA2MlV1WkJ0OEZmRURNclMvUlBUCjRZNWRzU1lFOGpCTTZhajVacGRiN2FHNjRFVVU0RG8yaHplNEI3SFVJUkJ5UzN6eU5zK2FDbm9nWnNVUjlKUmUKMFZzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==server: https://DFDSAEFDSFDSAFDSFDESAFAQEWSDF.yl4.ap-east-1.eks.amazonaws.comname: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eks
contexts:
- context:cluster: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eksuser: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eksname: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eks
current-context: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eks
kind: Config
preferences: {}
users:
- name: arn:aws:eks:ap-east-1:XXXXXXXXX:cluster/gamefi-eksuser:exec:apiVersion: client.authentication.k8s.io/v1alpha1args:- --region- ap-east-1- eks- get-token- --cluster-name- gamefi-ekscommand: aws

简而言之就是不在使用jenkins的插件
5、部署配置查询权限
安装kubernetes-credentials、kubernet cli插件
jenkins插件下载地址

1)安装kubernet cli


2)、创建一个jenkins的server,然后与集群有权限的角色绑定,然后在获取他的token

[root@ip-172-93-6-200 gamefi]# kubectl create namespace gamefi-eks
namespace/gamefi-eks created
[root@ip-172-93-6-200 gamefi]# kubectl -n gamefi-eks  create serviceaccount jenkins-robot
serviceaccount/jenkins-robot created
[root@ip-172-93-6-200 gamefi]# kubectl -n public  create clusterrolebinding jenkins-robot-binding --clusterrole=cluster-admin --serviceaccount=gamefi-eks:jenkins-robot
clusterrolebinding.rbac.authorization.k8s.io/jenkins-robot-binding created
[root@ip-172-93-6-200 gamefi]# kubectl -n gamefi-eks get serviceaccount jenkins-robot -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'
jenkins-robot-token-hqnvv
[root@ip-172-93-6-200 gamefi]# kubectl -n gamefi-eks get secrets jenkins-robot-token-hqnvv  -o go-template --template '{{index .data "token"}}' | base64 -d
eyJhbGciOiJSUzI1NiIsImtpZCI6IktuUVdPejE5d3ZUX1VfT2tSSEFWQkk1d2NuQ3RGdHVNN0I1WGk0ZElDazgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50IiSDFDSFDSAZFsdfafqSFDSZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJnYW1lZmktZWtzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImplbmtpbnMtcm9ib3QtdG9rZW4taHFudnYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiamVua2lucy1yb2JvdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE4MThlMjgyLWExNTgtNDNmZC05OGY0LTAyODFhOTQ0Njc1YSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpnYW1lZmktZWtzOmplbmtpbnMtcm9ib3QifQ.MMJ6IvDpH-WpPK63FELIc-XTWaRXdFehqGbX415SRxc-EWv5OHH587N4aKbXSZt376Yvrw4HUrgRew5-IY5jJq5XTfs3GrpMzTK9jay12UkG2GPA1gu8XadRGvzAxfFFLPyPDNPvzsmN9Od9IKjfzr-SDFDEFDSFDSFDSF3ewrqwr4eafdSDEGERFSDF3wq4er34r4t54y65ytdFGETRHTRYuyrutui78ui7o987iyuyfjhFuytdfHSREt45tewtygsr-PjAOD08z44L-ZN945xOoXqRCELmnAFd-8FEiuupPYo53ifvoZAKmcuoCVQWiWl7imLJ54dpN8qzrtRxqSkA[root@ip-172-93-6-200 gamefi]#

3)然后将token复制到jenkins的secret位置

6、pipeline文本如下

// 参数构建
// 参数构建
pipeline {//agent { label '172.93.6.200' }agent anyparameters {gitParameter(name: 'BRANCH_TAG', type: 'PT_BRANCH_TAG', branchFilter: 'origin/(.*)', defaultValue: 'master', selectedValue: 'DEFAULT', sortMode: 'DESCENDING_SMART', description: '请选择需要部署的代码:')choice(name: 'mode', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')imageTag(name: 'DOCKER_IMAGE',image: 'library/business-client',filter: '.*', defaultTag: '',registry: 'https://harbor.sgpexchange.com', credentialId: 'docker-habor', description: '版本回滚时需要选择镜像仓库\n版本发布可忽略')string(name: 'version_id', defaultValue: 'v1.1', description: '版本发布时自定义版本号\n版本回滚时根据镜像修订版本号:')string(name: 'iname', defaultValue: 'business-client', description: '服务名称')string(name: 'LIMIT', defaultValue: '1024', description: '内存配置')string(name: 'JARPORT', defaultValue: '10460', description: '服务端口')string(name: 'LANGUAGE', defaultValue: 'UTF-8', description: '编码值')string(name: 'ENVMENT', defaultValue: 'pre', description: '环境参数')string(name: 'namespace', defaultValue: 'gamefi-eks', description: '命名空间')string(name: 'host', defaultValue: '172.93.6.200', description: 'host ip地址信息')}environment {dest_path = "/var/jenkins_home/workspace/${JOB_NAME}"job_path = "/data/docker-compose/jenkins/jenkins_home/workspace/${JOB_NAME}"}stages {stage('从 gitlab 中拉取代码') {when {environment name: 'mode',value: 'deploy'}steps {deleteDir()checkout([$class: 'GitSCM', branches: [[name: "${params.BRANCH_TAG}"]],gitTool: 'Default', userRemoteConfigs: [[url: 'http://gitlab.tqxd.com/defi/aitd-bankcard', credentialsId: 'gitlab-deploy',]]])}}stage('回滚') {when {environment name: 'mode',value: 'rollback'}steps {sh '''nowImage="library/${iname}:${version_id}"if [ ${nowImage} != ${DOCKER_IMAGE} ];thenecho "镜像不存在或选择错误,请重新输入镜像tag:" abortedelseecho "开始还原${version_id}版本:"fi'''}}stage('构建编译生成程序包') {when {environment name: 'mode',value: 'deploy'}steps {sh '''MAVEN_HOME=/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/mavenexport PATH=$PATH:$MAVEN_HOME/binmvn clean install -pl  business-client/  -am -Dmaven.test.skip=truejarname=`find business-client/target/ -name "*.jar" |grep -v "sources"|grep -v "exec"`cp ${jarname} ${iname}.jar'''}}stage('编写启动脚本docker-entrypoint') {when {environment name: 'mode',value: 'deploy'}            steps {sh '''dest_path=/var/jenkins_home/workspace/${JOB_NAME}cd ${dest_path}cat > docker-entrypoint.sh  <<EOF
#!/bin/bashjava -Dspring.profiles.active=\\${ENVMENT}  -Xms\\${LIMIT}m -Xmx\\${LIMIT}m  -XX:MetaspaceSize=256m  -XX:MaxMetaspaceSize=256m -XX:+UseG1GC \\${JARPORT} -Dfile.encoding=\\{LANGUAGE} -Dsun.jnu.encoding=\\{LANGUAGE}  -jar \${iname}.jar \\${NACOS} \\${DEBUG}'''}}stage('编写Dockerfile文件') {when {environment name: 'mode',value: 'deploy'}            steps {sh '''dest_path=/var/jenkins_home/workspace/${JOB_NAME}cd ${dest_path}cat > Dockerfile <<EOF
FROM harbor.sgpexchange.com/library/alpine-jdk:1.8
#add volume
VOLUME /data
VOLUME /data/deploy/
WORKDIR /data
COPY  \${iname}.jar ./ARG LIMIT
ARG ENVMENT
ARG JARPORT
ARG LANGUAGE
ARG DEBUG
ARG NACOS_ADDRENV LIMIT="\\${LIMIT}" \
ENVMENT="\\${ENVMENT}" \
JARPORT="-Dserver.port=\\${JARPORT}" \
LANGUAGE="\\${LANGUAGE}" \
DEBUG="\\${DEBUG}" \
NACOS="\\${NACOS_ADDR}"
# NACAOS="--nacos.server={{ NACOS_ADDR }}"
# NACAOS="--spring.cloud.nacos.config.server-addr={{ NACOS_ADDR }}"COPY docker-entrypoint.sh ./
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["sh","docker-entrypoint.sh"]
'''}}    stage('打镜像并推送镜像') {when {environment name: 'mode',value: 'deploy'}            steps {withCredentials([usernamePassword(credentialsId: 'docker-harbor', passwordVariable: 'password', usernameVariable: 'username')]) {sh '''    DOCKER_HOME=/var/jenkins_home/tools/dockerexport PATH=$PATH:$DOCKER_HOMEdest_path=/var/jenkins_home/workspace/${JOB_NAME}cd ${dest_path}docker build --build-arg ENVMENT=${ENVMENT} --build-arg LIMIT=${LIMIT} --build-arg JARPORT=${JARPORT} --build-arg LANGUAGE=${LANGUAGE} -f ${dest_path}/Dockerfile -t harbor.sgpexchange.com/library/${iname}:${version_id} ${dest_path}docker login -u ${username} -p ${password} harbor.sgpexchange.comdocker push harbor.sgpexchange.com/library/${iname}:${version_id} docker rmi  harbor.sgpexchange.com/library/${iname}:${version_id} '''}}}stage("编写pod.yml文件") {steps {sh '''dest_path=/var/jenkins_home/workspace/${JOB_NAME}cd ${dest_path}cat > k8s-\${iname}.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: \${iname}labels:name: \${iname}spec:replicas: 1selector:matchLabels:app: \${iname}template:metadata:labels:app: \${iname}spec:containers:- name: \${iname}image: harbor.sgpexchange.com/library/\${iname}:\${version_id}#imagePullPolicy: Never#imagePullPolicy: IfNotPresentimagePullPolicy: Alwaysports:- containerPort: \${JARPORT}protocol: TCPvolumeMounts:- name: tz-configmountPath: /etc/localtime    volumes:- name: tz-confighostPath:path: /usr/share/zoneinfo/Asia/Shanghai---
kind: Service
apiVersion: v1
metadata:name: \${iname}-service
spec:selector:app: \${iname} # 这个地方是app名称而不是nodeports:- port: \${JARPORT}targetPort: \${JARPORT}nodePort: 31081type: NodePort
'''}    }stage("启动pod") {steps {sh  '''kubectl replace --force -f k8s-${iname}.yaml -n ${namespace}'''//    kubernetesDeploy(configs:"k8s-${iname}.yaml",kubeConfig: [path:'${env.dest_path}'], kubeconfigId: "Amazon_EKS") }}stage("查询pod日志") {steps {withKubeConfig(caCertificate: '', contextName: '', credentialsId: 'EKS-Secret', namespace: 'gamefi-eks', serverUrl: 'https://B3613656D7F818B0D1DC860E4E14ECB6.yl4.ap-east-1.eks.amazonaws.com') {sh  ''' echo '============查看当前pod状态============' kubectl get pods -n ${namespace} | grep ${iname}echo '============查看当前deploy状态============' kubectl get deploy -n \${namespace} | grep \${iname} for i in `kubectl get pods -n ${namespace} | grep ${iname} |awk " " '{print \$1}' |tail -1`do echo "----------------------------------------------------------\$i----------------------------------------------------------"kubectl logs  --tail 100 \$i   -n ${namespace}done '''    } }}}
}

7、点击构建

构建pipeline如下

8、点击回滚时
注意以下三处

构建图如下

至此构建完毕

jenkins+pipeline+Amazon_EKS部署java服务相关推荐

  1. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  2. Jenkins+Pipeline+Docker部署SpringBoot项目到远程服务器

    Jenkins部署 前言 Jenkins 安装 nginx配置 jenkins配置 Docker安装 项目部署 项目添加Dockerfile文件 Jenkins新建任务 使用Pipeline部署 结果 ...

  3. jenkins pipeline slave部署nacos负载均衡平滑升级

    1.背景 公司有一个项目使用nacos作为服务注册和配置中心.老板希望项目更新升级过程尽量不影响用户使用,特申请一台服务器作负载均衡服务器. 服务器 部署内容 172.16.0.14 nginx.na ...

  4. 老板亲戚来公司实习,差点把公司的Tomcat搞崩了,就因为不会部署Java服务

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:Java开发的webservice 如何部署在Tomcat服务器 ...

  5. docker部署java服务

    目的 1.在centos上安装mysql.jdk,之后完成java服务部署 2.通过docker进行部署,熟悉docker命令 3.打包发布到docker hub 系统安装 安装centos7系统,首 ...

  6. Jenkins Pipeline 一键部署SpringBoot项目

    介绍 通过jenkins的pipeline 可以很清晰了解发布项目经历了哪些步骤,每一步成功失败一目了然,某一个步骤阶段失败了修复好了问题之后可以不用重头再来构建,可以继续上次失败的步骤执行,还可以清 ...

  7. jenkins pipeline script部署实例和回滚实例

    部署操作 jenkins job任务 pipeline script 脚本 Jenkins 流水线 流水线入门 流水线语法 使用 Jenkinsfile dockerfile文件配置: FROM re ...

  8. jenkins+pipeline+docker部署vue项目

    这里只是一个简单的例子,只要掌握了思路,部署别的项目都是一样的 项目步骤 第一步:拉取代码 第二步:编译部署获取构建产物 第三步:将产物传输到业务服务器,并根据具体业务场景看是否需要重启服务 node ...

  9. jenkins配置自动部署java程序

    任务背景 该项目包含4个程序包:a.jar,b.jar,c.jar,d.jar,每次启动前需要修改程序中的配置文件(修改数据源配置),然后按照先后顺序启动. 任务目标 1.利用jenkins拉取代码, ...

最新文章

  1. java if and_Java运算符-if分支语句
  2. java 线程的函数_Java线程总结
  3. glide源码中包含了那种设计模式_推荐一个好用的拍照选图库,致敬Glide
  4. 2019潜江职称计算机考试,2019湖北事业单位联考潜江地区笔试成绩分析
  5. 【视频课】图像分割重磅上新-人像抠图(Matting)实战
  6. 大道至简第一章读后感(伪代码)
  7. 实战|简单绕过waf拿下赌博网站
  8. java ready()_Java.io.BufferedReader.ready()方法实例
  9. 全局变量求平均分最高分最低分_想去江苏读大学,2021届山东考生需要多少分?...
  10. OpenStack入门科普,看这一篇就够啦!
  11. 清除float的方法
  12. 干得漂亮!法院在微信朋友圈精准投放“老赖”广告 网友:建议全国推广
  13. javascript精雕细琢(二):++、--那点事
  14. 真正优秀的领导者,无非是做好这2件事
  15. 信息化管理系统在企业的应用
  16. 【程序人生】回忆职业生涯(一)选择职业时的“图样图森破”
  17. mono java 性能_Mono对Java的支持
  18. 【angular学习】自定义实现双向绑定
  19. linux 命令行获取时间,【Linux】让命令提示符显示日期和时间
  20. 三星note20u计算机功能,【三星Note20U上手简单评测】

热门文章

  1. python练习题(难度高)
  2. ssl证书会过期吗?ssl证书过期了怎么解决
  3. GO学习笔记:struct的匿名字段
  4. 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的高校企业员工公寓后勤管理系统
  5. android assets资源使用——深入浅出
  6. Heritrix maven
  7. 《HTTP权威指南》第一章学习总结
  8. 【超详细Scratch教学课件分享】简单倒计时
  9. 不用在PLC内编程,实现西门子与罗克韦尔(AB)PLC之间数据通讯
  10. 蓝桥杯官网练习系统——基础练习 圆的面积