Jenkins  slave

添加jenkins slave节点:
jenkins slave节点创建工作目录与基本环境配置,如果jenkins slave节点需要clone代码和执行java 代码编译,则
jenkins slave节点也需要配置java环境并且安装git、svn、maven等与master相同的基础运行环境,另外也要创建与
master相同的数据目录,方便后期目录切换与制品同步,此路径通常与master和各node节点保持一致。
 
创建工作路劲
root@harbor-jenkins-slave:~# mkdir -p /var/lib/jenkins
root@harbor-jenkins-slave:~# dpkg -i jdk-11.0.17_linux-x64_bin.deb

Jenkins凭据 

pipline 语法简介:
流水线过程定义在 Pipeline{}块中,在Pipeline 块定义了整个流水线中完成的所有的操作。
Stage:阶段,一个pipline可以划分为若干个stage,每个stage都是一个操作阶段,比如代码clone、代码编译、代码
测试和代码部署,阶段是一个逻辑分组,在pipline中可以实现跨多个node执行不同的stage。
Step:步骤,step是jenkins pipline最基本的操作单元,一个stage中可以有多个step,例如在代码clone的stage中
需要定义代码clone的step、在代码编译stage需要定义代码编译的step。
Node:
jenkins工作节点,可以是jenkins master也可以是jenkins slave,node是执行step的具体服务器。

pipline 语法-指定节点:
基于agent指令选择jenkins节点:
any:可以在任何可用的节点执行,有jenkins自动分配
pipeline {
  agent any
}
 
none:表示pipline脚本没有定义在默认执行的jenkins节点,需要在后续的每一个stage中单独定义节点
pipeline {
  agent any
  stages {
    stage('代码clone'){
      agent any
        steps{
            sh 'echo 代码clone'
        }
    }
    stage('代码部署'){
      agent any
        steps{
            sh 'echo 代码部署'
        }
    }
    stage('镜像更新'){
      agent any
        steps{
            sh 'echo 镜像更新'
        }
    }
  }
}
 
pipline 语法-指定节点:
基于agent指令选择jenkins节点:
label:通过标签指定在指定的节点执行从操作:
pipeline{
    //agent any  //全局必须带有agent,表明此pipeline执行节点
    agent { label 'jenkins-node1' } //基于label指定具体执行的步骤节点,非必须
    stages{
        stage("代码clone"){
            //#agent { label 'master' }  //基于label指定具体执行的步骤节点,非必须
            steps{
                sh "cd /var/lib/jenkins/workspace/pipline-test1 && rm -rf ./*"
                git branch: 'main', credentialsId: 'a3e9ab9f-1445-49af-b5b0-74b418181739', url: 'http://10.4.7.134/awen/app01.git'
                echo "代码 clone完成"
            }
        }
       
        stage("代码构建"){
            //#agent { label 'master' }  //基于label指定具体执行的步骤节点,非必须
          steps{
            sh "tar czvf frontend.tar.gz --exclude=.git --exclude=.gitignore  --exclude=README.md ./"
          }
        }    
    }
}
 
 
pipline 语法-指定节点:
基于agent指令选择jenkins节点:
node:和 label 的功能类似都是用于指定节点,区别是node可以额外设置一些参数配置,比如设置customWorkspace(设置当前stage的自定
义工作目录)

pipline 语法-指定节点:
基于agent指令选择jenkins节点:
node:和 label 的功能类似都是用于指定节点,区别是node可以额外设置一些参数配置,比如设置customWorkspace(设置当前stage的自定
义工作目录) 

pipeline {
agent none
stages {
stage('代码clone'){
agent {
node {
label 'jenkins-master'
customWorkspace "/data/gitdata/magedu"
}
}
steps {
sh "echo 代码clone"
}
}
stage('代码部署'){
agent {
node {
label 'jenkins-master'
customWorkspace "/data/gitdata/magedu"
}
}
steps {
sh "echo 代码部署"
}
}
}
}

基于input实现交互式操作:
Input 指令可以在流水线中实现必要的交互式操作,比如选择要部署的环境、是否向后继续执行任务等。
input配置简介:
message:必选,在input界面的提示信息,比如:“是否继续?”等,内容可自定义。
id:可选,input 的标识符,默认为 stage 的名称。
ok:可选,确认按钮的显示信息,比如可以是“确定” 、 “允许”等 自定义内容,默认继续为Proceed 、取消为 Abort。
submitter:可选,允许提交 input 操作的用户或组的名称,如果为空,任何登录用户均可提交 input。
parameters:提供一个参数列表供 input 使用。
pipeline {
  agent any
  stages {
    stage('交互测试') {
      input {
        message "是否继续部署?"
        ok "继续部署"
        submitter "admin"
      }
      steps {
        echo "Hello jenkins!"
      }
    }
  }
}

