7.3 KiB
| title | keywords | description | linkTitle | weight |
|---|---|---|---|---|
| 构建和部署 Go 工程 | Kubernetes, docker, devops, jenkins, go, KubeSphere | 学习如何使用 KubeSphere 流水线构建并部署 Go 工程。 | 构建和部署 Go 工程 | 11410 |
准备工作
- 您需要启用 KubeSphere DevOps 系统。
- 您需要有一个 Docker Hub 帐户。
- 您需要创建一个企业空间、一个 DevOps 工程、一个项目和一个帐户 (
project-regular),需要邀请该帐户至 DevOps 工程和项目中并赋予operator角色,以部署工作负载。有关更多信息,请参见创建企业空间、项目、帐户和角色。
创建 Docker Hub 访问令牌 (Token)
-
登录 Docker Hub 并在右上角的菜单中选择 Account Settings。
-
在左侧点击 Security,然后点击 New Access Token。
-
输入令牌名称,点击 Create。
-
点击 Copy and Close 并务必保存该访问令牌。
创建凭证
您需要在 KubeSphere 中为已创建的访问令牌创建凭证,以便流水线能够向 Docker Hub 推送镜像。此外,您还需要创建 kubeconfig 凭证,用于访问 Kubernetes 集群。
-
以
project-regular身份登录 KubeSphere Web 控制台,转到您的 DevOps 工程,在凭证页面点击创建。 -
在弹出对话框中,设置凭证 ID,稍后会用于 Jenkinsfile 中,类型选择帐户凭证。用户名输入您的 Docker Hub 帐户名称,token / 密码中输入刚刚创建的访问令牌。操作完成后,点击确定。
{{< notice tip >}}
有关如何创建凭证的更多信息,请参见凭证管理。
{{</ notice >}}
创建流水线
创建完上述凭证后,您可以按照以下步骤使用示例 Jenkinsfile 创建流水线。
编辑 Jenkinsfile
-
在流水线列表中,点击该流水线进入其详情页面。点击编辑 Jenkinsfile 定义一个 Jenkinsfile,流水线会基于它来运行。
-
将以下所有内容复制并粘贴到弹出窗口中,用作流水线的示例 Jenkinsfile。您必须将
DOCKERHUB_USERNAME、DOCKERHUB_CREDENTIAL、KUBECONFIG_CREDENTIAL_ID和PROJECT_NAME的值替换成您自己的值。操作完成后,点击确定。pipeline { agent { node { label 'maven' } } environment { // the address of your harbor registry REGISTRY = 'docker.io' // your docker hub username DOCKERHUB_USERNAME = 'yuswift' // docker image name APP_NAME = 'devops-go-sample' // ‘dockerhubid’ is the credential id you created in KubeSphere for docker access token DOCKERHUB_CREDENTIAL = credentials('dockerhubid') //the kubeconfig credential id you created in KubeSphere KUBECONFIG_CREDENTIAL_ID = 'go' // the name of the project you created in KubeSphere, not the DevOps project name PROJECT_NAME = 'devops-go' } stages { stage('docker login') { steps{ container ('maven') { sh 'echo $DOCKERHUB_CREDENTIAL_PSW | docker login -u $DOCKERHUB_CREDENTIAL_USR --password-stdin' } } } stage('build & push') { steps { container ('maven') { sh 'git clone https://github.com/yuswift/devops-go-sample.git' sh 'cd devops-go-sample && docker build -t $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME .' sh 'docker push $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME' } } } stage ('deploy app') { steps { container('maven') { kubernetesDeploy(configs: 'devops-go-sample/manifest/deploy.yaml', kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID") } } } } }{{< notice note >}}
如果您的流水线成功运行,将会推送镜像至 Docker Hub。如果您使用 Harbor,则无法通过 Jenkins 凭证使用环境变量将参数传送到 docker login -u。这是因为每个 Harbor Robot 帐户的用户名都包含一个 $ 字符,当用于环境变量时,Jenkins 会将其转换为 $$。了解更多信息。
{{</ notice >}}