前言
本章节基于gitlab+docker+harbor+jenkins部署go项目,大致流程参考以下图片
未安装上述环境的可参考本人历史文章
开始集成
前提条件
1.在jenkinsfile中使用docker命令
启动jenkins容器时,需要把docker挂载进jenkins里
docker run -itd
--name jenkins
-e TZ=Asia/Shanghai
-u root
--restart=always
-p 8989:8080 -p 50000:50000
-v /home/jenkins:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
--env JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxNewSize=256m"
jenkins/jenkins:latest
在插件管理中安装Docker Pipeline
配置Harbor仓库登录凭据,ID请记住,后续会用到
配置jenkins全局变量,我这里配了Harbor镜像仓库相关的
在jenkinsfile中使用docker命令
1.通过shell命令使用
2.通过Docker Pipeline插件使用
默认情况下,Docker Pipeline 集成使用 Docker Hub 的默认 Docker Registry。
要使用自定义 Docker Registry,脚本式 Pipeline 的用户可以使用 withRegistry() 方法包裹每个步骤,并传入指定的 Registry 的 URL
对于需要身份验证的Docker注册表,请从Jenkins主页添加“用户名/密码”凭据项,并将凭据ID作为第二个参数使用withRegistry()
1.在jenkinsfile中使用go(本章未使用,可做了解)
进入插件管理
安装go插件
集成go
简易版jenkinsfile文件
pipeline {
agent any
// tools {
// go 'golang'
// }
//定义全局环境变量
environment{
HARBOR_SUBJECT='bbcl-fms' //指定要发布到harbor的仓库地址
HARBOR_NETWORK='http://' //指定harbor协议
}
stages {
stage("git codes") {
steps {
sh '''
echo '切换工作目录'
cd $WORKSPACE
echo '设置环境'
export GOPROXY=https://goproxy.cn,direct
'''
sh '''
echo '检出指定分支'
git checkout $FMS_BRANCH
echo '拉取代码'
git lfs pull
'''
echo '拉去代码结束'
}
}
stage("build and publish docker image") {
steps {
sh 'cd $WORKSPACE'
buildImage('financial-api',BUILD_ID)
// sh '''
// echo '登录docker'
// docker login ${HARBOR_URL} -u ${HARBOR_USER} -p ${HARBOR_PASSWORD}
// echo '构建镜像'
// docker build -t ${HARBOR_URL}/${HARBOR_SUBJECT}/bbcl-fms-financial-api:v3 -f ./app/financial-api/Dockerfile .
// echo '推送镜像到仓库'
// docker push ${HARBOR_URL}/${HARBOR_SUBJECT}/bbcl-fms-financial-api:v3
// '''
}
}
stage("3.构建") {
steps {
echo '开始构建'
echo '构建成功'
}
}
stage("4.部署") {
steps {
echo '开始传包'
echo '传包成功'
echo '开始部署'
echo '部署成功'
}
}
}
post {
success {
echo '执行成功 successful'
}
failure {
echo '执行失败 failed'
}
}
}
def buildImage(objectName, version) {
def customImage = docker.build(HARBOR_URL+'/'+HARBOR_SUBJECT+'/'+objectName+':'+version,"-f $WORKSPACE/app/"+objectName + "/Dockerfile .")
docker.withRegistry(HARBOR_NETWORK+HARBOR_URL, 'dockerlogin') {
customImage.push()
}
docker.image(HARBOR_URL+'/'+HARBOR_SUBJECT+'/'+objectName+':'+version).run('-itd -p 8302:8302')
}