Jenkins学习笔记

时间:2024-03-24 11:55:53

什么是Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作。说白了就是减少人工的干预 利用软件去完成自动化构建的任务,比如web应用发布,一些php/java/js等语言开发的项目 开发完成后需要部署到远程服务器上 从开发者提交代码至git上后,一切的事情都有Jenkins去完成。这就是企业中所说的的持续集成(CI),另外还有持续交付(CD) 持续部署(CD)

Jenkins学习笔记

安装

安装方式有rpm包和war包 这2中比较普遍。这里采用的是rpm

 

  • 持续集成(Continunous Integration:CI) 代码合并,构建,部署,测试都在一起,不断的执行这个过程,并对结果反馈
    持续交付(Continunous Delivery:CD) 部署到生产环境,给用户使用
    持续部署(Continunous Deployment:CD) 部署到生产环境                                                                                                       Jenkins学习笔记
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y 
systemctl start jenkins

打开浏览器访问 http://172.16.113.146:8080

Jenkins学习笔记

可以看到 密码存储在 /var/lib/jenkins/secrets/initiaAdminPassword 下

Jenkins学习笔记 

可以按自己的需求定义插件 这里就安装默认插件

常用插件

用户权限管理

插件:Role-based Authorization Strategy

设定权限之前 先允许注册新用户
系统管理 >> 全局安全配置 >> 安全域 >> 允许新用户注册

Jenkins学习笔记

打开系统管理 进入 Manage and Assign Roles 进入角色权限配置界面

Jenkins学习笔记 Jenkins学习笔记Jenkins学习笔记

 

 

通过角色的权限 来控制用户的权限
Global roles: 全局角色
User:即为新创建的角色 一般来说只需要一个读取权限即可
admin: 默认创建 管理员使用

Project roles:项目角色
Team-A: A-.* # 匹配A开头的每个项目
Team-B: B-.* # 配配B开头的每个项目 (之后将用户添加到项目组里即可)

Jenkins学习笔记

将新注册的用户 添加到角色中和项目组中

参数化构建
插件:Extended Choice Parameter
添加参数化构建过程 密码参数及文本参数 为常用

Jenkins学习笔记 Jenkins学习笔记

Jenkins学习笔记 Jenkins学习笔记

Jenkins学习笔记 

Git Parmeter 显示git分支(结合前面定义的参数化构建的branch来使用)

Jenkins学习笔记 

 

Jenkins slave ( 子节点需要有java环境)

Jenkins学习笔记 Jenkins学习笔记

 

远程工作目录 /var/lib/jenkins
启动方式SSH
添加用户名密码
认证方式 Manually trusted key Verification Strategy
构建项目中配置 限制项目的运行节点 填上slave标签名 就可以指定节点构建

Jenkins学习笔记 Jenkins学习笔记

 

pipeline 流水线构建

pipeline构建 其他配置很少 基本都写在脚本里 node节点 拉取git代码 发布编译等等…
下图就是 构建的过程及展示,每个步骤全都分开 并提供日志查看

Jenkins学习笔记

 

 

pipeline的核心概念:
node:节点
一个node就是一个jenkins节点,或者是master,或者是agent,是执行step的菌体环境

step:步骤
step是一个最基本的操作单元,由各类jenkins plugin提供

stage:阶段
一个pipeline可以划分为若干个stage,每个stage代表一组操作,例如build,test,deploy
stage是一个逻辑分组的概念,可以跨多个node

官方提供的github示例脚本语法:

Jenkins学习笔记

node {    // 如果在从节点构建 在这里声明
   def mvnHome
   stage('Preparation') { // stage是步骤 这是拉取git代码
      git 'https://github.com/jglick/simple-maven-project-with-tests.git'
      mvnHome = tool 'M3'
   }
   stage('Build') { //构建
      if (isUnix()) {
         sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean package"
      } else {
         bat(/"${mvnHome}\bin\mvn" -Dmaven.test.failure.ignore clean package/)
      }
   }
   stage('Results') {  // 结果/打包
      junit '**/target/surefire-reports/TEST-*.xml'
      archive 'target/*.jar'
   }
}

也可以将脚本放到git上 便于指定

Jenkins学习笔记

 

# 这是一个以wordpress为例的脚本:
node ("slave-172.16.113.149") {
    stage('git checkout') {
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submodu
leCfg: [], userRemoteConfigs: [[url: '[email protected]:/home/git/repos/wordpress.git']]])
    }
    stage('code copy') {
        sh '''rm -rf ${WORKXPACE}/.git
        cp -rf /usr/share/nginx/html /data/backup/html-$(date +"%Y-%m-%d")
        rm -rf /usr/share/nginx/html/*
        cp -rf ${WORKSPACE} /usr/share/nginx/html
        echo "ok" >> /usr/share/nginx/html/A-pipeline-wp/status.html'''
    }
    stage('test') {
        sh '''curl http://wps.qxfell.com/status.html'''
    }
}
# 这是一个以maven构建的脚本例子:
node ("slave-172.16.113.147") {
    stage('git checkout') {
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submodu
leCfg: [], userRemoteConfigs: [[url: '[email protected]:/home/git/repos/solo.git']]])
    }
    stage('maven build') {
        sh '''
        echo $(hostname)
        export JAVA_HOME=/usr/local/jdk8u45
        /usr/local/maven-3.5/bin/mvn clean package -Dmaven.test.skip=true'''
    }
    stage('deploy') {
        sh '''export JAVA_HOME=/usr/local/jdk8u45
        JENKINS_NODE_COOKIE=dontkillme
        TOMCAT_NAME=tomcat8
        TOMCAT_HOME=/usr/local/$TOMCAT_NAME
        WWWROOT=$TOMCAT_HOME/webapps/ROOT
        [ -d $WWWROOT ] &&  mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%Y-%m-%d")
        rm -rf $WWWROOT/*
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT
        PID=$(ps -ef | grep catalina | grep -v "grep" | awk \'{print $2}\')
        [ -n "$PID" ] && kill -9 $PID
        /bin/bash $TOMCAT_HOME/bin/startup.sh
        echo "ok" >> $WWWROOT/status.html'''
    }