准备两台服务器
- 一台gitlab服务器,用于提交代码,同时对外提供服务,
- 一台jenkins服务器,用于构建,打包,
项目目录结构
生成jenkins服务器的公钥和私钥,然后将公钥拷贝到gitlab中,用于拉取代码操作
生成密钥
ssh-keygen -t rsa
拷贝公钥到gitlab
cat /root/.ssh/id_rsa.pub
服务端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新建一个流水线任务
设置jenkins触发器
填写到项目的webhook里面,用于有推送请求构建代码
同时在jenkins中生成token也要拷贝到gitlab中
接下来生成jenkins流水线,可以利用插件来生成