post指令:
post一般用于pipline流水线执行后的进一步处理,比如错误通知等,post可以针对流水线不同的执行结果做出不同的处理,比如执行
成功做什么处理、执行失败做什么处理等。
post条件简介:
Post 可以定义在 Pipeline 或 stage 中,目前支持以下条件:
always:无论Pipeline或stage的最后是执行成功还是失败,都执行post中定义的指令。
changed:只有当前Pipeline或stage的完成状态与它之前的运行不同时,比如从成功转换为失败、或从失败转换为成功,才执行post中定义的指令。
fixed:当本次Pipeline或stage成功,且上一次构建是失败或不稳定时,就执行post中定义的指令,从失败转换为成功。
regression:当本次Pipeline或stage的状态为失败、不稳定或终止,且上一次构建的状态为成功时,就执行post中定义的指令,从成功转换为失败。
failure:只有当前Pipeline或stage的完成状态为失败(failure),才允许在post部分运行该步骤,而且通常这时在Web界面中显示为红色。
success:当前执行状态为成功(success),执行post步骤,通常在Web界面中显示为蓝色或绿色。
unstable:当前状态为不稳定(unstable),执行post步骤,通常原因是由于测试失败或代码违规等造成,而且会在Web界面中显示为黄色。
aborted:当前状态为终止(aborted),执行该post步骤,通常由于流水线被手动终止触发,这时在在Web界面中显示为灰色。
unsuccessful:当前状态只要不是success时,执行该post步骤;
cleanup:无论pipeline或stage的完成状态如何,都允许运行该post中定义的指令,和always的区别在于cleanup会在post其它条件执行之后执行(最后执
行cleanup)
post发送邮件通知示例:
pipline-job-test9 演示在这执行异常后post阶段的操作,cleanup会晚于always执行,发送邮件需要提前配置好
jenkins的邮件通知配置:
pipeline {
  agent any
  stages {
    stage('post测试-代码clone阶段') {
        steps {
            sh 'echo git clone'
            sh 'cd /data/project'  //此步骤会执行失败,用于验证构建失败的邮件通知
      }
        post {
            cleanup {
              script {
                mail to: 'tshx1991@163.com',
                  subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
                  body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -cleanup 构建失败!\n 点击链接 ${env.BUILD_URL} 查看详情"
              }
            }
          always {
              script {
                mail to: 'tshx1991@163.com',
                  subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
                  body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -always 构建失败!\n 点击链接 ${env.BUILD_URL} 查看详情"
              }
            }
          aborted {
              echo "post aborted"
              }
          success {
            script {
              mail to: 'tshx1991@163.com',
                    subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
                    body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} - 构建成功!\n 点击链接 ${env.BUILD_URL} 查看详情"
              }
            }
          failure {
            script {
              mail to: 'tshx1991@163.com',
                    subject: "Pipeline Name: ${currentBuild.fullDisplayName}",
                    body: " ${env.JOB_NAME} -Build Number-${env.BUILD_NUMBER} -failure 构建失败!\n 点击链接 ${env.BUILD_URL} 查看详情"
              }
            }
        }
    }
  }
}
 
pipline环境变量:
基于environment传递环境变量:
pipeline {
  agent any
  environment {   //全局的变量,在当前pipline所有的stage中都会生效
    NAME='user1'
    PASSWD='123456'
  }
  stages {
    stage('环境变量stage1') {
      environment { //定义在stage中的变量只会在当前stage生效,其他的stage不会生效
        GIT_SERVER = 'http://10.4.7.134/awen/app01.git'
      }
      steps {
        sh """
            echo '$NAME'
            echo '$PASSWD'
            echo '$GIT_SERVER'
        """
      }
    }
    stage('环境变量stage2') {
      steps {
        sh """
            echo '${NAME}'
            echo '$PASSWD'
        """
      }
    }
  }
}
 
pipline参数简介:
 
基于parameters给step传递参数:
 可以基于parameters自定义参数,参数用于在执行pipline流水线的时候传递给step进行使用,比如传递选项参数、gitlab的分支、
镜像仓库、镜像tag等信息。
parameters简介:
string: #字符串类型参数,可以传递账户名、密码等参数
text: #文本型参数,一般用于定义多行文本内容的变量。
booleanParam:#布尔型参数
choice:#选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值使用
password: #密码型变量,一般用于定义敏感型变量,在 Jenkins 控制台会输出为*隐藏密码
 
