##初探在容器上构建持续部署( 四 )


sh ''''''
docker login -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_PASSWORD}
docker build -f ${WORKSPACE}${dockerDirectory} -t ${imageName} .
docker push ${imageName}
''''''
}
}
}
如果你想了解Jenkins命令详情 , 请参阅Set Up a Jenkins CI/CD Pipeline with Kubernetes
https://akomljen.com/set-up-a-jenkins-ci-cd-pipeline-with-kubernetes/
我们这里并没有重新生成Go程序的镜像文件 , 而是复用了以前就有的k8s创建Go程序的镜像文件 , Go程序的镜像文件路径是“scriptkubernetesbackenddockerDockerfile-k8sdemo-backend” 。
它的代码如下 。 后面还会讲到这样做的好处 。
# vagrant@ubuntu-xenial:~/app/k8sdemo/script/kubernetes/backend$
# docker build -t k8sdemo-backend .
FROM golang:latest as builder
# Set the Current Working Directory inside the container
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
WORKDIR /app/cmd
# Build the Go app
#RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main.exe
RUN go build -o main.exe
######## Start a new stage from scratch #######
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
# Copy the Pre-built binary file from the previous stage
COPY --from=builder /app/cmd/main.exe .
# Command to run the executable
# CMD exec /bin/bash -c ''trap : TERM INT; sleep infinity & wait''
CMD
关于Go镜像文件详情 , 请参阅创建优化的Go镜像文件以及踩过的坑
https://blog.csdn.net/weixin_38748858/article/details/102714799
部署镜像:
下面部署Go程序到k8s上 , 这里也没有用kubectl插件 , 而是直接用kubectl命令调用已经存在的k8s的部署和服务配置文件(文件里会引用生成的Go镜像) , 它的好处后面也会讲到 。
stage('Deploy') {
container('modified-jenkins') {
sh ''kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-deployment.yaml''
sh ''kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-service.yaml''
}
}
关于k8s的部署和服务配置文件详情 , 请参阅把应用程序迁移到k8s需要修改什么?
https://blog.csdn.net/weixin_38748858/article/details/102758381

  • 为什么没用Declarative?
用脚本来写Pipeline有两种方法 , “Scripted Pipleline”和“Declarative Pipleline” , 这里用的是第一种方法 。 “Declarative Pipleline”是新的方法 , 之所以没用它 , 是因为开始用的是Declarative模式但没调出来 , 然后就改用“Scripted Pipleline” , 结果成功了 。 后来才发现设置Declarative的方法 , 特别是如何挂载卷 , 但看了一下 , 比起“Scripted Pipleline”要复杂不少 , 就偷了一下懒 , 没有再改 。
如果你想知道怎样在Declarative模式下设置挂载卷 , 请参阅Jenkins Pipeline Kubernetes Agent shared Volumes
https://devops.stackexchange.com/questions/4695/jenkins-pipeline-kubernetes-agent-shared-volumes
  • 自动执行项目:
现在的Jenkins中的项目需要手动启动 , 如果你需要自动启动项目的话就要创建webhook , GitHub和dockerhub都支持webhook , 在它们的页面上都有设置选项 。 “webhook”是一个反向调用的URL , 每当有新的代码或镜像提交时 , GitHub和dockerhub都会调用这个URL , URL被设置成Jenkins的项目地址 , 这样相关的项目就会自动启动 。