一、说明
jenkins、gitlab配置搭建请移步上篇博客:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/124236961
本篇主要讲述如何利用jenkins+gitlab+docker swarm构建spring-cloud集群
jenkins安装在192.168.1.119上,但是此机器不属于docker swarm集群机器
在docker swarm的manage节点上执行:docker swarm join-token worker
在119节点拷贝命令执行加入swarm集群。
返回110节点执行:docker promote 将119节点升级为manage,如果jenkins所在的宿主机非manage节点执行stack时会报错
编写eureka jenkins流水线脚本
#!groovy pipeline { //在任何可用的代理上执行Pipeline agent any //环境变量,初始确定后一般不需更改 tools { maven "M3" } //常量参数,初始确定后一般不需更改 environment{ cred_id='gitlab' source='http://192.168.1.119:7081/jyw/eureka.git' branch='master' active='server' maven_command='mvn -U clean package -Dmaven.test.skip=true' app_name = 'eureka' image_name = "192.168.1.119/demo/${app_name}:latest" } //pipeline的各个阶段场景 stages { stage('Preparation') { steps { echo "starting fetchCode from ${source}......" // Get some code from a GitHub repository git credentialsId:cred_id, url:source, branch:branch } } stage('Build Project & Unit Test') { steps { sh ''' $maven_command ''' } } stage ('镜像拉取') { steps { sh 'docker pull $image_name' } } stage('deploy') { steps { sh 'docker stack deploy -c /usr/eureka.yml demo' } } } }
将脚本上传至gitlab
jenkins新建任务
访问eureka:
eureka搭建成功
其他服务分别创建各自服务的jenkins文件,流水线脚本中改成各自的镜像,stack.xml文件改成各自的服务即可
构建oauth授权服务主要介绍流水线脚本
#!groovy
def harbor_url = "192.168.1.119"
pipeline {
//在任何可用的代理上执行Pipeline
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
skipStagesAfterUnstable()
timestamps()
}
//环境变量,初始确定后一般不需更改
tools {
maven "M3"
}
//常量参数,初始确定后一般不需更改
environment{
cred_id='gitlab'
source='http://192.168.1.119:7081/jyw/oauth.git'
branch='master'
active='uat'
maven_command='mvn -U clean package -Dmaven.test.skip=true'
app_name = 'oauth'
image_name = "192.168.1.119/demo/${app_name}:latest"
}
//pipeline的各个阶段场景
stages {
stage('Preparation') {
steps {
echo "starting fetchCode from ${source}......"
// Get some code from a GitHub repository
git credentialsId:cred_id, url:source, branch:branch
}
}
stage('编译&&打包项目'){
steps {
sh '''
$maven_command
'''
}
}
stage('构建镜像 && 推送镜像') {
steps {
script{
try{
def code = sh (
script: "docker service inspect demo_${app_name}",
returnStatus: true
)
// code 为0 代表 grep 找到 了 react-app 相关 的 container
if (code==0){
echo "有服务在运行"
sh ("docker service rm demo_${app_name}")
}
}catch(e){
echo '有服务在'
}
}
sh "mvn docker:build "
sh "docker login -u admin -p Harbor12345 ${harbor_url}"
sh "docker tag ${app_name}:latest ${image_name} "
sh "docker push ${image_name}"
}
}
stage('deploy') {
steps {
sh 'docker stack deploy -c /usr/oauth.yml demo'
sh "docker rmi \$(docker images -f 'dangling=true' -q)"
}
}
}
}
准备测试方法:
当前请求结果是:
将方法返回值改为如下内容推提交代码到gitlab:
jenkins重新构建oauth服务,并再次访问