最新更新:

    构建和部署 Go 项目

    准备工作

    创建 Docker Hub 访问令牌 (Token)

    1. 登录 Docker Hub,点击右上角的帐户,并从菜单中选择 Account Settings

    2. 在左侧导航栏点击 Security,然后点击 New Access Token

    3. 在弹出的对话框中,输入令牌名称(go-project-token),点击 Create

    4. 点击 Copy and Close 并务必保存该访问令牌。

    创建凭证

    您需要在 Kube AI Hub 中为已创建的访问令牌创建凭证,以便流水线能够向 Docker Hub 推送镜像。此外,您还需要创建 kubeconfig 凭证,用于访问 Kubernetes 集群。

    1. project-regular 身份登录 Kube AI Hub Web 控制台。在您的 DevOps 项目中点击 DevOps 项目设置下的凭证,然后在凭证页面点击创建

    2. 在弹出的对话框中,设置名称,稍后会用于 Jenkinsfile 中,类型选择用户名和密码用户名输入您的 Docker Hub 帐户名称,密码/令牌中输入刚刚创建的访问令牌。操作完成后,点击确定

      提示

      有关如何创建凭证的更多信息,请参见凭证管理
    3. 再次点击创建类型选择 kubeconfig。Kube AI Hub 会自动填充内容字段,即当前用户帐户的 kubeconfig。设置名称,然后点击确定

    创建流水线

    创建完上述凭证后,您可以按照以下步骤使用示例 Jenkinsfile 创建流水线。

    1. 要创建流水线,请在流水线页面点击创建

    2. 在弹出窗口中设置名称,然后点击下一步

    3. 在本教程中,您可以为所有字段使用默认值。在高级设置页面,点击创建

    编辑 Jenkinsfile

    1. 在流水线列表中,点击该流水线名称进入其详情页面。点击编辑 Jenkinsfile 定义一个 Jenkinsfile,流水线会基于它来运行。

    2. 将以下所有内容复制并粘贴到弹出的对话框中,用作流水线的示例 Jenkinsfile。您必须将 DOCKERHUB_USERNAMEDOCKERHUB_CREDENTIALKUBECONFIG_CREDENTIAL_IDPROJECT_NAME 的值替换成您自己的值。操作完成后,点击确定

      pipeline {  
        agent {
          label 'go'
        }
      
        environment {
          // 您 Docker Hub 仓库的地址
          REGISTRY = 'docker.io'
          // 您的 Docker Hub 用户名
          DOCKERHUB_USERNAME = 'Docker Hub Username'
          // Docker 镜像名称
          APP_NAME = 'devops-go-sample'
          // 'dockerhubid' 是您在 Kube AI Hub 用 Docker Hub 访问令牌创建的凭证 ID
          DOCKERHUB_CREDENTIAL = credentials('dockerhubid')
          // 您在 Kube AI Hub 创建的 kubeconfig 凭证 ID
          KUBECONFIG_CREDENTIAL_ID = 'go'
          // 您在 Kube AI Hub 创建的项目名称,不是 DevOps 项目名称
          PROJECT_NAME = 'devops-go'
        }
      
        stages {
          stage('docker login') {
            steps{
              container ('go') {
                sh 'echo $DOCKERHUB_CREDENTIAL_PSW | docker login -u $DOCKERHUB_CREDENTIAL_USR --password-stdin'
              }
            }
          }
      
          stage('build & push') {
            steps {
              container ('go') {
                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 ('go') {
                  withCredentials([
                    kubeconfigFile(
                      credentialsId: env.KUBECONFIG_CREDENTIAL_ID,
                      variable: 'KUBECONFIG')
                    ]) {
                    sh 'envsubst < devops-go-sample/manifest/deploy.yaml | kubectl apply -f -'
                  }
               }
            }
          }
        }
      }
      

      备注

      如果您的流水线成功运行,将会推送镜像至 Docker Hub。如果您使用 Harbor,则无法通过 Jenkins 凭证使用环境变量将参数传送到 docker login -u。这是因为每个 Harbor Robot 帐户的用户名都包含一个 $ 字符,当用于环境变量时,Jenkins 会将其转换为 $$了解更多信息

    运行流水线

    1. Jenkinsfile 设置完成后,您可以在仪表板上查看图形面板。点击运行来运行流水线。

    2. 运行记录选项卡中,您可以查看流水线的状态。稍等片刻,流水线便会成功运行。

    验证结果

    1. 如果流水线成功运行,则会在 Jenkinsfile 中指定的项目中创建一个部署 (Deployment)

    2. 查看已推送至 Docker Hub 的镜像。