gitlab+jenkins

文章目录

架构

gitlab和jenkins安装

部署docker

部署jenkins

启动jenkins

用户:admin,对应的密码如下

点击安装自定义推荐的插件

安装gitlab插件

jenkins配置


配置pipline脚本

bash 复制代码
/* ==========================================================
   Jenkinsfile -- 一键部署 cyberpunk-games 静态站点
   功能:安装/更新 Nginx → 部署站点配置 → 克隆/更新 Git 仓库 → 重载 Nginx
   ========================================================== */

pipeline {
    /* 任意可用的 Jenkins agent */
    agent any

    /* ------------------------------------------------------
       定义全局环境变量,后续所有 stage 均可直接使用
       ------------------------------------------------------ */
    environment {
        // Git 仓库地址(根据实际修改)
        GIT_REPO_URL      = 'http://10.99.1.104:180/root/website'
        // 代码拉取到本地的目录
        GIT_CLONE_DIR     = '/var/www/cyberpunk-games'
        // 目标部署服务器(根据实际修改)
        SSH_HOST          = '127.0.0.1'
        // 凭据 ID(在 Jenkins 凭据库中已配置的用户名/密码)
        CRED_ID           = '52db79b8-af8d-4102-96aa-ba9aa4295801'
    }

    /* ------------------------------------------------------
       Pipeline 各阶段
       ------------------------------------------------------ */
    stages {

        /* --------------------------------------------------
           Stage 1:安装 Nginx(仅需一次即可)
           -------------------------------------------------- */
        stage('Install Nginx') {
            steps {
                script {
                    // 使用 Jenkins 凭据,将用户名、密码注入环境变量
                    withCredentials([
                        usernamePassword(
                            credentialsId: "${CRED_ID}",
                            usernameVariable: 'SSH_USER',
                            passwordVariable: 'SSH_PASSWORD')
                    ]) {
                        sh """
                            # 通过 sshpass 免交互安装
                            sshpass -p '${SSH_PASSWORD}' \
                            ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} \
                            'sudo dnf install -y nginx'
                        """
                    }
                }
            }
        }

        /* --------------------------------------------------
           Stage 2:生成并部署 Nginx 站点配置
           -------------------------------------------------- */
        stage('Deploy Nginx Configuration') {
            steps {
                script {
                    // 1. 定义 Nginx 虚拟主机配置
                    def nginxConfig = """
server {
    listen       80;
    server_name  yourdomain.com;   // TODO: 改成真实域名或 IP

    root  /var/www/cyberpunk-games;
    index index.html;

    location / {
        try_files \\$uri \\$uri/ =404;
    }

    # 可选:启用 gzip 压缩
    gzip              on;
    gzip_types        text/plain application/javascript text/css application/xml text/xml;
    gzip_min_length   1000;
}
"""
                    // 2. 将配置写到临时文件
                    writeFile file: '/tmp/cyberpunk-games.conf', text: nginxConfig

                    // 3. 拷贝到目标服务器
                    withCredentials([
                        usernamePassword(
                            credentialsId: "${CRED_ID}",
                            usernameVariable: 'SSH_USER',
                            passwordVariable: 'SSH_PASSWORD')
                    ]) {
                        sh """
                            sshpass -p '${SSH_PASSWORD}' \
                            scp /tmp/cyberpunk-games.conf \
                            ${SSH_USER}@${SSH_HOST}:/etc/nginx/conf.d/cyberpunk-games.conf
                        """
                    }
                }
            }
        }

        /* --------------------------------------------------
           Stage 3:克隆或更新 Git 仓库
           -------------------------------------------------- */
        stage('Clone or Update Git Repository') {
            steps {
                script {
                    withCredentials([
                        usernamePassword(
                            credentialsId: "${CRED_ID}",
                            usernameVariable: 'SSH_USER',
                            passwordVariable: 'SSH_PASSWORD')
                    ]) {
                        sh """
                            sshpass -p '${SSH_PASSWORD}' \
                            ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} \
                            'if [ ! -d "${GIT_CLONE_DIR}/.git" ]; then \
                                 git clone ${GIT_REPO_URL} ${GIT_CLONE_DIR}; \
                             else \
                                 cd ${GIT_CLONE_DIR} && git pull origin main; \
                             fi'
                        """
                    }
                }
            }
        }

        /* --------------------------------------------------
           Stage 4:重载 Nginx 使配置生效
           -------------------------------------------------- */
        stage('Restart Nginx') {
            steps {
                script {
                    withCredentials([
                        usernamePassword(
                            credentialsId: "${CRED_ID}",
                            usernameVariable: 'SSH_USER',
                            passwordVariable: 'SSH_PASSWORD')
                    ]) {
                        sh """
                            sshpass -p '${SSH_PASSWORD}' \
                            ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} \
                            'sudo systemctl reload nginx'
                        """
                    }
                }
            }
        }
    }

    /* ------------------------------------------------------
       构建后操作(可选)
       ------------------------------------------------------ */
    post {
        always {
            echo 'Pipeline 执行结束'
        }
        success {
            echo '所有阶段执行成功!'
        }
        failure {
            echo '有阶段失败,请检查日志'
        }
    }
}

创建凭据

进入到已经创建的任务中

修改里面的pipline 脚本中的credential id

gitlab配置

创建webs仓库


clone代码

提交代码

jenkins与gitlab联动

打开gitlab,配置webhook

打开jenkins,修改pipeline脚本

手动构建测试

gitlab修改触发

gitlab手动触发jenkins

参考

相关推荐
小哈里16 分钟前
【管理】持续交付2.0:业务引领的DevOps-精要增订本,读书笔记(理论模型,技术架构,业务价值)
运维·架构·devops·管理·交付
沙老师1 小时前
删除debian xdm自启动ibus的配置项
运维·服务器·debian
老马啸西风1 小时前
windows wsl ubuntu 如何安装 maven
linux·运维·windows·ubuntu·docker·k8s·maven
东木君_2 小时前
【Linux驱动-快速回顾】简单了解一下PinCtrl子系统:设备树如何被接解析与匹配
linux·运维·服务器
niewzh3 小时前
最新版vscode 连接ubuntu 18.04 保姆级教程
linux·运维·ubuntu
cpsvps3 小时前
美国VPS服务器Linux内核参数调优的实践与验证
linux·运维·服务器
石小千3 小时前
配置华为交换机接口链路聚合-支持服务器多网卡Bind
运维·网络·华为
Antonio9153 小时前
【Linux】mmap的介绍和使用
linux·运维·服务器
小熊h3 小时前
Linux练习二
linux·运维·服务器
寻道模式3 小时前
【运维心得】老旧系统迁移到虚拟机的另类解决
运维