jenkins结合gitlab、docker容器化部署go项目

433 阅读1分钟

准备两台服务器

  • 一台gitlab服务器,用于提交代码,同时对外提供服务,
  • 一台jenkins服务器,用于构建,打包,

项目目录结构

image.png

image.png

image.png

生成jenkins服务器的公钥和私钥,然后将公钥拷贝到gitlab中,用于拉取代码操作

生成密钥
ssh-keygen -t rsa
拷贝公钥到gitlab
cat /root/.ssh/id_rsa.pub

image.png

服务端Dockerfile文件内容

FROM centos
EXPOSE 7654

ADD /root/go_build/* /root/go_build/app
ENTRYPOINT ["/root/go_build/app"]

Jenkinsfile文件内容

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', url: 'ssh://git@10.198.6.6/root/newtestproject.git'
                echo '拉取代码成功'
            }
        }
        stage('执行构建') {
            steps {
                sh "/usr/local/go/bin/go build -o app"
                echo '构建完成'
            }
        }

        stage('发送软件到测试服务器') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'qingcloud', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/root/go_build', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'app'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '发送软件到测试服务器'
            }
        }
        stage('运行命令') {
            steps {
                script {
                    def remote = [:]
                    remote.name = 'qingcloud' //服务器名字,提前配置好的
                    remote.host = '10.199.6.6' // 远程ip,待部署的服务器ip
                    remote.port = 22
                    remote.allowAnyHosts = true
                    withCredentials([usernamePassword(credentialsId: 'qingcloud', passwordVariable: 'qingcloudPassword', usernameVariable: 'root')]) {
                        remote.user = "${root}"
                        remote.password = "${qingcloudPassword}"

                    }
                    writeFile file: 'abc.sh', text: 'docker stop demo;docker container rm demo;docker rmi demo;chmod +x /root/go_build/app;cd /;docker build -t demo .;docker run --name demo -d -p 7654:7654 demo'
                    sshScript remote: remote, script: 'abc.sh'
                }
            }
        }
    }
}

jenkins新建一个流水线任务

image.png

设置jenkins触发器

image.png 填写到项目的webhook里面,用于有推送请求构建代码 image.png 同时在jenkins中生成token也要拷贝到gitlab中

image.png

image.png

image.png

接下来生成jenkins流水线,可以利用插件来生成

image.png

image.png

image.png

image.png

image.png

image.png

点击保存

构建

image.png