如何将 Harbor 集成到流水线

先决条件

  • 您需要启用 KubeSphere DevOps 系统
  • 您需要创建一个企业空间,一个 DevOps 项目和一个项目常规帐户(project-regular),并且需要将此帐户邀请到 DevOps 项目中。 请参阅创建企业空间和项目
  • 您已经安装 Harbor

安装 Harbor

强烈建议您通过应用程序商店安装 Harbor。你也可以通过 helm3 手动安装 Harbor。

  1. helm repo add harbor https://helm.goharbor.io
  2. # for qucik taste, you can expose harbor by nodeport and disable tls.
  3. # set externalURL as one of your node ip and make sure it can be accessed by jenkins.
  4. helm install harbor-release harbor/harbor --set expose.type=nodePort,externalURL=http://$ip:30002,expose.tls.enabled=false

几分钟后,打开浏览器并访问 http://$node_ip:30003 输入 adminHarbor12345,然后单击 log in 登录。

harbor-login

单击新建项目,输入项目名称,然后单击确定

获取 Harbor 凭证

harbor-new-project

harbor-project-ok

单击您刚刚创建的项目名称,找到机器人帐户选项卡,然后单击添加机器人帐户

harbor-robot-account

输入机器人帐户的名称,然后保存。

harbor-robot-account-ok

单击导出到文件中以保存凭证。

harbor-robot-account-save

创建凭证

登录到 KubeSphere,进入创建的 DevOps 项目,并在工程管理凭证下创建以下凭证

ks-console-create-credential

用户名是您刚刚保存的 json 文件的 name 字段内容。 密码使用 token 字段内容。

ks-console-credential-ok

创建流水线

ks-console-create-pipline

在弹出窗口中填写流水线的基本信息,输入流水线的名称,然后将其他名称设置为默认值。

create-pipline-2

create-pipline-3

编辑 Jenkinsfile

单击流水线下的编辑 Jenkinsfile 按钮,然后将以下文本粘贴到弹出窗口中。 您需要替换环境变量 REGISTRY,HARBOR_NAMESPACE,APP_NAME,HARBOR_CREDENTIAL。

editJenkinsfile

  1. pipeline {
  2. agent {
  3. node {
  4. label 'maven'
  5. }
  6. }
  7. environment {
  8. // the address of your harbor registry
  9. REGISTRY = '103.61.38.55:30002'
  10. // the project name
  11. // make sure your robot account have enough access to the project
  12. HARBOR_NAMESPACE = 'ks-devops-harbor'
  13. // docker image name
  14. APP_NAME = 'docker-example'
  15. // ‘yuswift’ is the credential id you created on ks console
  16. HARBOR_CREDENTIAL = credentials('yuswift')
  17. }
  18. stages {
  19. stage('docker login') {
  20. steps{
  21. container ('maven') {
  22. // replace the username behind -u and do not forget
  23. sh '''echo $HARBOR_CREDENTIAL | docker login $REGISTRY -u 'robot$yuswift2018' --password-stdin'''
  24. }
  25. }
  26. }
  27. stage('build & push') {
  28. steps {
  29. container ('maven') {
  30. sh 'git clone https://github.com/kstaken/dockerfile-examples.git'
  31. sh 'cd dockerfile-examples/rethinkdb && docker build -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:devops-test .'
  32. sh 'docker push $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:devops-test'
  33. }
  34. }
  35. }
  36. }
  37. }

备注

您可以通过带有环境变量的 jenkins 凭证将参数传递给 docker login -u。但是,每个 harbor-robot-account 用户名都包含一个 “$” 字符,当被环境变量使用时,jenkins 将其转换为 “$$”。查看更多相关信息

运行流水线

保存完 jenkinsfile 后,单击运行按钮。 如果一切顺利,您会看到 jenkins 将镜像推送到 Harbor 仓库中。

run-pipline