Jenkins + Ansible + Gitlab(三)

10 篇文章 0 订阅
5 篇文章 6 订阅
本文详细介绍了如何使用Jenkins、Ansible和Gitlab进行自动化部署,包括Jenkins的安装配置、Job类型、Maven集成以及Ansible的集成。通过实例展示了Freestyle Job和Pipeline Job的配置与构建过程,强调了Pipeline Job的优势。
摘要由CSDN通过智能技术生成
版本控制系统    Gitlab Github

持续集成工具    Jenkins

部署工具    Ansible Saltstack Chef

本文通过Jenkins + Ansible + Gitlab实现自动化部署。


Jenkins介绍

Jenkins是一个开源可扩展的,持续集成、交付、部署(软件/代码的编译、打包、部署)工具,由Java开发,它提供了软件开发的持续集成服务,支持主流软件配置管理、配合实现软件配置管理及持续集成功能。

  • jenkins的优势:
1. 主流的运维开发平台,兼容所有主流开发环境

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

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

4. 权限管理划分不同的Job不同角色

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

环境准备

3台机器需要做环境准备。

  • 角色划分:
Jenkins + Ansible   192.168.30.128

test host   192.168.30.129

gitlab  192.168.30.130
  • 关闭防火墙和selinux:
# systemctl stop firewalld && systemctl disable firewalld

# setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
  • 添加本地dns:
# vim /etc/hosts

192.168.30.128 jenkins.lzxlinux.com
192.168.30.129 test.lzxlinux.com
192.168.30.130 gitlab.lzxlinux.com

在Windows电脑hosts文件中添加本地dns:

192.168.30.128 jenkins.lzxlinux.com
192.168.30.129 test.lzxlinux.com
192.168.30.130 gitlab.lzxlinux.com

Jenkins安装配置

  • 添加yum仓库源:
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

# cat /etc/yum.repos.d/jenkins.repo

