#一.环境准备
##1.1安装jenkins
安装JDK

[root@k8s-gitlab local]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdkexport JRE_HOME=/usr/local/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@k8s-gitlab local]# source /etc/profile.d/java.sh 

稳定版下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/
启动:nohup java -jar /usr/local/jenkins.war --httpPort=28080 &

http://192.168.0.200:28080/
初始密码:
cat /root/.jenkins/secrets/initialAdminPassword
e89a1e637f1041f891440b30c27c27d8
jenkins插件下载:https://plugins.jenkins.io/
安装插件:Git Parameter,active choice,Bule ocean,build pipeline,convert to pipeline,credentials binding plugin,credentials plugin,dashboard,Hidden Parameter,kubernetes cli,,kubernetes plugin,Kubernetes :: Pipeline :: DevOps Steps,List Git Branches Parameter,Parameterized Remote Trigger,pipeline

##1.2安装Gitlab
下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
yum install -y curl openssh-server postfix cronie
yum -y install policycoreutils-python
[root@k8s-gitlab ~]# rpm -ivh gitlab-ce-13.7.5-ce.0.el7.x86_64.rpm
[root@k8s-gitlab ~]# vim /etc/gitlab/gitlab.rb #修改为域名或IP
external_url ‘http://192.168.0.200’
[root@k8s-gitlab ~]# gitlab-ctl reconfigure #重载配置文件
[root@k8s-gitlab ~]# gitlab-ctl status
run: alertmanager: (pid 1201) 44655s; run: log: (pid 1182) 44656s
run: gitaly: (pid 1193) 44655s; run: log: (pid 1174) 44656s
run: gitlab-exporter: (pid 1198) 44655s; run: log: (pid 1175) 44656s
run: gitlab-workhorse: (pid 1199) 44655s; run: log: (pid 1176) 44656s

