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

参考

相关推荐
网硕互联的小客服6 分钟前
408 Request Timeout:请求超时,服务器等待客户端发送请求的时间过长。
运维·服务器
王伯安呢9 分钟前
告别线缆束缚!AirDroid Cast 多端投屏,让分享更自由
运维·服务器·教程·投屏·airdroid cast·多端互投
逍遥浪子~13 分钟前
搭建本地gitea服务器
运维·服务器·gitea
喜欢你,还有大家20 分钟前
FTP文件传输服务
linux·运维·服务器·前端
Bi35 分钟前
Dokploy安装和部署项目流程
运维·前端
霍格沃兹软件测试开发1 小时前
AI 测试平台新功能揭秘:自动化测试用例运行的奥秘
运维·自动化·测试用例
小阳睡不醒2 小时前
小白成长之路-jenkins使用pipline部署
运维·jenkins
fasewer2 小时前
玄机--windows日志分析
运维·服务器·windows·网络安全
Linux运维技术栈2 小时前
域名网页加载慢怎么解决:从测速到优化的全链路性能优化实战
运维·网络·nginx·性能优化·cloudflare
linux修理工4 小时前
n1 Armbian OS 24.11.0 noble 安装suricata
linux·运维·服务器