KubeSphere的使用 和 DevOps 流水线创建
前提:k8s-集群搭建-安装Docker、kubelet、kubeadm、kubectl负载均衡:Ingressd底层是一个nginx部署Ingress:配置:使用域名访问:
前提:k8s-集群搭建-安装Docker、kubelet、kubeadm、kubectl
定制化安装-安装Metrics-server
官网:https://v2-1.docs.kubesphere.io/docs/zh-CN/installation/install-metrics-server/
安装KubeSphere DevOps
https://kubesphere.io/zh/docs/pluggable-components/devops/
通过 DevOps 使用 Jenkinsfile 创建流水线
https://kubesphere.io/zh/docs/devops-user-guide/how-to-use/create-a-pipeline-using-jenkinsfile/
准备:
- Docker Hub 帐户;
- GitHub 帐户;
本示例流水线包括以下八个阶段:
备注
阶段 1:Checkout SCM:从 GitHub 仓库检出源代码。
阶段 2:单元测试:待该测试通过后才会进行下一阶段。
阶段 3:SonarQube 分析:SonarQube 代码质量分析。
阶段 4:构建并推送快照镜像:根据策略设置中选定的分支来构建镜像,并将 SNAPSHOT- B R A N C H N A M E − BRANCH_NAME- BRANCHNAME−BUILD_NUMBER 标签推送至 Docker Hub,其中 $BUILD_NUMBER 为流水线活动列表中的运行序号。
阶段 5:推送最新镜像:将 SonarQube 分支标记为 latest,并推送至 Docker Hub。
阶段 6:部署至开发环境:将 SonarQube 分支部署到开发环境,此阶段需要审核。
阶段 7:带标签推送:生成标签并发布到 GitHub,该标签会推送到 Docker Hub。
阶段 8:部署至生产环境:将已发布的标签部署到生产环境。
-
登录 GitHub 并 Fork GitHub 仓库 devops-maven-sample 至您的 GitHub 个人帐户。
-
在您自己的 GitHub 仓库 devops-maven-sample 中,点击根目录中的文件 Jenkinsfile-online;
Jenkinsfile-online:
pipeline {
agent {
node {
label 'maven'
}
}
parameters {
string(name:'TAG_NAME',defaultValue: '',description:'')
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'docker.io'
DOCKERHUB_NAMESPACE = 'docker_username'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'devops-java-sample'
}
stages {
stage ('checkout scm') {
steps {
checkout(scm)
}
}
stage ('unit test') {
steps {
container ('maven') {
sh 'mvn clean test'
}
}
}
stage ('build & push') {
steps {
container ('maven') {
sh 'mvn clean package -DskipTests'
sh 'docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_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:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
}
}
}
}
stage('push latest'){
when{
branch 'master'
}
steps{
container ('maven') {
sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest '
}
}
}
stage('deploy to dev') {
when{
branch 'master'
}
steps {
input(id: 'deploy-to-dev', message: 'deploy to dev?')
container ('maven') {
withCredentials([
kubeconfigFile(
credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
variable: 'KUBECONFIG')
]) {
sh 'envsubst < deploy/dev-all-in-one/devops-sample.yaml | kubectl apply -f -'
}
}
}
}
stage('push with tag'){
when{
expression{
return params.TAG_NAME =~ /v.*/
}
}
steps {
container ('maven') {
input(id: 'release-image-with-tag', message: 'release image with tag?')
withCredentials([usernamePassword(credentialsId: "$GITHUB_CREDENTIAL_ID", passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh 'git config --global user.email "kubesphere@yunify.com" '
sh 'git config --global user.name "kubesphere" '
sh 'git tag -a $TAG_NAME -m "$TAG_NAME" '
sh 'git push http://$GIT_USERNAME:$GIT_PASSWORD@github.com/$GITHUB_ACCOUNT/devops-java-sample.git --tags --ipv4'
}
sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME '
}
}
}
stage('deploy to production') {
when{
expression{
return params.TAG_NAME =~ /v.*/
}
}
steps {
input(id: 'deploy-to-production', message: 'deploy to production?')
container ('maven') {
withCredentials([
kubeconfigFile(
credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
variable: 'KUBECONFIG')
]) {
sh 'envsubst < deploy/prod-all-in-one/devops-sample.yaml | kubectl apply -f -'
}
}
}
}
}
}
Dockerfile-online:
FROM java:openjdk-8-jre-alpine
WORKDIR /home
COPY target/*.jar /home
ENTRYPOINT java -jar *.jar
自己写的:
### 指定java8环境镜像
FROM java:8
## 指定作者
MAINTAINER wangyaonan
###复制文件到容器app-springboot
ADD target/demo-0.0.1-SNAPSHOT.jar /demo-app.jar
### 对外开发8081端口
EXPOSE 8080
###配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/demo-app.jar"]
更多推荐
所有评论(0)