DevOps
本文以部署一个 vuepress 为例
# 前期准备
- Git 仓库(本文使用 Gitee)
- Docker 镜像仓库(本文使用腾讯云)
# 示例
# 拉取代码
略
拉取代码经常失败
即便是使用国内的 gitee 拉取代码仍然经常失败。
devops 拉取 github,gitee,gitlab 均会失败 - KubeSphere 开发者社区 (opens new window)
上面的帖子有说 coredns有两个副本,我关调一个后再重启就好了
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 构建项目
npm run build
此处不能使用vuepress build docs
vuepress 需要全局安装才可以运行此命令,上面的操作并没有全局安装。
# 构建镜像并推送
参考官方示例文档,直接复制对应 Jenkinsfile 代码过,再修改。
# 部署镜像
- 部署镜像前,需要在
项目-凭证-保密字典
,创建一个镜像服务信息
字典。 - 部署镜像时,需要用到一个 yaml 文件,可以先省略部署镜像这一步,手动在 KubeSphere 部署一遍,然后得到 yaml 文件,再复制到项目中使用。
# 参考 Jenkinsfile
pipeline {
agent {
kubernetes {
inheritFrom 'nodejs base'
containerTemplate {
name 'nodejs'
// 指定node版本,使用默认node版本过低会导致编译失败
image 'node:14.19.0'
}
}
}
stages {
stage('拉取代码') {
agent none
steps {
git(url: 'https://gitee.com/nipgeihou/项目名.git', credentialsId: 'gitee-nipgeihou', branch: 'master', changelog: true, poll: false)
}
}
stage('安装依赖') {
agent none
steps {
container('nodejs') {
sh 'npm install --registry=https://registry.npmmirror.com'
}
}
}
stage('构建项目') {
agent none
steps {
container('nodejs') {
sh 'npm run build'
}
}
}
stage ('推送镜像') {
steps {
container ('base') {
sh 'docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER .'
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER'
}
}
}
}
stage('部署容器') {
steps {
container ('base') {
withCredentials([
kubeconfigFile(
credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
variable: 'KUBECONFIG')
]) {
sh 'envsubst < deploy/deploy.yaml | kubectl apply -f -'
}
}
}
}
}
// docker pull ccr.ccs.tencentyun.com/nipgeihou/blog:[tag]
environment {
// 凭证名称,可视化界面显示空是正常的,因为是通过环境变量传递的
DOCKER_CREDENTIAL_ID = 'txyun-docker-registry'
// 面板-DevOps 项目-凭证-kubeconfig,会自动填充内容字段,设置名称即可
KUBECONFIG_CREDENTIAL_ID = 'kubeconfig'
REGISTRY = 'ccr.ccs.tencentyun.com'
// 命名空间
DOCKERHUB_NAMESPACE = 'nipgeihou'
APP_NAME = 'blog'
BRANCH_NAME = 'dev'
PROJECT_NAME = 'kubesphere-sample-dev'
}
}
# 参考资料
上次更新: 2022/10/29, 02:21:46
← 路由应用(反向代理) 概念→