引用自:http://baijiahao.baidu.com/s?id=1582812185263227836&wfr=spider&for=pc

引用自:https://www.cnblogs.com/YatHo/p/7856556.html

一、多参数选择

pipeline{
agent {
label '192.168.0.156'
}
parameters{
choice(name:'test',
choices:'test_a\ntest_b',
description:'this is test')
}
environment{
b = "/bbb"
}
stages{
stage('阶段1'){
steps{
script{
svn_addr="svn://192.168.0.151/pycf/Projects/fof2.0/fof2.0-product_daily_data"
a = "/home"
sh "ls"
sh "pwd"
sh "echo \"test1\""
sh "echo ${test}"
sh "echo \"当前构建ID:${env.BUILD_ID}\""
sh "echo \"当前构建JOB:${env.JOB_NAME}\""
sh "echo \"当前构建URL:${env.JENKINS_URL}\""
}
checkout([$class: 'SubversionSCM',
additionalCredentials: [],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [[credentialsId: 'ce2f6f79-ccf0-4c8b-a02a-4d52885cbce3',
depthOption: 'infinity',
ignoreExternalsOption: true,
local: '.',
remote: svn_addr ]],
quietOperation: true,
workspaceUpdater: [$class: 'UpdateUpdater']])
}
}
stage('阶段2'){
steps{
script{
sh "ls"
sh "echo \"test2\""
sh "echo ${a}"
sh "echo ${b}"
}
}
}
stage('阶段3'){
steps{
script{
sh "echo \"test3\""
}
}
}
stage('阶段4'){
steps{
script{
sh "echo \"test4\""
}
}
}
}
}

二、单参数选择

pipeline {

agent {
label '192.168.0.156'
}

options {
timeout(time: 30, unit: 'MINUTES')
}

parameters {
//构建选项,选择构建环境
choice(name: 'release_env',
choices:'pro',
description: 'choose release environment\nserver:47.98.172.183\npro port:4564')
}

stages {

stage('准备源码') {
steps {
script {
// 类似项目执行更改以下两个参数
svn_addr="svn://192.168.0.151/pycf/Projects/fof2.0/fof2.0-product_daily_data"
module_name="product_daily_data"

workdir="/application/docker_hub/java/fof2"
project_name="fof2"
r_env=release_env
docker_file_path="${workdir}/${module_name}_${r_env}"
docker_compose_file="${workdir}/docker-compose-${r_env}.yml"
docker_compose_module_name="${project_name}_${module_name}_${r_env}"
}
checkout([$class: 'SubversionSCM',
additionalCredentials: [],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [[credentialsId: 'dffd18a8-473e-477e-a4dc-4d528fa3e55c',
depthOption: 'infinity',
ignoreExternalsOption: true,
local: '.',
remote: svn_addr ]],
quietOperation: true,
workspaceUpdater: [$class: 'UpdateUpdater']])
}
}

stage('构建运行') {
steps {
sh "mkdir -p ${docker_file_path}; rm -rf ${docker_file_path}/*"
sh "/bin/cp -a ./* ${docker_file_path};"

sh "echo 'svn url: ${svn_addr}' > ${docker_file_path}/README.txt"
sh "svn upgrade . &> /dev/null||echo &> /dev/null"
sh "export LANG=en_US.UTF-8;svn info . 2>/dev/null|grep -i Revision|awk '{print \"svn revision: \"\$2}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins job: ${env.JOB_NAME}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build env: ${r_env}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build number: ${env.BUILD_NUMBER}' >> ${docker_file_path}/README.txt"

sh "cd /application/docker_hub/fof2.0-deploy/;/usr/bin/python main.py 10 yes;"
}
}

stage('等待30s检查业务') {
steps {
script {
sh "sleep 30;"
sh " cd /application/docker_hub/fof2.0-deploy/;/usr/bin/python check.py ${docker_compose_module_name};"
}
}
}

}
}

三、git或svn代码拉取方式如下:

四、java上线

  

