Jenkins参数化构建

目录

[一. 准备ansible](#一. 准备ansible)

[二. Gitlab新建子项目](#二. Gitlab新建子项目)

[三. Jenkins建立任务,进行初步配置](#三. Jenkins建立任务,进行初步配置)

[四. 导入nginx主机的公钥](#四. 导入nginx主机的公钥)

[五. 配置ansible执行脚本](#五. 配置ansible执行脚本)

[六. 构建测试](#六. 构建测试)


一. 准备ansible

在jenkins主机中安装ansible

bash 复制代码
[root@jenkins ~]# yum install -y epel-release
[root@jenkins ~]# yum install -y ansible

查看配置文件

bash 复制代码
[root@jenkins ~]# cat /etc/ansible/ansible.cfg
# Since Ansible 2.12 (core):
# To generate an example config file (a "disabled" one with all default settings, commented out):
#               $ ansible-config init --disabled > ansible.cfg
#
# Also you can now have a more complete file by including existing plugins:
# ansible-config init --disabled -t all > ansible.cfg

# For previous versions of Ansible you can check for examples in the 'stable' branches of each version
# Note that this file was always incomplete  and lagging changes to configuration settings

# for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg

初次进入需要自己选择两个命令其中一个执行,然后生成配置命令,后者比前者多一些插件相关的配置选项。

ansible-config init --disabled > ansible.cfg

ansible-config init --disabled -t all > ansible.cfg

bash 复制代码
[root@jenkins ~]# cd /etc/ansible/
[root@jenkins ansible]# ansible-config init --disabled -t all > ansible.cfg
bash 复制代码
[root@jenkins ansible]# vim /etc/ansible/ansible.cfg +318

host_key_checking=Flase    #将这个参数配置打开

配置主机清单

本机jenkins为192.168.226.22 主机清单配置另一台用于nginx上线项目的主机192.168.226.21

bash 复制代码
[root@jenkins ansible]# vim /etc/ansible/hosts
[nginx]
192.168.226.21 ansible_user=root ansible_password=lzz2578+

[tomcat]

验证连通性

bash 复制代码
[root@jenkins ansible]# ansible all -m ping
192.168.226.21 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

在192.168.226.21主机中下载nginx并启动

bash 复制代码
[root@nginx ~]# yum install -y nginx && systemctl enable --now nginx

二. Gitlab新建子项目

gitlab仓库主机为192.168.226.20

建立一个index.html代码文件用于测试

输入代码提交

bash 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试小标题</title>
</head>
<body>
    <h1>第是第一个小标题</h1>

</body>
</html>

三. Jenkins建立任务,进行初步配置

图中设置中构建步骤的代码如下:

bash 复制代码
 echo "=========="
sh /opt/ansible.sh $service $status $gitlab_code $code_id
 echo "==========="
 echo "代码上线完成"

四. 导入nginx主机的公钥

bash 复制代码
# 生成密钥对
[root@nginx ~]# ssh-keygen

# 复制查看到的公钥
[root@nginx ~]# cat .ssh/id_rsa.pub

bash 复制代码
[root@nginx nginx]# cd /usr/share/nginx
# 备份原目录
[root@nginx nginx]# mv html html.break

克隆代码仓库

bash 复制代码
[root@jenkins nginx]# git clone git@192.168.226.20:ugo_team/ceshi-paramter.git
# 给改目录改名
[root@nginx nginx]# mv ceshi-paramter html

五. 配置ansible执行脚本

bash 复制代码
[root@jenkins nginx]# cd /opt
[root@jenkins opt]# vim ansible.sh
#!/bin/bash

# 接收 Jenkins 传递的参数
SERVICE_NAME="$1"
SERVICE_STATUS="$2"
GITLAB_CODE="$3"
CODE_ID="$4"

# Ansible 主机清单路径
HOST="/etc/ansible/hosts"

# Ansible 命令基础部分
CMD="/usr/bin/ansible -i $HOST"

# 检查服务名称是否为 nginx,并根据传递的 GITLAB_CODE 参数执行不同的操作
if [ "$SERVICE_NAME" = "nginx" ]; then
    if [ "$GITLAB_CODE" = "pull" ]; then
        echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git pull origin main'"
        $CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git pull origin main"
    elif [ "$GITLAB_CODE" = "reset1" ]; then
        echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^'"
        $CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^"
    elif [ "$GITLAB_CODE" = "reset2" ]; then
        echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^^'"
        $CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^^"
    elif [ "$GITLAB_CODE" = "code_id" ]; then
        echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard $CODE_ID'"
        $CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard $CODE_ID"
    else
        echo "Unknown GITLAB_CODE: $GITLAB_CODE"
        exit 1
    fi

    # 根据传递的 SERVICE_STATUS 参数执行 systemctl 操作
    if [ "$SERVICE_STATUS" != "none" ]; then
        echo "Executing: $CMD $SERVICE_NAME -m service -a 'name=$SERVICE_NAME state=$SERVICE_STATUS'"
        $CMD $SERVICE_NAME -m service -a "name=$SERVICE_NAME state=$SERVICE_STATUS"
    fi
else
    echo "Unsupported SERVICE_NAME: $SERVICE_NAME"
    exit 1
fi

加上执行权限

bash 复制代码
[root@jenkins opt]# chmod +x ansible.sh

六. 构建测试

点击构建

选择对应的参数

看构建成功

访问nginx主机的网页例如我这里访问:http://192.168.226.21/

代码仓库修改代码测试

再次构建

如此再重复进行一次修改并构建

进行版本回退测试,回退上两个版本

回退到指定版本

到代码仓库查提交记录

这次选择刚最新提交的,也是有三个标题的那个版本,复制其对应的字符

点击构建,选择对应的参数

如此就完成了简易实验。