{"id":19241723,"url":"https://github.com/yaoyaoio/project-devops-template","last_synced_at":"2025-06-13T08:06:53.049Z","repository":{"id":63766392,"uuid":"563762003","full_name":"yaoyaoio/project-devops-template","owner":"yaoyaoio","description":"多种语言的 流水线 模版   # kubesphere  devops  jenkinsfile cicd","archived":false,"fork":false,"pushed_at":"2022-11-25T13:42:16.000Z","size":6376,"stargazers_count":5,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-21T09:52:01.494Z","etag":null,"topics":["cicd","devops","kubernetes","kubeshpere"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yaoyaoio.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-09T09:28:49.000Z","updated_at":"2023-03-17T13:25:49.000Z","dependencies_parsed_at":"2022-11-25T14:53:07.467Z","dependency_job_id":null,"html_url":"https://github.com/yaoyaoio/project-devops-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yaoyaoio/project-devops-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyaoio%2Fproject-devops-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyaoio%2Fproject-devops-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyaoio%2Fproject-devops-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyaoio%2Fproject-devops-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yaoyaoio","download_url":"https://codeload.github.com/yaoyaoio/project-devops-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yaoyaoio%2Fproject-devops-template/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259606977,"owners_count":22883559,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cicd","devops","kubernetes","kubeshpere"],"created_at":"2024-11-09T17:12:23.301Z","updated_at":"2025-06-13T08:06:53.027Z","avatar_url":"https://github.com/yaoyaoio.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# project-devops-template\n\n多种语言的 CICD 模版 流水线项目\n\n## 介绍\n\n本项目主要提供不同语言的容器化构建 基于 Kubesphere 流水线示例模版，以及一些常用构建工具的使用方法。\n如果只想查看某个语言的容器化构建示例，可以直接查看对应的目录。\n\n## 变量\n\n* $APP_NAME 项目名称\n* $VERSION 版本号\n* $IMAGE_REGISTRY 容器镜像仓库地址\n* $IMAGE_NAMESPACE 容器仓库命名空间/组织空间 不同云厂商有不同的命名方式\n* $IMAGE_USER 容器仓库用户名\n* $IMAGE_PASSWD 容器仓库密码\n* $IMAGE_NAME 镜像名称 生成规则` \"${IMAGE_REGISTRY}/${IMAGE_NAMESPACE}/${APP_NAME}:${VERSION}\"`\n* $BRANCH 分支名称\n* $GIT_URL 代码仓库地址\n* $COMMIT_ID 代码提交ID 使用 `git rev-parse --short HEAD` 获取\n\n## 版本号\n\n默认我使用 `$COMMIT_ID` 作为版本号，如果你需要使用其他版本号，可以在流水线中修改 `$VERSION`，然后在构建步骤中使用`$VERSION`\n.\n\n**例如**：\n\n* $COMMIT_ID 代码提交ID 使用 `git rev-parse --short HEAD` 获取\n* $GIT_TAG 代码标签\n* $GIT_BRANCH 代码分支\n\n修改方式 修改每个项目的 `Jenkinsfile` 文件，修改 `$VERSION` 变量的值:\n\n```groovy\nsteps {\n    script {\n        env.COMMIT_ID = \"${sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()}\"\n        env.VERSION = \"${env.COMMIT_ID}\"\n        env.IMAGE_NAME = \"${env.IMAGE_REGISTRY}/${env.IMAGE_NAMESPACE}/${env.APP_NAME}:${env.VERSION}\"\n    }\n}\n```\n\n## 凭证 (Kubernetes Secret)\n\n### KUBECONFIG 凭证\n\nKUBECONFIG 凭证用于连接操作 Kubernetes 集群，需要在流水线中配置。\n\n可以在 Kubepshere 工作台 -\u003e 企业空间 -\u003e {你的空间} -\u003e Devops 项目--\u003e {项目名称} -\u003e 凭证 -\u003e 创建凭证 -\u003e\n选择类型为 `KUBECONFIG` 名称为 `kubeconfig-credentials`\n\n![图片所示](./assets/ks-create-secret-kubeconfig.png)\n\n### 镜像仓库凭证\n\n镜像仓库凭证用于推送镜像到镜像仓库，需要在流水线中配置。\n\n可以在 Kubepshere 工作台 -\u003e 企业空间 -\u003e {你的空间} -\u003e Devops 项目--\u003e {项目名称} -\u003e 凭证 -\u003e 创建凭证 -\u003e\n选择类型为 `用户名和密码（账户凭证）` 名称为 `image-registry-credentials`\n\n![图片所示](./assets/ks-create-secret-image.png)\n\n### 代码仓库凭证\n\n代码仓库凭证用于拉取代码，需要在流水线中配置。\n\n可以在 Kubepshere 工作台 -\u003e 企业空间 -\u003e {你的空间} -\u003e Devops 项目--\u003e {项目名称} -\u003e 凭证 -\u003e 创建凭证 -\u003e\n选择类型为 `用户名和密码（账户凭证）` 名称为 `git-credentials`\n\n![图片所示](./assets/ks-create-secret-git.png)\n\n以上配置好之后 可以在流水线中使用对应凭证。\n\n## 创建流水线 (Jenkinsfile)\n\n每个项目下都有一个 `Jenkinsfile` 文件，这个文件是流水线的配置文件，可以在流水线中配置流水线的各个步骤。\n\n在 Kubesphere 中 可以直接使用 Jenkinsfile 来创建流水线。也可以在 kubeSphere 中可视化创建流水线 最后也会生成 Jenkinsfile\n文件。\n\n以 go-sample 项目为例，\n\n### 第一步 创建流水线\n\n![1](./assets/ks-create-project-1.png)\n\n### 第二步 填写构建参数\n\n![2](./assets/ks-create-project-2.png)\n\n### 第三步 选择流水线配置文件\n\n这个地方我们选择 编写 `Jenkinsfile` 文件 将{project}下的 `Jenkinsfile` 文件复制到这里\n\n![3](./assets/ks-create-project-3.png)\n\n## Jenkinsfile\n\n#### 第一步 拉取代码（SCM）\n\n```groovy\nstage('拉取代码') {\n    agent none\n    steps {\n        git(url: '仓库地址', credentialsId: 'git-credentials', changelog: true, poll: false, branch: '$BRANCH')\n        script {\n            env.COMMIT_ID = \"${sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()}\"\n            env.VERSION = \"${env.COMMIT_ID}\"\n            env.IMAGE_NAME = \"${env.IMAGE_REGISTRY}/${env.IMAGE_NAMESPACE}/${env.APP_NAME}:${env.VERSION}\"\n        }\n\n    }\n}\n```\n\n* {仓库地址} 我默认是写死在jenkinsfile里面的，也可以在构建参数中定义`$GIT_URL`及默认值，然后在这里使用`$GIT_URL`来获取\n* $BRANCH 在构建参数中定义及默认值\n* git-credentials 为代码仓库凭证 名称为 `git-credentials` 需要提前创建 看上面凭证章节\n* $COMMIT_ID 代码提交ID 使用 `git rev-parse --short HEAD` 获取 默认在`Jenkinsfile`中定义\n* $VERSION 版本号 默认在`Jenkinsfile`中定义 为`$COMMIT_ID` 也可以在构建参数中定义`$VERSION`\n  及默认值，然后在这里使用`$VERSION`来获取 或者自己根据需求定义\n* $IMAGE_NAME 镜像名称 默认在`Jenkinsfile`中定义\n* $IMAGE_REGISTRY 镜像仓库地址 在构建参数中定义及默认值\n* $IMAGE_NAMESPACE 镜像仓库命名空间 在构建参数中定义及默认值\n* $APP_NAME 应用名称 在构建参数中定义及默认值\n\n#### 第二步 构建镜像\n\n默认使用容器进行多阶段构建\n\n```groovy\nstage('编译项目并构建镜像') {\n    agent none\n    steps {\n        container('base') {\n            withCredentials([usernamePassword(credentialsId: 'image-registry-credentials', passwordVariable: 'IMAGE_PASSWD', usernameVariable: 'IMAGE_USER',)]) {\n                sh 'echo $IMAGE_PASSWD | docker login $IMAGE_REGISTRY -u $IMAGE_USER --password-stdin'\n            }\n\n            sh \"\"\"docker build -t $APP_NAME:$VERSION -f Dockerfile-builder .\"\"\"\n        }\n\n    }\n}\n```\n\n* image-registry-credentials 为镜像仓库凭证 名称为 `image-registry-credentials` 需要提前创建 看上面凭证章节\n* $IMAGE_PASSWD 镜像仓库密码 来自于凭证 `image-registry-credentials`\n* $IMAGE_USER 镜像仓库用户名 来自于凭证 `image-registry-credentials`\n\n#### 第三步 推送镜像\n\n```groovy\nstage('推送镜像') {\n    agent none\n    steps {\n        container('base') {\n            sh \"\"\"docker tag $APP_NAME:$VERSION $IMAGE_NAME\"\"\"\n            sh \"\"\"docker push $IMAGE_NAME\"\"\"\n        }\n\n    }\n}\n```\n\n### 第四步 部署到 kubernetes 集群\n\n```groovy\nstage('部署到集群') {\n    agent none\n    steps {\n        container('base') {\n            withCredentials([kubeconfigContent(credentialsId: 'kubeconfig-credentials', variable: 'KUBECONFIG',)]) {\n                sh 'envsubst \u003c deploy/prod/deployment.yaml | kubectl apply -f -'\n                sh 'envsubst \u003c deploy/prod/service.yaml | kubectl apply -f -'\n            }\n\n        }\n\n    }\n}\n```\n\n* kubeconfig-credentials 为 kubernetes 集群凭证 名称为 `kubeconfig-credentials` 需要提前创建 看上面凭证章节\n* envsubst 命令可以读取 env 环境变量并且把变量替换到文件中","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaoyaoio%2Fproject-devops-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyaoyaoio%2Fproject-devops-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyaoyaoio%2Fproject-devops-template/lists"}