pipeline {

agent {
label '192.168.0.156'
}

options {
timeout(time: 30, unit: 'MINUTES')
}

parameters {
//构建选项,选择构建环境
choice(name: 'release_env',
choices:'dev\npro',
description: 'choose release environment\ndev port:4900\npro port:4950 \nserver:192.168.0.156')
}

tools {
maven 'M3' #此处要在全局变量设置,如果节点没有,会在master自动去获取
jdk 'jdk_1.8.0_161' #此处要在全局变量设置,如果节点没有,会在master自动去获取
}

stages {

stage('准备源码') {
steps {
script {
// 类似项目执行更改以下两个参数
svn_addr="svn://192.168.0.151/pycf/Projects/pySecondSystemUpdate"
module_name="secondsystem_update"

workdir="/application/docker_hub/java/secondsystem"
project_name="secondsystem"
r_env=release_env
docker_file_path="${workdir}/${module_name}_${r_env}"
docker_compose_file="${workdir}/docker-compose-${r_env}.yml"
docker_compose_module_name="${module_name}_${r_env}"
send_mail_to = 'huruizhi@pystandard.com'
// logs
old_date=sh returnStdout: true ,script: "echo \$(date -d '-1 hour' '+%F-%H-%M-%S')"
old_date=old_date.trim()
date=sh returnStdout: true ,script: "echo \$(date '+%F-%H-%M-%S')"
date=date.trim()
logsdir="/application/docker_hub/logs/pySecondSystemUpdate"
module_logs_path="${logsdir}/${module_name}_${r_env}"
sh "mkdir -p ${module_logs_path}"
docker_containers_path="/var/lib/docker/containers"
}
checkout([$class: 'SubversionSCM',
additionalCredentials: [],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [[credentialsId: 'dffd18a8-473e-477e-a4dc-4d528fa3e55c',
depthOption: 'infinity',
ignoreExternalsOption: true,
local: '.',
remote: svn_addr ]],
quietOperation: true,
workspaceUpdater: [$class: 'UpdateUpdater']])
}
}

stage('MVN打包') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}

stage('MVN测试') {
steps {
sh 'mvn test'
}
}

stage('生成Dockerfile') {
steps {
sh "mkdir -p ${docker_file_path}; rm -rf ${docker_file_path}/*"
sh "/bin/cp -a ./target/*.jar ${docker_file_path}; /bin/cp -a /usr/share/zoneinfo/Asia/Shanghai ${docker_file_path}"

sh "echo '#!/bin/bash\n\
app=\$(ps aux|grep -w ${docker_compose_module_name}.jar|grep -v grep|wc -l)\n\
if [[ \${app} != 0 ]];then\n\
exit 0\n\
fi\n\
exit 1\n\
' > ${docker_file_path}/docker-healthcheck"
sh "sed -i 's/^[ \t]*//g' ${docker_file_path}/docker-healthcheck"

sh "echo 'FROM java:8\n\
VOLUME /tmp\n\
ADD *.jar /${docker_compose_module_name}.jar\n\
ADD Shanghai /etc/localtime\n\
ADD docker-healthcheck /usr/bin\n\
RUN chmod 755 /usr/bin/docker-healthcheck\n\
RUN echo \'Asia/Shanghai\' > /etc/timezone\n\
RUN echo \"export TZ=\'Asia/Shanghai\'\" >> /etc/profile\n\
EXPOSE 5000\n\
HEALTHCHECK --interval=5s --timeout=2s --retries=3 CMD [\"/usr/bin/docker-healthcheck\"]\n\
ENTRYPOINT [\"java\",\"-jar\",\"/${docker_compose_module_name}.jar\",\"--server.port=5000\", \"--spring.profiles.active=${r_env}\"]\n\
' > ${docker_file_path}/Dockerfile"
sh "sed -i 's/^[ \t]*//g' ${docker_file_path}/Dockerfile"

sh "echo 'svn url: ${svn_addr}' > ${docker_file_path}/README.txt"
sh "svn upgrade . &> /dev/null||echo &> /dev/null"
sh "export LANG=en_US.UTF-8;svn info . 2>/dev/null|grep -i Revision|awk '{print \"svn revision: \"\$2}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins job: ${env.JOB_NAME}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build env: ${r_env}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build number: ${env.BUILD_NUMBER}' >> ${docker_file_path}/README.txt"
}
}

stage('停止业务') {
steps {
sh "cat ${docker_compose_file}|grep build:|awk '{print \$2}'|xargs mkdir -p||echo ''"
sh "docker-compose -f ${docker_compose_file} stop ${docker_compose_module_name}||echo '${docker_compose_module_name}' is not exist"
}
}

stage('备份日志') {
steps {
script {
docker_old_container_id=sh returnStdout: true ,script: "/usr/bin/docker ps -aqf 'name=${docker_compose_module_name}'"
docker_old_container_id=docker_old_container_id.trim()
if (docker_old_container_id != '' ) {
docker_old_container_id_log_file=sh returnStdout: true ,script: "find ${module_logs_path} -type l | xargs basename || echo ${old_date}.log"
docker_old_container_id_log_file=docker_old_container_id_log_file.trim()
sh "rm -rf ${module_logs_path}/${docker_old_container_id_log_file}||echo ''"
sh "/bin/cp -a ${docker_containers_path}/${docker_old_container_id}*/${docker_old_container_id}*.log ${module_logs_path}/${docker_old_container_id_log_file}"
}
}
}
}

stage('构建运行') {
steps {
sh "docker-compose -f ${docker_compose_file} rm -f ${docker_compose_module_name}||echo '${docker_compose_module_name}' is not exist"
sh "docker-compose -f ${docker_compose_file} up --build -d ${docker_compose_module_name}"
}
}

stage('链接日志') {
steps {
script {
docker_new_container_id=sh returnStdout: true ,script: "/usr/bin/docker ps -aqf 'name=${docker_compose_module_name}'"
docker_new_container_id=docker_new_container_id.trim()
sh "/usr/bin/ln -sf ${docker_containers_path}/${docker_new_container_id}*/${docker_new_container_id}*.log ${module_logs_path}/${date}.log"
sh "chmod 755 -R ${docker_containers_path}"
}
}
}

stage('等待30s检查业务') {
steps {
script {
sh "sleep 30;"
docker_health_check=sh returnStdout: true ,script: "/usr/bin/docker ps 2>/dev/null|grep -w ${docker_compose_module_name}|grep -w healthy|wc -l"
docker_health_check=docker_health_check.trim()
if (docker_health_check == '0') {
sh "echo '${docker_compose_module_name} status is unhealthy';docker-compose -f ${docker_compose_file} logs ${docker_compose_module_name} || echo '${docker_compose_module_name}' is not exist;exit 1"
}
sh "echo '${docker_compose_module_name} status is healthy';exit 0"
}
}
}

}
}

