JenkinsPipeline是一套插件,支持将连续输送Pipeline实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过PipelineDSL为代码创建简单到复杂的传送Pipeline。 对于单个项目来说,使用这样的Pipeline来构建能够满足绝大部分需求,但是这样做也有很多缺陷,包括:
多个项目的Pipeline打包脚本不能公用,导致一个项目写一份脚本,维护比较麻烦。
Jenkins提供了一个更优雅的管理Pipeline脚本的方式,在配置项目Pipeline的时候,选择Pipeline script from SCM。
这样,Jenkins在启动job的时候,首先会去仓库里面拉取脚本,然后再运行这个脚本。在脚本里面,我们规定的构建方式和流程,就会按部就班地执行。
接下来我们来实践下。
一、Jenkins安装插件
系统管理--->管理插件--->可选插件--->搜索pipeline--->点击直接安装
系统管理--->管理插件--->可选插件--->搜索extended choice parameter---->点击直接安装
二、Jenkins安装插件
新建一个Pipline的Item后,配置选项卡,Pipeline里配置,在下面script path写入你工程下的Jeckinsfile的名称。
Jenkinsfile文件大概如下:
检出代码-》编绎-》打包并推送仓库-》发布部署
stage '审核'
node {
stage('检出代码'){
git branch: 'master',url:'http://10.20.16.3/ruancanghui/springbootdemo.git'
}
stage('Maven编绎'){
dir('./'){
sh 'mvn clean install -DskipTests=ture'
}
}
stage('推送仓库'){
dir('./'){
sh '/root/docker_dir/step1.sh'
}
}
stage('发布部署'){
dir('./'){
sh '/root/docker_dir/step2.sh'
}
}
}
两个脚本:
step1.sh:将打包的应用推送到私有仓库里
#!/bin/sh
jarName=spring-boot-demo-0.0.1-SNAPSHOT.jar
jarFolder=ph
projectName=ph
docker_path=${WORKSPACE}
echo jar path is "${WORKSPACE}\/target\/${jarName}"
cp ${WORKSPACE}/target/${jarName} ${docker_path}
sh /root/docker_dir/deploy_docker.sh ${projectName} ${docker_path} ${jarName}
setp2.sh:远程执行swarm的命令,运行程序。
set -e
echo ok
#ssh 10.20.17.217 'docker service rm wordpress_web'
ssh 10.20.17.217 'docker stack deploy wordpress --compose-file=/root/docker-compose.yml'
docker-compose.yml:-》拉取远程最新的镜像,映射到8888的端口
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: 10.20.17.180:5000/ph:latest
deploy:
replicas: 2
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8888:8888"
networks:
- webnet
networks:
webnet:
Dockerfile里的配置:
FROM registry-scu.cloudtogo.cn/ubuntu:jdk
COPY target/spring-boot-demo-0.0.1-SNAPSHOT.jar /spring-boot-demo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java" , "-jar" , "/spring-boot-demo-0.0.1-SNAPSHOT.jar"]
现在可以执行点击:自己就会发布了。
网友评论