社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在golang jenkins devops (一)中我们已经将image push 到了docker hub 这一章我们将彻底实现自动化:
第一步 代码push 自动发布:
下载码云插件:
添加Gitee配置:
密钥设置地址根据不通的git 仓库进行设置:
在具体的流水线内设置:
码云具体的代码库设置:
修改流水线脚本测试一下:
pipeline {
agent any
stages {
stage('Clone'){
steps{
echo 'clone code'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bd614304-0e04-4c10-b579-584cd93fcec3', url: 'git@gitee.com:golangxiaoyu/jenkinsgolang.git']]])
}
}
stage('Build') {
steps {
echo 'build'
sh 'docker build -t golangdocker:"${version}" .'
}
}
stage('Push') {
steps {
echo 'push'
sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
sh 'docker tag golangdocker:"${version}" registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'
sh 'docker push registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'
sh 'docker rmi golangdocker:"${version}"'
sh 'docker rmi registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'
}
}
stage('Deploy') {
steps {
echo 'deploy'
}
}
}
}
这里还要新修改一下参数化构建的版本号:
下面推送一下代码:
查看一下git
查看一下jenkins 已经开始构建了:
查看一下 docker hub这里无法验证 docker images了因为在push后直接将构建的image删除掉了:
我们run一下看看是否修改成功了:
到这里基本上整个流程已经通了,剩下的就是自动发布以及解决版本号的问题:
这里我添加了一个 Version文件每次发布需要指定版本号:
之后修改流水线脚本:
pipeline {
agent any
stages {
stage('Clone'){
steps{
echo 'clone code'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bd614304-0e04-4c10-b579-584cd93fcec3', url: 'git@gitee.com:golangxiaoyu/jenkinsgolang.git']]])
script {
env.VERSION = readFile 'Version'
}
}
}
stage('Build') {
steps {
echo 'build'
sh 'docker build -t golangdocker:'+"${env.VERSION}"+' .'
}
}
stage('Push') {
steps {
echo 'push'
sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
sh 'docker tag golangdocker:'+"${env.VERSION}"+' registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
sh 'docker push registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
sh 'docker rmi golangdocker:'+"${env.VERSION}"
sh 'docker rmi registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
}
}
stage('Deploy') {
steps {
sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
sh 'docker pull registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
sh 'docker stop dockerdemo'
sh 'docker rm dockerdemo'
sh 'docker run --name dockerdemo -p 8888:8080 -d registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
}
}
}
}
使用文件中的版本而不是jenkins提供的参数化构建。因为我的公网机器只有一台 没办法演示 在另一台机器上部署的过程了。。。
这块的发布其实可以用docker-compose up -d或者 kubectl apply -f ***.yaml 。
修改main.go文件
package main
import (
"dockerdemo/Init"
"fmt"
"github.com/jinzhu/configor"
"io/ioutil"
"net/http"
)
func main() {
Init.Init(configor.Config{})
http.HandleFunc("/", handlerHello)
http.ListenAndServe(":8080", nil)
}
//Test
func handlerHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello My Version Is: "+GetVersion())
}
func GetVersion() string {
f, err := ioutil.ReadFile("Version")
if err != nil {
fmt.Println("read fail", err)
}
return string(f)
}
推送代码:
构建成功:
查看发布状态:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!