KubeSphere 使用Jenkines做DevOps代码管理工具。该功能以组件的形式开启和关闭。KS安装后在'定制资源定义' (CRD)开启
该教程目前实现的功能包含:代码提交后自动打包,打包后推送镜像至harbor仓库并自动部署至k8s环境
创建 DevOps 项目:企业空间—>DevOps 项目—>创建;填入项目名称,点击确定即可
输入流水线名称点下一步,点击添加构建参数。
输入名称BRANCH_NAME和对应的版本号(后续Jenkinsfile将根据此参数拉取对应分支代码和打包)
可以根据模板创建流水线,这里以CI模板为例,点下一步创建。
修改为自己实际使用的,具体使用可参考:使用图形编辑面板创建流水线
创建后,每次提交代码需手动点击运行。点击运行后,将根据流水线步骤进行自动执行。
这里使用私有gitlab仓库为例:
点击选择代码仓库,使用私有gitlab的话,选择git,填写git工程中的路径,凭证为gitlab的账号密码
点击下一步,开启定时扫描,选择定时时间。
定时时间选择后将按此时间进行git检查,检查所有分支时候有变动,如果有变动将会根据该分支下的Jenkinsfile进行自动打包
与2.2类似,创建流水线时选择代码仓库,此时不需要开启扫描触发器和构建触发器,复制webhook地址
进入gitlab,配置webhook即可。配置完成后,代码有提交变动,gitlab会请求该webhook地址,触发自动打包。自动打包时,根据当前分支下的Jenkinsfile文件进行自动打包
pipeline {
agent {
node {
label 'go'
}
}
stages {
stage('拉取代码') {
agent none
steps {
container('go') {
git(url: 'http://192.168.8.134:8083/test_name/app_name.git', credentialsId: 'zhangsan', branch: '$BRANCH_NAME', changelog: true, poll: false)
sh 'ls -l'
}
}
}
stage('单元测试-编译') {
steps {
container('go') {
sh 'ls -l'
sh 'export GOPROXY=https://goproxy.cn '
}
}
}
stage('构建镜像') {
agent none
steps {
container('go') {
sh 'docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BRANCH_NAME .'
}
}
}
stage('推送镜像') {
agent none
steps {
container('go') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BRANCH_NAME'
}
}
}
}
stage('发布') {
agent none
steps {
container('go') {
withCredentials([kubeconfigContent(credentialsId : 'kubeconfig' ,variable : 'KUBECONFIG_CONFIG' ,)]) {
sh 'mkdir -p ~/.kube/'
sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
sh ' kubectl apply -f script/k8s/k8s-test_name-app_name.yaml'
}
}
}
}
}
environment {
REGISTRY = 'core.harbor.dked:30002'
DOCKERHUB_NAMESPACE = 'test_name'
APP_NAME = 'app_name'
}
}
需要在代码中添加工作负载对应的yaml文件,每个版本维护对应的版本号