K8S - 基于KubeSphere的DevOps构建依赖Jenkinsfile的流水线
Jenkinsfile 是一个文本文件,它包含 Jenkins 流水线的定义,并被检入源代码控制仓库。Jenkinsfile 将整个工作流存储为代码,因此它是代码审查和流水线迭代过程的基础。有关更多信息,请参见Jenkins 官方文档。KubeSphere 中可以创建两种类型的流水线:一种是本教程中介绍的基于 SCM 中 Jenkinsfile 创建的流水线,另一种是通过图形编辑面板创建的流水线。
Jenkinsfile 是一个文本文件,它包含 Jenkins 流水线的定义,并被检入源代码控制仓库。Jenkinsfile 将整个工作流存储为代码,因此它是代码审查和流水线迭代过程的基础。有关更多信息,请参见 Jenkins 官方文档。
KubeSphere 中可以创建两种类型的流水线:一种是本教程中介绍的基于 SCM 中 Jenkinsfile 创建的流水线,另一种是通过图形编辑面板创建的流水线。Jenkinsfile in SCM 需要源代码管理 (SCM) 中有内置 Jenkinsfile,换句话说,Jenkinsfile 作为 SCM 的一部分。KubeSphere DevOps 系统会根据代码仓库的现有 Jenkinsfile 自动构建 CI/CD 流水线。您可以定义工作流,例如
stage
和step
。
准备工作
- 您需要有一个 Docker Hub 帐户和一个 GitHub 帐户。
- 您需要启用 KubeSphere DevOps 系统。
- 您需要创建一个企业空间、一个 DevOps 工程和一个帐户 (
project-regular
),需要邀请该帐户至 DevOps 工程中并赋予operator
角色。如果尚未准备就绪,请参见创建企业空间、项目、帐户和角色。 - 您需要设置 CI 专用节点用于运行流水线。请参考为依赖项缓存设置 CI 节点。
- 您需要安装和配置 SonarQube。请参考将 SonarQube 集成到流水线。如果您跳过这一部分,则没有下面的 SonarQube 分析阶段。
步骤 1:创建凭证
以 project-regular
身份登录 KubeSphere 控制台。转到您的 DevOps 工程,在工程管理下的凭证页面创建以下凭证。有关如何创建凭证的更多信息,请参见凭证管理。
如果您的帐户或密码中包含任何特殊字符,例如
@
和$
,可能会因为无法识别而在流水线运行时导致错误。在这种情况下,您需要先在一些第三方网站(例如 urlencoder)上对帐户或密码进行编码,然后将输出结果复制粘贴作为您的凭证信息。
凭证 ID | 类型 | 用途 |
---|---|---|
dockerhub-id | 帐户凭证 | Docker Hub |
github-id | 帐户凭证 | GitHub |
demo-kubeconfig | kubeconfig | Kubernetes |
步骤 2:在 GitHub 仓库中修改 Jenkinsfile
- 在线编辑Jenkinsfile文件。
条目 | 值 | 描述信息 |
---|---|---|
DOCKER_CREDENTIAL_ID | dockerhub-id | 您在 KubeSphere 中为 Docker Hub 帐户设置的凭证 ID。 |
GITHUB_CREDENTIAL_ID | github-id | 您在 KubeSphere 中为 GitHub 帐户设置的凭证 ID,用于将标签推送至您的 GitHub 仓库。 |
KUBECONFIG_CREDENTIAL_ID | demo-kubeconfig | 您在 KubeSphere 中为 kubeconfig 设置的凭证 ID,用于访问运行中的 Kubernetes 集群。 |
REGISTRY | docker.io | 默认为 docker.io ,用作推送镜像的地址。 |
DOCKERHUB_NAMESPACE | your-dockerhub-account | 请替换为您的 Docker Hub 帐户名,也可以替换为该帐户下的 Organization 名称。 |
GITHUB_ACCOUNT | your-github-account | 请替换为您的 GitHub 帐户名。例如,如果您的 GitHub 地址是 https://github.com/kubesphere/ ,则您的 GitHub 帐户名为 kubesphere ,也可以替换为该帐户下的 Organization 名称。 |
APP_NAME | devops-java-sample | 应用名称。 |
SONAR_CREDENTIAL_ID | sonar-token | 您在 KubeSphere 中为 SonarQube 令牌设置的凭证 ID,用于代码质量检测。 |
Jenkinsfile
pipeline {
agent {
node {
label 'maven'
}
}
parameters {
string(name:'TAG_NAME',defaultValue: 'latest',description:'')
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'gitlab-id'
KUBECONFIG_CREDENTIAL_ID = 'iot-kubeconfig'
REGISTRY = 'www.xxx.com'
DOCKERHUB_NAMESPACE = 'dev'
REGISTRY_USERNAME = 'user'
REGISTRY_PASSWORD = 'pass'
GITHUB_ACCOUNT = 'account'
APP_NAME = 'devops-sample'
imageName = 'app1'
dockerFile = 'src/app1/Dockerfile'
ImageTag = 'latest'
localFullImageName = 'app1:latest'
remoteImage = 'www.xxxx.com/dev/app1'
}
stages {
stage('拉代码') {
steps {
git(url: 'http://gitlab.xxxxx.com.cn/app1.git', credentialsId: 'gitlab-id', branch: 'develop', changelog: true, poll: false)
}
}
stage('构建镜像') {
steps {
container ('maven') {
sh 'docker build -f $dockerFile -t $imageName:$ImageTag ./src/'
withCredentials([usernamePassword(passwordVariable : 'REGISTRY_PASSWORD' ,usernameVariable : 'REGISTRY_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {
sh 'echo "$REGISTRY_PASSWORD" | docker login $REGISTRY -u "$REGISTRY_USERNAME" --password-stdin'
}
}
}
}
stage('推送镜像') {
steps {
container ('maven') {
sh 'docker tag $localFullImageName $remoteImage:latest '
sh 'docker push $remoteImage:latest '
}
}
}
stage('deploy to dev') {
when{
branch 'develop'
}
steps {
input(id: 'deploy-to-dev', message: 'deploy to dev?')
kubernetesDeploy(configs: 'deploy/dev-ol/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
}
}
}
}
- 编辑完成后,点击页面底部的 Commit changes。
步骤 3:创建项目
- 以
project-admin
身份登录 KubeSphere。在您创建 DevOps 工程的企业空间中创建以下两个项目。请确保邀请project-regular
帐户至这两个项目中并赋予operator
角色。
项目名称 | 别名 |
---|---|
kubesphere-sample-dev | development environment |
kubesphere-sample-prod | production environment |
- 项目创建后,会显示在项目列表中,如下所示:
步骤 4:创建流水线
- 登出 KubeSphere,然后以
project-regular
身份重新登录,转到 DevOps 工程demo-devops
,点击创建构建新流水线
- 在弹出对话框中填入基本信息,将其命名为
jenkinsfile-in-scm
并选择一个代码仓库。
- 在 GitHub 选项卡,从下拉菜单中选择 github-token,然后点击确认来选择您的仓库。
- 选择您的 GitHub 帐户,与该令牌相关的所有仓库将在右侧列出。选择 devops-java-sample 并点击选择此仓库,点击下一步继续。
- 在高级设置中,选中丢弃旧的分支旁边的方框。本教程中,您可以为保留分支的天数和保留分支的最大个数使用默认值。
丢弃旧的分支意味着您将一并丢弃分支记录。分支记录包括控制台输出、已归档制品以及特定分支的其他相关元数据。更少的分支意味着您可以节省 Jenkins 正在使用的磁盘空间。KubeSphere 提供两个选项来确定何时丢弃旧分支:
-
保留分支的天数:在一定天数之后,丢弃分支。
-
保留分支的最大个数:分支达到一定数量后,丢弃最旧的分支。
保留分支的天数和保留分支的最大个数可以同时应用于分支。只要某个分支满足其中一个字段所设置的条件,则会丢弃该分支。例如,如果您将保留天数和最大分支数分别指定为 2 和 3,待某个分支的保留天数超过 2 或者分支保留数量超过 3,则会丢弃该分支。KubeSphere 默认用 -1 预填充这两个字段,表示已删除的分支将被丢弃。
- 在行为策略中,KubeSphere 默认提供四种策略。本示例中不会使用从 Fork 仓库中发现 PR 这条策略,因此您可以删除该策略。您无需修改设置,可以直接使用默认值。
发现分支
- 排除也作为 PR 提交的分支:不扫描源分支,例如源仓库的 master 分支。需要合并这些分支。
- 只有被提交为 PR 的分支:仅扫描 PR 分支。
- 所有分支:拉取源仓库中的所有分支。
从原仓库中发现 PR
- PR 与目标分支合并后的源代码版本:PR 合并到目标分支后,基于源代码创建并运行流水线。
- PR 本身的源代码版本:根据 PR 本身的源代码创建并运行流水线。
- 发现 PR 时会创建两个流水线:KubeSphere 创建两个流水线,一个流水线使用 PR 与目标分支合并后的源代码版本,另一个使用 PR 本身的源代码版本。
您需要选择 GitHub 作为代码仓库才能启用此处的行为策略设置。
- 向下滚动到脚本路径。该字段指定代码仓库中的 Jenkinsfile 路径。它表示仓库的根目录。如果文件位置变更,则脚本路径也需要更改。请将其更改为
Jenkinsfile-online
,这是示例仓库中位于根目录下的 Jenkinsfile 的文件名。
- 在扫描 Repo Trigger 中,点击如果没有扫描触发,则定期扫描并设置时间间隔为 5 分钟。点击创建完成配置。
步骤 5:运行流水线
- 流水线创建后,将显示在下图所示的列表中。点击该流水线进入其详情页面。
- 您可以点击该流水线右侧的三个点,然后选择复制流水线来创建该流水线的副本。如需并发运行不包含多分支的多个流水线,您可以将这些流水线全选,然后点击运行来批量运行它们。
- 流水线详情页显示同步状态,即 KubeSphere 和 Jenkins 的同步结果。若同步成功,您会看到成功图标中打上绿色的对号。
更多推荐
所有评论(0)