[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1				#为1时会检测key

# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  • 安装java(java版本在8.0及以上):
# yum install -y java

# java -version

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
  • 安装jenkins:
# yum install -y jenkins
  • 创建jenkins系统用户:
# useradd deploy
  • 更改jenkins启动用户与端口:
# vim /etc/sysconfig/jenkins

JENKINS_USER="deploy"               #保证jenkins启动用户与ansible部署用户一致
JENKINS_PORT="8080"

# chown -R deploy:deploy /var/lib/jenkins

# chown -R deploy:deploy /var/log/jenkins

# chown -R deploy:deploy /var/cache/jenkins
  • 启动jenkins并开机启动:
# systemctl start jenkins && systemctl enable jenkins

# netstat -lntp |grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      1441/java

打开网页,访问jenkins.lzxlinux.com:8080

在这里插入图片描述

查看/var/lib/jenkins/secrets/initialAdminPassword,复制密码登录。

选择安装推荐的插件

在这里插入图片描述

创建admin用户,自定义密码

在这里插入图片描述

url保持默认,进入jenkins页面。


Jenkins Job介绍

jenkins的每个job代表一个任务或项目,它是可配置与可执行的。执行job后的记录称之为build(构建)。

jenkins job分为两种:freestyle jobpipeline job

  • 两者区别:
freestyle job:
    1. 需在页面添加模块配置项与参数完成配置
    2. 每个job仅能实现一个开放功能
    3. 无法将配置代码化,不利于job配置迁移与版本控制
    4. 逻辑相对简单,无需额外学习成本

pipeline job:
    1. 所有模块、参数配置都可以体现为一个pipeline脚本
    2. 可定义多个stage构建一个管道工作集
    3. 所有配置代码化,方便job配置迁移与版本控制
    4. 需要pipeline脚本语法基础
  • jenkins环境准备:
  1. 配置jenkins server本地gitlab dns
# echo '192.168.30.130 gitlab.lzxlinux.com' >> /etc/hosts
  1. jenkins server安装git client、curl工具依赖
# yum install -y git curl
  1. jenkins server关闭系统git http.sslVerify安全认证
# git config --system http.sslVerify false
  1. 添加jenkins后台git client user与email

系统管理系统设置Git plugin,填入user与email

在这里插入图片描述

  1. 添加jenkins后台git credential凭据

凭据全局添加凭据,类型为Username with password, 范围为全局

在这里插入图片描述


Freestyle Job配置与构建

  • 配置freestyle job:

点击新建任务,任务名称输入test-freestyle-job,选择自由风格的软件项目

添加描述信息:This is my first test freestyle job,勾选参数化构建过程,添加选项参数文本参数

在这里插入图片描述

在这里插入图片描述

接着源码管理,勾选Git,写入之前gitlab的test-repo这个项目地址,然后选择前面添加的git凭据

在这里插入图片描述

接着构建增加构建步骤执行 shell,写入下面内容

#!/bin/bash

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 environment 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..."

在这里插入图片描述

点击应用,再点击保存

  • 构建freestyle job:

点击Build with Parameters,选择对应的选项参数,选择好后点击开始构建

在这里插入图片描述

等待构建完成,查看控制台输出

在这里插入图片描述

可以看到,构建的工作区路径为/var/lib/jenkins/workspace/test-freestyle-job,该job的配置文件都会保存在该路径中。

git部分相当于对gitlab的test-repo项目仓库做了git clone操作,接着执行了定义的shell脚本,最终的构建结果是SUCCESS。


Pipeline Job构建与配置

  • pipeline基础架构:
1. 所有代码包裹在pipeline{}层内

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

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

4. steps{}层用来添加具体需要调用的模块语句
agent区域
    agent定义pipeline在哪里运行,可以使用any、none或具体的jenkins node主机名
    
environment区域
    "变量名称=变量值",定义环境变量。可在pipeline{}层定义全局环境变量,应用于所有stages任务
    
steps区域
    echo模块:打印输出
    sh模块:调用linux系统shell命令
    git url:调用git模块进行git相关操作
    
script区域(可选)
    该区域定义在steps{}层内,可编写groovy脚本语言,用来进行脚本逻辑运算
  • 配置pipeline job:

点击新建任务,任务名称输入test-pipeline-job,选择流水线

添加描述信息:This is my first test pipeline job

在这里插入图片描述

接着定义Pipeline script,写入下面内容

#!groovy

pipeline {
    agent {node {label 'master'}}
    
    environment {
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
    }
    
    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.sslVertify false'
                dir ("${env.WORKSPACE}") {
                    git branch: 'master', credentialsId: "00ee2c7c-c475-440c-a88f-dd6c9a49f669", url: 'https://root@gitlab.lzxlinux.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..."
                    """
                }
            }
        }
    }
}

上面的credentialsId即00ee2c7c-c475-440c-a88f-dd6c9a49f669,是复制凭据页面创建该凭据(gitlab管理员全局凭据)时自动生成的凭据id。

在这里插入图片描述

点击应用,再点击保存

  • 构建pipeline job:

点击立即构建,等待构建完成,会发现构建失败,原因是第一次构建时选项参数没有引入到当前的pipeline job中。

在这里插入图片描述

点击test-pipeline-job回到该项目中,会发现立即构建变成了Build with Parameters,选择对应的选项参数,选择好后点击开始构建

在这里插入图片描述

第二次构建则成功了,查看控制台输出

在这里插入图片描述

在这里插入图片描述

通过前面两次构建,对比freestyle job和pipeline job,可以看到,pipeline job将所有配置代码化,方便job配置迁移与版本控制,pipeline job更具有优势。


Jenkins Maven集成

  • jenkins server安装maven:
# cd /software

# wget https://www-eu.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz

# tar zxf apache-maven-3.6.2-bin.tar.gz

# mv apache-maven-3.6.2 /usr/local/maven

# echo 'PATH=$PATH:/usr/local/maven/bin' >> /etc/profile

# source /etc/profile

# mvn --version

Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_222, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.1.1.el7.x86_64", arch: "amd64", family: "unix"
  • jenkins配置JAVA_HOMEMAVEN_HOME

系统管理全局工具配置新增JDK,填入内容

在这里插入图片描述

接着新增Maven,填入内容

在这里插入图片描述

点击应用,再点击保存

后续在打包时,构建这一步选择调用顶层 Maven 目标,版本选择maven3.6.2,目标填入package即可。


Jenkins Ansible集成

  • 编辑ansible主机清单:
# su - deploy

$ vim testservers

[testserver]
test.lzxlinux.com ansible_user=root
  • 配置ansible-freestyle-job:

点击新建任务,任务名称输入test-freestyle-job,选择自由风格的软件项目

添加描述信息:This is my first ansible job,接着构建增加构建步骤执行 shell,写入下面内容

#!/bin/bash

set +x              #关闭命令行扩展环境功能

source /home/deploy/.py3-a2.8-env/bin/
source /home/deploy/.py3-a2.8-env/ansible/hacking/env-setup -q

cd /home/deploy
ansible --version

ansible-playbook --version
cat testservers
ansible -i testservers testserver -m command -a "ip addr"

set -x

在这里插入图片描述

点击应用,再点击保存

  • 构建ansible-freestyle-job:

点击立即构建,查看控制台输出

在这里插入图片描述

可以看到,shell脚本中执行的命令在控制台中输出。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值