四、python + docker

pipeline {

agent {
label '192.168.0.156'
}

options {
timeout(time: 30, unit: 'MINUTES')
}

parameters {
//构建选项,选择构建环境
choice(name: 'release_env',
choices:'dev\npro',
description: 'choose release environment\ndev port:4801\npro port:4851\nserver:192.168.0.156')
}

stages {

stage('准备源码') {
steps {
script {
// 类似项目执行更改以下两个参数
svn_addr="svn://192.168.0.151/pycf/Projects/PythonProjects/quality"
module_name="qc_bond_stock"

workdir="/application/docker_hub/quality_control"
project_name="quality_control"
r_env=release_env
docker_file_path="${workdir}/${module_name}_${r_env}"
docker_compose_file="${workdir}/docker-compose-${r_env}.yml"
docker_compose_module_name="${project_name}_${module_name}_${r_env}"
}
checkout([$class: 'SubversionSCM',
additionalCredentials: [],
excludedCommitMessages: '',
excludedRegions: '',
excludedRevprop: '',
excludedUsers: '',
filterChangelog: false,
ignoreDirPropChanges: false,
includedRegions: '',
locations: [[credentialsId: 'dffd18a8-473e-477e-a4dc-4d528fa3e55c',
depthOption: 'infinity',
ignoreExternalsOption: true,
local: '.',
remote: svn_addr ]],
quietOperation: true,
workspaceUpdater: [$class: 'UpdateUpdater']])
}
}

stage('构建运行') {
steps {
sh "mkdir -p ${docker_file_path}; rm -rf ${docker_file_path}/*"
sh "/bin/cp -a ./* ${docker_file_path};"

sh "echo 'svn url: ${svn_addr}' > ${docker_file_path}/README.txt"
sh "svn upgrade . &> /dev/null||echo &> /dev/null"
sh "export LANG=en_US.UTF-8;svn info . 2>/dev/null|grep -i Revision|awk '{print \"svn revision: \"\$2}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins job: ${env.JOB_NAME}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build env: ${r_env}' >> ${docker_file_path}/README.txt"
sh "echo 'jenkins build number: ${env.BUILD_NUMBER}' >> ${docker_file_path}/README.txt"

sh "cat ${docker_compose_file}|grep build:|awk '{print \$2}'|xargs mkdir -p||echo 'no path' to mk"
sh "docker-compose -f ${docker_compose_file} stop ${docker_compose_module_name}||echo '${docker_compose_module_name}' is not exist"
sh "docker-compose -f ${docker_compose_file} rm -f ${docker_compose_module_name}||echo '${docker_compose_module_name}' is not exist"
sh "docker-compose -f ${docker_compose_file} up --build -d ${docker_compose_module_name}"
}
}

stage('等待30s检查业务') {
steps {
script {
sh "sleep 30;"
docker_health_check=sh returnStdout: true ,script: "/usr/bin/docker ps 2>/dev/null|grep -w ${docker_compose_module_name}|grep -w healthy|wc -l"
docker_health_check=docker_health_check.trim()
if (docker_health_check == '0') {
sh "echo '${docker_compose_module_name} status is unhealthy';docker-compose -f ${docker_compose_file} logs ${docker_compose_module_name} || echo '${docker_compose_module_name}' is not exist;exit 1"
}
sh "echo '${docker_compose_module_name} status is healthy';exit 0"
}
}
}

}
}

