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

参考

相关推荐
RisunJan21 分钟前
Linux命令-scriptreplay(终端会话回放)
linux·运维·chrome
x²+(y-√³x²)²=12 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
世人万千丶2 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
未来之窗软件服务2 小时前
企业自动化运营-电子合同预览-东方仙盟
运维·自动化·仙盟创梦ide·东方仙盟
Android系统攻城狮2 小时前
Linux PipeWire深度解析之pw_properties_iterate调用流程与实战(六十五)
linux·运维·服务器·音频进阶·pipewire音频进阶
研华科技Advantech3 小时前
案例 | 从离线巡检到在线看护:研华PHM解决方案赋能石油钻井平台智能运维
运维·人工智能·边缘计算
難釋懷3 小时前
Nginx主动健康检查
运维·nginx
ITyunwei09873 小时前
内存溢出报错,实战处理记录
运维·服务器·企业微信
Elastic 中国社区官方博客3 小时前
你的 AI agent 不需要你的 API 密钥:使用 OAuth 2.1 对 Elasticsearch MCP 服务器进行身份验证
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
FreeTinker3 小时前
AP AC组网中的远程运维挑战及内网穿透技术应用分析
运维