启动/停止单个服务
[root@k8s-gitlab ~]# gitlab-ctl stop|start alertmanager
访问:http://192.168.0.200,一登陆会要求改密码
账号:root
#二.Gitlab配置SSH Key
[root@k8s-cicd ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDft6CmoNepXo8DDtj+dgZ/KyLvihzfAj/ARUryu2DNkM92pWF16XLvXBVWlOGXIP1ScFszj1qP3qrFkn0KQfp9Pcxj2evPgBfPhKcbQSSh3LruoGiKHW0I9rJl4ZzdSgyJk1K1ndRd+nT0JMZAmRpZafLB1xJ3zOwWIyvv43eBwS+w63kk/RCSV5cgcg5v6vKTzeA7Orh5h91o+yh8lAUV42sDCE/VAwpm7g6Ccgg8XADPUD+LSePRmoNSJEKdgG8rcPq19Gy6gg/2SosxmQV8XzYwMp1E7musc+q75jerNX91Bu7pXOVwgzUiv2Rj8UNLedxCEoTk5KkIvaXDyzMZ root@k8s-cicd

#三.推送代码到Gitlab仓库
[root@k8s-cicd ~]# cd /usr/local/spring-cloud-demo/
[root@k8s-cicd spring-cloud-demo]# ls
docs README.md spring-cloud-account spring-cloud-biz spring-cloud-client spring-cloud-demo spring-cloud-eureka spring-cloud-gateway spring-cloud-parent spring-cloud-starter
全局设置git自己的邮箱和名字
git config --global user.email “you@example.com”
git config --global user.name “Your Name”
添加远程仓库地址
git remote add origin git@192.168.0.200:kubernetes-guide/spring-cloud-demo.git
推送到仓库
git init .
git status
git add .
git commit -m “add page”
git push -u origin master

#四.Jenkins凭证
##4.1配置harbor/阿里云账号密码
凭据->系统->全局凭据->类型为Username with password

##4.2配置gitlab私钥
[root@k8s-gitlab ~]# cat /root/.ssh/id_rsa #查看私钥
公钥已经配置在gitlab ssh,这样jenkins有权限构建gitlab上的项目
凭据->系统->全局凭据->类型为SSH Username with private key

#五.Blue Ocean创建流水线
安装bule ocean插件,相比经典界面更加友好,bule ocean每一步都有清晰的日志


ssh key添加至gitlab ssh key,创建完成会在gitlab project生成Jenkinsfile文件
Jenkinsfile文件内容拷贝到Jenkinsfile

pipeline {agent {kubernetes {cloud 'kubernetes-default'slaveConnectTimeout 1200yaml '''
apiVersion: v1
kind: Pod
spec:containers:- args: [\'$(JENKINS_SECRET)\', \'$(JENKINS_NAME)\']image: 'registry.cn-beijing.aliyuncs.com/citools/jnlp:alpine'name: jnlpimagePullPolicy: IfNotPresentvolumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- mountPath: "/etc/hosts"name: "volume-hosts"readOnly: false        - command:- "cat"env:- name: "LANGUAGE"value: "en_US:en"- name: "LC_ALL"value: "en_US.UTF-8"- name: "LANG"value: "en_US.UTF-8"image: "registry.cn-beijing.aliyuncs.com/citools/maven:3.5.3"imagePullPolicy: "IfNotPresent"name: "build"tty: truevolumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- mountPath: "/root/.m2/"name: "volume-maven-repo"readOnly: false- mountPath: "/etc/hosts"name: "volume-hosts"readOnly: false- command:- "cat"env:- name: "LANGUAGE"value: "en_US:en"- name: "LC_ALL"value: "en_US.UTF-8"- name: "LANG"value: "en_US.UTF-8"image: "registry.cn-beijing.aliyuncs.com/citools/kubectl:self-1.17"imagePullPolicy: "IfNotPresent"name: "kubectl"tty: truevolumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- mountPath: "/var/run/docker.sock"name: "volume-docker"readOnly: false- mountPath: "/mnt/.kube/"name: "volume-kubeconfig"readOnly: false- mountPath: "/etc/hosts"name: "volume-hosts"readOnly: false- command:- "cat"env:- name: "LANGUAGE"value: "en_US:en"- name: "LC_ALL"value: "en_US.UTF-8"- name: "LANG"value: "en_US.UTF-8"image: "registry.cn-beijing.aliyuncs.com/citools/docker:19.03.9-git"imagePullPolicy: "IfNotPresent"name: "docker"tty: truevolumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- mountPath: "/var/run/docker.sock"name: "volume-docker"readOnly: false- mountPath: "/etc/hosts"name: "volume-hosts"readOnly: falserestartPolicy: "Never"nodeSelector:build: "true"securityContext: {}volumes:- hostPath:path: "/var/run/docker.sock"name: "volume-docker"- hostPath:path: "/usr/share/zoneinfo/Asia/Shanghai"name: "volume-2"- hostPath:path: "/etc/hosts"name: "volume-hosts"- name: "volume-maven-repo"hostPath:path: "/opt/m2"- name: "volume-kubeconfig"secret:secretName: "multi-kube-config"
'''
}
}stages {stage('pulling Code') {parallel {stage('pulling Code') {when {expression {env.gitlabBranch == null}}steps {git(branch: "${BRANCH}", credentialsId: '13245b0d-3a26-475e-98e2-3c1e6f3536f8', url: "${REPO_URL}")}}stage('pulling Code by trigger') {when {expression {env.gitlabBranch != null}}steps {git(url: "${REPO_URL}", branch: env.gitlabBranch, credentialsId: '13245b0d-3a26-475e-98e2-3c1e6f3536f8')}}}}stage('initConfiguration') {steps {script {CommitID = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()CommitMessage = sh(returnStdout: true, script: "git log -1 --pretty=format:'%h : %an  %s'").trim()def curDate = sh(script: "date '+%Y%m%d-%H%M%S'", returnStdout: true).trim()TAG = curDate[0..14] + "-" + CommitID + "-" + BRANCH}}}stage('Building') {parallel {stage('Building') {steps {container(name: 'build') {sh """echo "Building Project..."${BUILD_COMMAND}"""}}}stage('Scan Code') {steps {sh 'echo "Scan Code"'}}}}stage('Build image') {steps {withCredentials([usernamePassword(credentialsId: 'REGISTRY_USER', passwordVariable: 'Password', usernameVariable: 'Username')]) {container(name: 'docker') {sh """docker build -t ${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG} .docker login -u ${Username} -p ${Password} ${HARBOR_ADDRESS}docker push ${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}"""}}}}stage('Deploy') {when {expression {DEPLOY != "false"}}steps {container(name: 'kubectl') {sh """cat ${KUBECONFIG_PATH} > /tmp/1.yaml/usr/local/bin/kubectl config use-context ${CLUSTER} --kubeconfig=/tmp/1.yamlexport KUBECONFIG=/tmp/1.yaml/usr/local/bin/kubectl set image ${DEPLOY_TYPE} -l ${DEPLOY_LABEL} ${CONTAINER_NAME}=${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG} -n ${NAMESPACE}
"""}}}}environment {CommitID = ''CommitMessage = ''TAG = ''}
}

#六.Jenkins配置k8s多集群
[root@k8s-master01 ~]# cat /etc/kubernetes/pki/ca.pem 复制到服务证书key
Jenkins->系统配置->Cloud

创建证书凭证
[root@k8s-master01 pki]# openssl pkcs12 -export -out /tmp/default.pfx -inkey admin-key.pem -in admin.pem -certfile ca.pem
Enter Export Password:
Verifying - Enter Export Password:
[root@k8s-master01 pki]# sz /tmp/default.pfx

Jenkins->系统配置->Cloud,把凭据和jenkins地址填上

Jenkins->全局安全配置,slave和master通讯,需要开端口

#七.KUBECONFIG多集群配置
[root@k8s-master01 pki]# cd /etc/kubernetes/pki/
[root@k8s-master01 pki]# cp ~/.kube/config ./multi-cluster.yaml
配置集群
[root@k8s-master01 pki]# kubectl config set-cluster test --certificate-authority=ca.pem --embed-certs=true --server=https://192.168.0.236:8443 --kubeconfig=multi-cluster.yaml
Cluster “test” set.
配置用户
[root@k8s-master01 pki]# kubectl config set-credentials test-admin --client-certificate=admin.pem --client-key=admin-key.pem --embed-certs=true --kubeconfig=multi-cluster.yaml
User “test-admin” set.
设置上下文
[root@k8s-master01 pki]# kubectl config set-context test --cluster=test --user=test-admin --kubeconfig=multi-cluster.yaml
Context “test” created.
[root@k8s-master01 pki]# kubectl --kubeconfig=multi-cluster.yaml config use-context test
Switched to context “test”.
[root@k8s-master01 pki]# kubectl get po --kubeconfig=multi-cluster.yaml
[root@k8s-master01 pki]# kubectl create secret generic multi-kube-config --from-file=multi-cluster.yaml
secret/multi-kube-config created
#八.Jenkins创建构建任务
根据gitlab Jenkinsfile文件中的变量设置参数


#九.测试
新项目上线,先制作好镜像推送到阿里镜像仓库,初始镜像为spring-cloud-demo-eureka:test
部署pod
[root@k8s-master01 ci]# cat app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
labels:
app: spring-cloud-demo-eureka
name: spring-cloud-demo-deploy
namespace: java-test
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-demo-eureka
template:
metadata:
labels:
app: spring-cloud-demo-eureka
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/java-demo-karl/spring-cloud-demo-eureka:test
name: spring-cloud-demo-eureka
[root@k8s-master01 ci]# kubectl apply -f app.yaml

jenkins启动构建任务,选择部署。此时会产生新镜像java-demo-karl/spring-cloud-demo-eureka:20210715-125232-a2e9b6b-master

根据Deploy部署执行kubectl set image 替换为新镜像

[root@k8s-master01 ci]# kubectl describe deploy spring-cloud-demo-deploy -n java-test | grep Image

Image:        registry.cn-hangzhou.aliyuncs.com/java-demo-karl/spring-cloud-demo-eureka:20210715-125232-a2e9b6b-master

自动化构建java应用实战相关推荐

  1. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战

    作者:寅务 www.jianshu.com/p/bdb0642b7495 1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服 ...

  2. java与自动化的应用实例_Electorn(桌面应用)自动化测试之Java+selenium实战例子...

    基于electorn的桌面应用,网上相关资料较少.所有记录一下.使用java+selenium+testng对该类型应用的自动化测试方法. 代码样例 package com.contract.web. ...

  3. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 项目完整源码下载 https://github ...

  4. Jenkins快速介绍及自动化构建实战

    文章目录 Jenkins是什么 Jenkins基本功能 Jenkins下载与安装: 创建自动化构建任务 Jenkins关闭和重启 Jenkins是什么 Jenkins是开源的CI(持续集成)和CD(持 ...

  5. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)......

    手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 原文: 手把手0基础项目实战(一)--教你搭建一套可自动化构 ...

  6. 《Java和Android开发实战详解》——2.2节构建Java应用程序

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  7. 推荐系统实战——自动化构建用户以及物料画像

    自动化构建用户以及物料画像 自动化构建用户以及物料画像 意义 新物料来源 物料画像的更新 物料更新添加入redis 合并,物料画像构建逻辑 用户侧画像的构建 画像自动化构建 用户画像更新脚本: pro ...

  8. 前端工程化实战 - 自动化构建工具

    文章目录 一.自动化构建简介 二.自动化构建初体验 2.1 场景描述 2.2 实际操作体验 三.常用的自动化构建工具 3.1 Grunt 3.2 Gulp 3.3 FIS 四.自动化构建工具 Grun ...

  9. Jenkins 与 GitLab 的自动化构建之旅

    本文来自作者 墨雪卿 在 GitChat 上分享 「Jenkins 与 GitLab 的自动化构建之旅」,「阅读原文」查看交流实录. 「文末高能」 上一篇:<Git 企业开发者教程> 1. ...

最新文章

  1. Restore Volume 操作 - 每天5分钟玩转 OpenStack(60)
  2. bootstrap3 表单构建器_实例演示:如何构建高可用的微服务架构
  3. HashMap内部结构深入剖析
  4. 会议论文影响因子多少_中国学术期刊影响因子年报(2020版)发布|中国心血管杂志影响力指数3年连升...
  5. AVL树(一)之 C语言的实现
  6. 私有云相对更流行的公有云和混合云有什么优势?
  7. leetcode103. 二叉树的锯齿形层次遍历(bfs)
  8. 无光驱不支持USB设备启动的笔记本,如何使用Ghost来安装系统
  9. Entropay(欧贝通)
  10. 前景色和背景色_好色之人福利 — 室内空间背景色
  11. virtualbox虚拟机迁移
  12. UniApp 获取屏幕分辨率
  13. 中国哲学简史 读书笔记
  14. html前端显示tiff
  15. Excel插件:按范围查找,按格式查找,标示相同值
  16. ACM纪念日 C语言
  17. mac下keytool 错误: java.lang.Exception: 密钥库文件不存在
  18. 跨境电商的支付方式有哪些?
  19. 关于全站仪自建坐标系知识梳理
  20. 软件工程师的职业规划

热门文章

  1. linux监控线程运行状态,linux查看线程状态--jstack
  2. es6 javascript 尾调用
  3. 面向对象设计——系统动态模型设计(1,交互模型)
  4. Assuming drive cache: write through 因为硬盘内存不足VM虚拟机开不了机的问题
  5. Aurix 多核链接文件 lsl --- 上篇
  6. 被挂上热搜的“最惨程序员”:别等到失业,才想起专业
  7. 系统架构师进阶(Believe Youself)
  8. 更新禅道踩坑问题及禅道更新步骤
  9. SQL Server 替换
  10. Python玫瑰花绘制