五、配置好maven和jdk后要点击此处才能查看

Jenkins Pipline语法的更多相关文章

  1. jenkins pipline 几个注意细节

    新建jenkins pipline 1)pipeline的脚本语法要正确,sonarqube的projectKey需要做相应的修改 2)先执行一次构建,会报错 3)进到jenkins workspac ...

  2. 持续集成工具之Jenkins pipline简单示例

    前文我们主要聊了下jenkins的插件安装.用户及权限管理.邮件发送.配置凭证到gitlab上拉取项目和创建普通job:回顾请参考https://www.cnblogs.com/qiuhom-1874 ...

  3. jenkins pipline 和 jenkinsfile

    Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中.Jenkins Pipeline 提供了一套可扩展的 ...

  4. jenkins pipline和jenkinsfile

    Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中. Jenkins Pipeline 提供了一套可扩展 ...

  5. 使用Jenkins+Pipline 持构建自动化部署之安卓源码打包、测试、邮件通知

    一.引言 Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息 ...

  6. Jenkins pipeline 语法详解

    原文地址http://www.cnblogs.com/fengjian2016/p/8227532.html pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节 ...

  7. ubuntu 16.04 jenkins pipline的实现 最终docker启动服务

    准备工作:两台虚拟机A:192.168.1.60 B:192.168.1.61 C:一个存放代码的代码库(github)A:jenkins git docker openssh-server(ssh) ...

  8. Jenkins Pipeline 语法

    Pipeline语法 先讲Declarative Pipeline,所有声明式管道都必须包含在pipeline块中: 123 pipeline { /* insert Declarative Pipe ...

  9. jenkins pipeline语法

    目录 一.声明式 二.脚本式 基本 判断 异常处理 Steps node withEnv 一.声明式 声明式Pipeline必须包含在名为pipeline的语句块中,典型的声明式Pipeline语法如 ...

随机推荐

  1. cmd 命令 添加端口

    cmd 添加端口:netsh firewall add portopening tcp 45625 "telnet"

  2. JavaScript动态修改CSS

    链接:https://www.cnblogs.com/aademeng/articles/6279060.html 在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几 ...

  3. JavaScript之调试工具之断言assert

    1.单点断言 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  4. Java SE之Java工作原理

     在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后 ...

  5. MGR架构~单写模式架构的搭建

    一 简介 :MGR一直没有时间测试,今天咱们来初步了解搭建一下呗 二 环境: mysql5.7.20  单台机器 启动三实例 三  mysql 搭建: 1 建立相关目录+ mkdir -p /data ...

  6. bootstrap3在IE8下导航不显示,自动识别成手机模式

    想让bootstrap3兼容ie8,需要将html5shiv.js.respond.js还有bootstrap的所有css.js文件都放在本地服务器空间,不能用CDN. bootstrap所有css. ...

  7. SILC超像素分割算法详解(附Python代码)

    SILC算法详解 一.原理介绍 SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像素(superpixel) 算法步骤: 已知一副图像大小M*N,可 ...

  8. javascript随笔和常见的知识点

    1.js中循环中用 return只能停止循环,不能停止到函数的定义部分.所以下面的返回值为1 return 100没有意义,只起到终止循环的目的 function bb() { var sum = 0 ...

  9. 如何在linux系统下配置无线网卡?【转】

    转自:http://www.jb51.net/LINUXjishu/61315.html 本文介绍在Linux 命令行界面中手动配置无线网卡的方法.目前流行的多数发行版都支持用图形界面的network ...

  10. flask_restplus(1)- 未完成

    快速开始 本指南假设您对Flask有一定的了解,并且您已经安装了Flask和Flask- restplus.如果没有,则按照安装部分中的步骤操作. 初始化 与其他所有扩展一样,您可以使用应用程序对象初 ...