自动化部署三剑客(三)

jenkins


什么是jenkins

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

开发工具:JAVA

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

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


Jenkins的优势和应用场景

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

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

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

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

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


jenkins安装配置管理

1.添加yum源(https://pkg.jenkins.io/redhat/

[root@jenkkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

[root@jenkkins ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

2.保证系统java环境为8.0

[root@jenkins ~]# yum install java -y

[root@jenkins ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

3.关闭防火墙和selinux

[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# systemctl disable firewalld

[root@jenkins ~]# setenforce 0

[root@jenkins ~]# cat /etc/selinux/config

SELINUX=disabled

jenkins安装与初始化工作

1.yum安装jenkins

[root@jenkins ~]# yum install jenkins -y

2.创建jenkins用户

[root@jenkins ~]# useradd deploy

3.更改jenkins启动用户和端口

[root@jenkins ~]# vim /etc/sysconfig/jenkins

JENKINS_USER="deploy"

JENKINS_PORT="8080"

4.更改家目录和日志目录的属猪和属组

[root@jenkins ~]# chown -R deploy:deploy /var/lib/jenkins

[root@jenkins ~]# chown -R deploy:deploy /var/log/jenkins

4.启动jenkins

[root@jenkins ~]# systemctl start jenkins.service 

我发现我修改了启动用户,jenkins端口起不来,我又改回去并重启机器了

据说还要改/var/cache/jenkins/的属组和属猪,我没改下次补上,看行不行

[root@jenkins ~]# lsof -i:8080
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    1145 jenkins  166u  IPv6  21469      0t0  TCP *:webcache (LISTEN)


登陆web界面:

获取密码:

[root@jenkins ~]# cat  /var/lib/jenkins/secrets/initialAdminPassword
eb8de3b50e764410a8bb371aa1b8771d

安装推荐的插件:

特别的慢:


Jenkins 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
      2.安装 git client , curl 工具依赖
      3.关闭系统Git http.sslVerify安全认证
      4.添加Jenkins后台Git client user 与email
      5.添加Jenkins后台Git Credential凭据

1.[root@jenkins ~]# echo "10.0.3.81 gitlab.example.com" >> /etc/hosts

2.[root@jenkins ~]# yum install git curl -y

3.[root@jenkins ~]# git config --system http.sslVerify false

4

注册Git plugin的name和email

系统管理》系统设置》Git plugin

添加Jenkins后台Git Credential凭据

凭据》系统》全局凭据》添加凭据

这个凭据就是gitlab的账号和密码


Jenkins Freestyle Job的构建与配置

1.创建一个freestyle project

2.编辑描述信息:

3.参数配置

4.源码管理:

如下图,服务器没装git,而且我git忘了关ssl验证(前面已经补上)

5.build配置


Jenkins Pipeline Job构建配置

Jenkins Pipeline Job编写规范


1.创建一个Pipeline job

2.添加描述信息:

3.pipeline脚本配置

#!groovy

pipeline {
    agent {node {label 'master'}}

    environment {
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
    }

    parameters {
        choice(
            choices: 'dev\nprod',
            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:"0acf3ea1-05d8-4705-8f9a-d72293a4813f", url: 'https://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.构建

首次构建pipeline job时,我们的参数没有引入到当前pipelinejob当中 

5.再次带有参数的构建

6.单击蓝色小按钮,查看控制台日志


Jenkins 应用

如何使用jenkins与我们平时使用的应用工具进行集成使用

编写job的同时使用任务调取jenkins的基础应用


Jenkins Linux shell 集成

Jenkins+ Linux shell

1.新建任务

 

2.添加描述

3.添加构建脚本

#!/bin/sh

user=`whoami`

if [ $user == 'deploy' ]
then
	echo "Hello, my name is $user"
else
	echo "Sorry, I am not $user"
fi

ip addr

cat /etc/system-release

free -m

df -h

py_cmd=`which python`

$py_cmd --version

4.保存并退出,开始构建

5.查看控制台信息


Jenkins参数集成

1.新建任务

2.添加描述

3.勾选参数化构建

添加选项参数

添加文本参数

添加布尔值参数:

添加密码参数

4.添加构建步骤,保存

#!/bin/sh

echo "Current deploy environment is $deploy_env"
echo "The build is $version"
echo "The paasword is $pass"

if $bool
then
	echo "Request is approved"
else
	echo "Request is rejected"
fi

5.开始构建


Jenkins git集成

1.新建任务

2.添加描述

3.源码管理,添加代码仓库,然后保存退出

4.立即构建

第一次,仓库为空构建报错


Jenkins maven集成

https://maven.apache.org/

 1.下载安装maven

[root@jenkins ~]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

[root@jenkins ~]# tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /opt

[root@jenkins ~]# cd /opt

[root@jenkins opt]# cd apache-maven-3.6.0/bin

[root@jenkins bin]# ./mvn --version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: /opt/apache-maven-3.6.0
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"

2.新建任务

3.添加描述

4.源码管理

5.添加构建步骤,保存

6.配置javahome和maven home

再次配置任务

保存并立即构建

这个构建比较慢


Jenkins ansible集成

环境准备:

安装python3.7,ansible git版本   8步走,如下

按照这篇教程来一般不会有报错:https://blog.csdn.net/qq_33317586/article/details/87304589

防止意外中断,可以在screen里操作

zipimport.ZipImportError: can't decompress data; zlib not available的处理方式:

[root@jenkins Python-3.7.2]# yum install zlib-devel zlib -y

ModuleNotFoundError: No module named '_ctypes'的处理方式

[root@jenkins Python-3.7.2]# yum install libffi-devel -y

1,开启密钥认证:

jenkins主机下的deploy系统用户到test.example.com这台主机的密钥认证

(.py3-a2.7.8-env) [deploy@jenkins ansible]$ ssh [email protected]
Last login: Sat Feb 23 20:20:52 2019 from 10.0.3.80
[root@client ~]# 

2.deploy目录下面有个ansible的配置文件

下图的user写成了use,图片就不改了,此处说明一次

3.新建任务

4.添加描述

5.构建>增加构建步骤>执行shell

6.点击立即构建,发现小圆圈是红色,点开提示权限不够,原来jenkins是以jenkins身份运行的,我没改成deploy用户

我以为把/home/deploy下面的文件属主都改为jenkins就可以了; 

  • [root@jenkins ~]# chown -R jenkins /home/deploy

再次构建:

终于发现原因了,因为我当时创建的jenkins是系统用户,没有家目录,密钥是必须放在家目录的,我su到jenkins用户,把deploy密钥复制过来,修改权限,测试连接test机器再构建就OK了

如下图:

猜你喜欢

转载自blog.csdn.net/qq_33317586/article/details/87869135