Jenkins Docker Pipeline Clone Build Deploy mysqldump

本文首发在这里

先决条件

  • 装好 Docker 的 Ubuntu
  • 钉钉机器人 Webhook
bash 复制代码
curl -H 'Content-Type:application/json' -d '{"msgtype":"text","text":{"content":"hello world"}}' 'https://oapi.dingtalk.com/robot/send?access_token=secret'

安装 Jenkins

以下命令基本来自官方,列出仅做参考

bash 复制代码
sudo docker network create jenkins
mkdir -p docker/jenkins/certs docker/jenkins/data
sudo docker run --name jenkins-docker --rm --detach --privileged --network jenkins --network-alias docker --env DOCKER_TLS_CERTDIR=/certs --volume ~/docker/jenkins/certs:/certs/client --volume ~/docker/jenkins/data:/var/jenkins_home --publish 2376:2376 docker:dind --storage-driver overlay2
vi docker/jenkins/Dockerfile # 请从官方文档复制需要粘贴进去的内容
cd docker/jenkins && sudo docker build -t myjenkins-blueocean:2.426.1-1 .
sudo docker run --name jenkins-blueocean --restart=on-failure --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --publish 8080:8080 --publish 50000:50000 --volume ~/docker/jenkins/data:/var/jenkins_home --volume ~/docker/jenkins/certs:/certs/client:ro myjenkins-blueocean:2.426.1-1
sudo docker exec -it jenkins-blueocean bash
sudo docker logs jenkins-blueocean

安装后设置向导请遵循官方

配置 Jenkins

  • 下载插件 SSH Agent、DingTalk
  • 添加凭据 系统管理 -> 凭据管理 -> 全局 -> 添加凭据 -> 范围选择全局
  1. Username with password
  2. SSH Username with private key
bash 复制代码
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.1.188
cat ~/.ssh/id_rsa # 私钥
  • 添加钉钉机器人 id、名称、webhook

新建流水线

建议勾选丢弃旧的构建

Clone Build Deploy
groovy 复制代码
pipeline {
    agent {
        docker {
            image 'golang:1.21.4-bookworm'
            args  '-u 0:0'
        }
    }
    parameters {
        choice(name: 'IP', choices: ['188'], description: 'pick one')
    }
    stages {
        stage('start') {
            steps {
                dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins ${IP} start'])
            }
        }
        stage('clone') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'git', usernameVariable: 'username', passwordVariable: 'password')]) {
                    sh '''
                    rm -rf framework
                    git clone https://$username:$password@github.com/panshiqu/framework.git
                    '''
                }
            }
            post {
                failure {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins ${IP} clone failure'])
                }
            }
        }
        stage('build') {
            steps {
                sh '''
                echo choice: ${IP}
                cd framework
                pwd
                go version
                go env -w GOPROXY=https://goproxy.cn,direct
                go env -w GOCACHE=/tmp/.cache/go-build
                go env -w GOFLAGS=-buildvcs=false
                go mod tidy
                go build -o db_server db.go
                go build -o manager_server manager.go
                go build -o proxy_server proxy.go
                go build -o login_server login.go
                go build -o game_server game.go
                '''
            }
            post {
                failure {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins ${IP} build failure'])
                }
            }
        }
        stage('deploy') {
            steps {
                sshagent(credentials: ["${IP}"]) {
                    sh '''
                    ssh -o StrictHostKeyChecking=no -l ubuntu 192.168.1.${IP} uname -a
                    cd framework && scp *_server ubuntu@192.168.1.${IP}:~/server/update
                    '''
                }
            }
            post {
                failure {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins ${IP} deploy failure'])
                }
                success {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins ${IP} clone && build && deploy success'])
                }
            }
        }
    }
}
mysqldump
groovy 复制代码
pipeline {
    agent {
        docker {
            image 'mysql:5.7.44'
        }
    }
    parameters {
        string(name: 'fromIP', defaultValue: '192.168.1.177', description: 'ip')
        string(name: 'fromPWD', defaultValue: '123456', description: 'pwd')
        string(name: 'toIP', defaultValue: '192.168.1.188', description: 'ip')
        string(name: 'toPWD', defaultValue: '123456', description: 'pwd')
    }
    stages {
        stage('start') {
            steps {
                dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins mysqldump ${fromIP}->${toIP} start'])
            }
        }
        stage('dump') {
            steps {
                sh '''
                mysqldump -h${fromIP} -uroot -p${fromPWD} --events --routines --add-drop-database --databases game log > dump.sql
                mysql -h${toIP} -uroot -p${toPWD} < dump.sql
                rm -f dump.sql
                '''
            }
            post {
                failure {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins mysqldump ${fromIP}->${toIP} failure'])
                }
                success {
                    dingtalk(robot: 'bot', type: 'TEXT', text: ['jenkins mysqldump ${fromIP}->${toIP} success'])
                }
            }
        }
    }
}

远程构建

  • 流水线配置勾选触发远程构建,身份验证令牌填入abc
  • 全局安全配置勾选匿名用户具有可读权限
bash 复制代码
curl 'http://192.168.1.188:8080/job/framework/buildWithParameters?IP=188&token=abc'
curl 'http://192.168.1.188:8080/job/mysqlgame/buildWithParameters?fromIP=192.168.1.177&fromPWD=123456&toIP=192.168.1.188&toPWD=123456&token=abc'
相关推荐
木卫二号Coding12 小时前
Docker-构建自己的Web-Linux系统-镜像kasmweb/ubuntu-jammy-desktop
linux·ubuntu·docker
加油vekiki12 小时前
linux服务器搭建docker、docker-compose
linux·服务器·docker·容器
JavaLearnerZGQ12 小时前
Docker安装ElasticSearch8.13.0、Kibana、中文分词器,版本
docker·中文分词·jenkins
亿牛云爬虫专家12 小时前
采集架构的三次升级:脚本、Docker 与 Kubernetes
爬虫·docker·架构·kubernetes·脚本·代理ip·采集
qq_2739002312 小时前
Docker 与 Singularity 镜像实战指南
运维·docker·容器
JNU freshman13 小时前
使用 cephadm + Docker 镜像在三台服务器上部署 Ceph 集群(含网络规划与 OSD DB/WAL 分离)
服务器·ceph·docker
为什么要做囚徒13 小时前
Docker实战系列之Root目录迁移指南:单机环境下的完整实践
运维·docker·容器
南梦浅13 小时前
[特殊字符]️ Docker 镜像加速器完整配置流程下面是在 CentOS 7 系统上配置 Docker 镜像加速器的完整步骤
linux·docker·centos
weixin_4624462314 小时前
使用 Docker / Docker Compose 部署 PdfDing —— 个人 PDF笔记
笔记·docker·pdf
2301_7679026414 小时前
第 4 章 docker容器
运维·docker·容器