pipeline {
  agent any
  parameters {
    string(name: 'BRANCH', defaultValue:  'develop', description: '分支选择')   //字符串参数,会配置在jenkins的参数化构建过程中
    choice(name: 'DEPLOY_ENV', choices: ['develop', 'production'], description: '部署环境选择')  //选项参数,会配置在jenkins的参数化构建过程中
  }
  stages {
    stage('测试参数1') {
      steps {
        sh "echo $BRANCH"
      }
    }
    stage('测试参数2') {
      steps {
        sh "echo $DEPLOY_ENV"
      }
    }
  }
}
jenkins配置会解析代码里的东西

options选项配置参数简介:
buildDiscarder(logRotator(numToKeepStr: '5')) //保留5个历史构建版本
timeout(time: 5, unit: 'MINUTES') //定义任务执行超时时间1小时,如果不加unit参数默认时间单位为分钟,支持NANOSECONDS,
MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS
timestamps() //在控制台显示命令执行的时间,格式为10:58:39
retry(2) //流水线构建失败后重试次数为2次
 
创建视图

/etc/sysctl.conf

vm.max_map_count = 524288
fs.file-max = 131072

apt-cache madison postgresql
postgresql | 14+238 | https://mirrors.aliyun.com/ubuntu jammy/main amd64 Packages
apt install postgresql

初始化

pg_createcluster --start 14 mycluster4

/etc/postgresql/14/mycluster/postgresql.conf

60 listen_addresses = '*' 
65 max_connections = 4096

/etc/postgresql/14/mycluster/pg_hba.conf

97 host    all             all             0.0.0.0/0            scram-sha-256

systemctl restart postgresql

su - postgres
 psql -U postgres
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1))
Type "help" for help.

postgres=# CREATE DATABASE sonar;
CREATE DATABASE
postgres=# CREATE USER sonar WITH ENCRYPTED PASSWORD '123456';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
GRANT
postgres=# ALTER DATABASE sonar OWNER TO sonar;
ALTER DATABASE
postgres=# \q
exit
logout

root用户

vim /etc/postgresql/14/mycluster/postgresql.conf

listen_addresses = '*' 
max_connections = 4096

vim /etc/postgresql/14/mycluster/pg_hba.conf
96 # IPv4 local connections:
97 host all all 0.0.0.0/0 scram-sha-256
 
 
 

cat /etc/security/limits.conf

sonarqube - nofie 131072
sonarqube - nnorce 8192

/etc/sysctl.conf

vm.max_map_count = 262144
fs.file-max = 65535

mkdir /apps && cd /apps/

useradd -r -m -s /bin/bash sonarqube && chown sonarqube.sonarqube /apps/ -R && su - sonarqube

unzip sonarqube-9.7.1.62043.zip

ln -sv /apps/sonarqube-9.7.1.62043 /apps/sonarqube

/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=123456

sonar.jdbc.url=jdbc:postgresql://10.4.7.137/sonar

启动sonar

/apps/sonarqube/bin/linux-x86-64$ ./sonar.sh start
/usr/lib/jvm/jdk-11/bin/java
Starting SonarQube...
Started SonarQube.

安装插件

root@jenkins:~# cat /etc/systemd/system/sonarqube.service
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup /usr/lib/jvm/jdk-11/bin/java -Xms512m -Xmx512m -Djava.net.preferIPv4Stack=true -jar /apps/sonarqube/lib/sonar-application-8.9.10.61524.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start sonarqube.service

部署sonar-scanner

root@jenkins:/usr/local/src# unzip sonar-scanner-cli-4.7.0.2747.zip

root@jenkins:/apps# ln -sv sonar-scanner-4.7.0.2747/ sonar-scanner

当前目录下执行

root@jenkins:/opt/python-test# /apps/sonar-scanner/bin/sonar-scanner

查看扫描结果

命令实现代码扫描

root@jenkins:/opt/python-test# /apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=ha -Dsonar.projectName=ha-python-app1 -Dsonar.projectVersion=1.0 -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8

