zoukankan      html  css  js  c++  java
  • Jenkins+Ansible+Gitlab自动化部署三剑客(三)--Jenkins

    Jenkins介绍

    jenkins是一个开源持续集成工具

    开发工具: JAVA

    功能: 提供了软件开发的持续集成服务

    特点: 支持主流软件配置管理,配合实现软件配置管理,持续集成功能

    Jenkins的优势和应用场景

    主流的运维开发平台,兼容所有主流开发环境

    插件市场可与海量业内主流开发工具实现集成

    job为配置单位与日志管理,使运维与开发人员能协同工作

    权限管理划分不同job不同角色

    强大的负载均衡功能,保证我们项目的可靠性

    Jenkins安装配置管理

    安装Jenkins前的环境准备(CentOS7)

    1.添加yum仓库源

    # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

    #rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

    2.保证系统JAVA版本为8.0或8.0以上

    # yum -y install java

    #java -version

    3.关闭系统防火墙

    # systemctl stop firewalld

    # systemctl disable firewalld

    4.关闭SELINUX(强制访问控制安全策略)并重启

    # vi /etc/sysconfig/selinux

    ...

    SELINUX=disabled

    ...

    # reboot

    Jenkins安装与初始化配置

    1.Yum源安装Jenkins最新版本

    # yum install jenkins

    2.创建Jenkins系统用户

    # useradd deploy

    3.更改Jenkins启动用户与端口

    # vi /etc/sysconfig/jenkins

    ...

    JENKINS_USER=deploy

    JENKINS_PORT=8080

    ...

    4.启动Jenkins

    # systemctl start jenkins

    遇到的问题:

    这里通过lsof -i:8080查看端口,但是端口并没有启动

    查看日志
    cat /var/log/jenkins/jenkins.log

     java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (权限不够)

    看到是因为deploy用户没有/var/cache目录的权限

    chown -R deploy:deploy /var/cache/jenkins/
    修改目录权限后,问题解决

     登录jenkins web管理界面

    根据路径查找对应密码

     选择社区版

     等待安装

     安装完成创建用户,这里等待安装的时间可能比较长

     

     

    Jenkins job的介绍(Freestyle job 和 Pipeline job)

    代表一个任务或者项目

    可配置与可执行

    执行后的记录称之为Build

    日志监控与记录

    所有文件集中保存

    Freestyle job

    1.需要在页面添加模块配置项与参数完成配置

    2.每个Job仅能实现一个开发功能

    3.无法将配置代码化,不利于job配置迁移与版本控制

    4.逻辑相对简单,无需额外的学习成本

    Pipeline job

    匹配持续集成与持续交付的概念

    1.所有模块,参数配置都可以体现为一个pipeline脚本

    2.可以定义多个stage构建一个管道工作集

    3.所有配置代码化,方便Job配置迁移与版本控制

    4.需要pipeline脚本语法基础

    Jenkins job环境准备

    1.配置Jenkins server本地Gitlab DNS

    vim /etc/hosts

    192.168.0.115 gitlab.example.com

    2.安装git clent,curl工具依赖

    yum -y install git curl

    3.关闭系统Git http.sslVerify安全认证

    4.添加Jenkins后台Git client user 与email

     5.添加凭据

    Jenkins freestyle job的构建与配置

     1.创建一个Freestyle project

    项目构建配置

     

     

    #!/bin/sh
    
    export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
    
    # Print env variable
    echo "[INFO] Print env variable"
    echo "Current deployment envrionment is $deploy_env" >> test.properties
    echo "THe build is $version" >> test.properties
    echo "[INFO] Done..."
    
    # Check test properties
    echo "[INFO] Check test properties"
    if [ -s test.properties ]
    then
      cat test.properties
      echo "[INFO] Done..."
    else
      echo "test.properties is empty"
    fi
    
    echo "[INFO] Build finished..."

    OK,保存

    接下来点击Build with Parameters构建任务

     

    Jenkins Pipeline job的编码规范

    pipeline基础架构

    1.所有代码包裹在pipeline{}层内

    2.stages{}层用来包含该pipeline所有stage子层

    3.stage{}层用来包含具体我们需要编写任务的steps{}子层

    4.steps{}层用来添加我们具体需要调用的模块语句

     agent区域

    1.agent定义pipeline在哪里运行

    可以使用any,none,或具体的jenkins node主机名等

    例如:我们要特指在node1上执行,可以写成

    agent{node {label 'node1'}}

    environment区域

    1."变量名称=变量值"定义我们的环境变量

    2.可以定义全局环境变量,应用所有stages任务

    3.可以定义stage环境变量,应用单独的stage任务

    script区域(可选)

    1.在steps内定义script{}

    2.groovy脚本语言

    3.用来进行脚本逻辑运算

    常用的steps区域

    echo:打印输出

    sh:调用Linux系统shell命令

    git url:调用git模块进行git相关操作

    Jenkins Pipeline job的构建配置

     新建项目

     2.添加描述保存

     3.添加pipeline script

      

     

    #!groovy
    
    pipeline {
        agent {node {label 'master'}}
    
        environment {
            PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
        }
    
        parameters {
            choice(
                choices: 'dev
    prod',
                description: 'choose deploy environment',
                name: 'deploy_env'
                )
            string (name: 'version', defaultValue: '1.0.0', description: 'build version')
        }
    
        stages {
            stage("Checkout test repo") {
                steps{
                    sh 'git config --global http.sslVerify false'
                    dir ("${env.WORKSPACE}") {
                        git branch: 'master', credentialsId:"1bc88d18-1b1d-46e1-a8cb-0893d2c42e51", url: 'https://root@gitlab.example.com/root/test-repo.git'
                    }
                }
            }
            stage("Print env variable") {
                steps {
                    dir ("${env.WORKSPACE}") {
                        sh """
                        echo "[INFO] Print env variable"
                        echo "Current deployment environment is $deploy_env" >> test.properties
                        echo "The build is $version" >> test.properties
                        echo "[INFO] Done..."
                        """
                    }
                }
            }
            stage("Check test properties") {
                steps{
                    dir ("${env.WORKSPACE}") {
                        sh """
                        echo "[INFO] Check test properties"
                        if [ -s test.properties ]
                        then 
                            cat test.properties
                            echo "[INFO] Done..."
                        else
                            echo "test.properties is empty"
                        fi
                        """
    
                        echo "[INFO] Build finished..."
                    }
                }
            }
        }
    }

    4.立即构建

     这里报错:groovy.lang.MissingPropertyException: No such property: deploy_env for class: groovy.lang.Binding

    需要点击Build with Parameters再运行

  • 相关阅读:
    观察者模式
    strchr
    行转列
    Ja.Net:融合 Java 1.5 和 .NET !
    主题:借JavaFX之风,Swing终于熬到了出头之日
    DOM和SAX概念的总结
    几个linux的命令技巧
    gcc编译的东东
    详细介绍DOM和SAX
    oracle的number类型默认长度是多少?
  • 原文地址:https://www.cnblogs.com/bk770466199/p/12259029.html
Copyright © 2011-2022 走看看