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再运行

原文地址:https://www.cnblogs.com/bk770466199/p/12259029.html