pipeline {
  agent { label 'jenkins-node1' }
  parameters {
    string(name: 'BRANCH', defaultValue:  'develop', description: '分支选择')   //字符串参数,会配置在jenkins的参数化构建过程中
    choice(name: 'DEPLOY_ENV', choices: ['develop', 'production'], description: '部署环境选择')  //选项参数,会配置在jenkins的参数化构建过程中
  }
  stages {
    stage('变量测试1') {
      steps {
        sh "echo $env.WORKSPACE"  //JOB的工作目录,可用于后期目录切换
        sh "echo $env.JOB_URL"  //JOB的URL
        sh "echo $env.NODE_NAME"  //节点名称,master 名称显示built-in
        sh "echo $env.NODE_LABELS" //节点标签
        sh "echo $env.JENKINS_URL"  //jenkins的URL地址
        sh "echo $env.JENKINS_HOME" //jenkins的家目录路径
      }
    }
    stage("code clone"){
            //#agent { label 'master' }  //具体执行的步骤节点,非必须
      steps {
                deleteDir() //删除workDir当前目录
                script {
                    if ( env.BRANCH == 'main' ) {
                        git branch: 'main', credentialsId: 'a3e9ab9f-1445-49af-b5b0-74b418181739', url: 'http://10.4.7.134/awen/app02.git''
                    } else if ( env.BRANCH == 'develop' ) {
                        git branch: 'develop', credentialsId: 'a3e9ab9f-1445-49af-b5b0-74b418181739', url: 'http://10.4.7.134/awen/app02.git''
                    } else {
                        echo '您传递的分支参数BRANCH ERROR,请检查分支参数是否正确'
                    }
                    GIT_COMMIT_TAG = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() //获取clone完成的分支tagId,用于做镜像做tag
                }
          }
        }
    stage('python源代码质量扫描') {
        steps {
            sh "cd $env.WORKSPACE && /apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=magedu -Dsonar.projectName=magedu-python-app1 -Dsonar.projectVersion=1.0  -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8"
            }
        }
    }
}

Jenkins&&gitlab2的更多相关文章

  1. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  2. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  3. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

  4. 项目持续集成环境(jenkins + SVN + maven + tomcat)

    整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...

  5. Jenkins的一个bug-同时build一个项目两次导致失败

    我们有一个job A, A只是配置了一些参数,它会去触发模板job B. 我一开始点击构建A, 马上发现参数配置不对,于是撤消了构建,但是我没有发现B已经被触发,我重新配置参数,然后再次构建A,这个时 ...

  6. 使用Jenkins配置Git+Maven的自动化构建

    Jenkins是一个开源的持续集成工具,应用Jenkins搭建持续集成环境,可以进行自动构建.自动编译和部署,非常方便. 在服务器比较少的情况下,Jenkins的优势并不明显,但是随着项目发展,服务器 ...

  7. Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)

    所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...

  8. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  9. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

随机推荐

  1. 05_Java基础知识

    Java基础知识 一. Java的语言特点 面向对象(贴近人类思维模式,模拟现实世界,解决现实问题) 简单性(自动内存管理机制,不易造成内存溢出:简化流程处理.语义清晰) 跨平台(操作系统.服务器.数 ...

  2. 重学Java泛型

    一丶从字节码层面看范型擦除 public class Type1<T> { private T t; } 使用jclasslib插件查看其字节码: 可以看到 t属性的类型是List< ...

  3. QML 信号与响应方法的总结

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16748191.html 如果面试过程中,面试官想了解你对 ...

  4. Java一次返回中国所有省市区三级树形级联+前端vue展示【200ms内】

    一.前言 中国省市区还是不少的,省有34个,市有391个,区有1101个,这是以小编的库里的,可能不是最新的,但是个数也差不了多少. 当一次返回所有的数据,并且还要组装成一个三级树,一般的for,会循 ...

  5. [WPF] 抄抄超强的苹果官网滚动文字特效实现

    1. 前言 今天 ChokCoco 大佬发布了一篇博客 超强的苹果官网滚动文字特效实现,iPhone 我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手实现了一个 ...

  6. 深入浅出redis缓存应用

    0.1.索引 https://blog.waterflow.link/articles/1663169309611 1.只读缓存 只读缓存的流程是这样的: 当查询请求过来时,先从redis中查询数据, ...

  7. Codeforces Round #826 (Div. 3) A-E

    比赛链接 A 题解 知识点:模拟. 时间复杂度 \(O(n)\) 空间复杂度 \(O(n)\) 代码 #include <bits/stdc++.h> #define ll long lo ...

  8. Linux--多线程(一)

    线程 线程的概念 线程: 线程是OS能够进行运算调度的基本单位.线程是一个进程中的一个单一执行流,通俗地说,一个程序里的一个执行路线就叫做线程. 可以知道的是,一个进程至少有一个执行线程,这个线程就是 ...

  9. VMware Fusion配置NAT静态IP

    前言 本主机 CentOS8.2 Mac VMware Fusion 我们在使用虚拟机的时候,经常遇到这样的问题,我们会换地方,IP 会变化,如果虚拟机使用桥接的方式,那么很多与 IP 相关的服务都会 ...

  10. Nginx四层负载均衡1

    1.Nginx负载均衡Redis 服务器 IP地址 作用 系统版本 Nginx代理服务器 10.0.0.38 负载均衡服务器 Rocky8.6 Redis服务器1 10.0.0.18 Redis服务器 ...