离线环境快速部署 GitLab + Jenkins + Harbor 工具链

在“这个文档”里我们介绍了怎样通过 DevStream 在本地快速部署 GitLab + Jenkins + Harbor 工具链。

但是如果你的服务器是离线的,你只有一台可以访问互联网的 PC,这台 PC 可以通过企业内部网络访问到你要用来部署 GitLab + Jenkins + Harbor 工具链服务器,类似下图这样:

GitLab token

这时候,你就需要用到 DevStream 的工具链离线部署能力了。

1、下载 dtm 和 DevStream Plugins

首先你需要下载 DevStream 的命令行(CLI)工具 dtm 和所需的 DevStream 插件(plugins)。

1.1、下载 dtm

你可以参考这个文档下载 dtm。

唯一需要注意的是,下载完之后,请记得将 dtm 传输到你需要使用它的机器上。

1.2、下载 plugins

继续在你的 PC 上执行如下命令来下载 DevStream plugins:

Bash

  1. dtm init --download-only --plugins="gitlab-ce-docker, helm-installer" -d=plugins

这条命令执行成功后,你可以在本地 plugins 目录下看到如下文件:

Bash

  1. $ ls plugins/
  2. gitlab-ce-docker-linux-amd64_0.10.3.md5
  3. helm-installer-linux-amd64_0.10.3.md5
  4. gitlab-ce-docker-linux-amd64_0.10.3.so
  5. helm-installer-linux-amd64_0.10.3.so

2、下载镜像

因为 DevStream 需要使用容器化方式部署 GitLab、Jenkins 和 Harbor,那么在开始离线部署前,你需要先下载这几个工具对应的容器镜像。DevStream 提供了这几个工具对应的镜像列表,并且帮你准备了工具脚本从而更加容易地完成镜像离线工作:

  1. GitLab CE images
  2. Jenkins images
  3. Harbor images

你可以通过如下命令将镜像列表下载到本地:

Bash

  1. curl -o jenkins-images.txt https://raw.githubusercontent.com/devstream-io/devstream/main/docs/plugins/helm-installer/jenkins/jenkins-images.txt
  2. curl -o harbor-images.txt https://raw.githubusercontent.com/devstream-io/devstream/main/docs/plugins/helm-installer/harbor/harbor-images.txt
  3. curl -o jenkins-images.txt https://raw.githubusercontent.com/devstream-io/devstream/main/docs/plugins/gitlab-ce-docker/gitlab-ce-images.txt

可以通过如下命令下载 DevStream 提供的工具脚本,这个脚本可以帮助你快速将这些镜像下载到本地并且上传到私有镜像仓库:

Bash

  1. curl -o image-pull-push.sh https://raw.githubusercontent.com/devstream-io/devstream/main/hack/image-pull-push.sh
  2. chmod +x image-pull-push.sh

如果你还没有一个私有镜像仓库,可以参考这篇文章快速部署一个 Docker Registry。

接下来,你就可以通过下述命令快速完成镜像的下载和上传了:

Bash

  1. # 查看工具脚本的使用方法和注意事项等
  2. ./image-pull-push.sh -h # (1)
  3. # 设置镜像仓库地址,按需修改
  4. export IMAGE_REPO_ADDR=registry.devstream.io
  5. # 下载 xxx-images.txt 中所有镜像并保存到本地压缩包中
  6. ./image-pull-push.sh -f harbor-images.txt -r ${IMAGE_REPO_ADDR} -s
  7. ./image-pull-push.sh -f jenkins-images.txt -r ${IMAGE_REPO_ADDR} -s
  8. ./image-pull-push.sh -f gitlab-ce-images.txt -r ${IMAGE_REPO_ADDR} -s
  9. # 从压缩包中 load 镜像并 push 到私有镜像仓库(如果镜像仓库需要登录,则需要先手动执行 docker login)
  10. ./image-pull-push.sh -f harbor-images.txt -r ${IMAGE_REPO_ADDR} -l -u
  11. ./image-pull-push.sh -f jenkins-images.txt -r ${IMAGE_REPO_ADDR} -l -u
  12. ./image-pull-push.sh -f gitlab-ce-images.txt -r ${IMAGE_REPO_ADDR} -l -u
  1. 强烈建议你先看下本脚本的使用说明和示例

注意

如果你下载镜像的机器和内部私有镜像仓库之间网络隔离,那么你可以在镜像下载到本地压缩包后,先将该压缩包复制到能够访问镜像仓库的机器上,然后再执行 load 和 push 等操作。

3、下载 Helm Chart 包

你可以通过如下命令下载 Harbor 和 Jenkins 的 Helm chart 包:

Bash

  1. helm repo add harbor https://helm.goharbor.io
  2. helm repo update
  3. helm search repo harbor -l
  4. helm pull harbor/harbor --version=1.10.0

Bash

  1. helm repo add jenkins https://charts.jenkins.io
  2. helm repo update
  3. helm search repo jenkins -l
  4. helm pull jenkins/jenkins --version=4.2.5

执行完上述命令后,你可以在本地看到如下文件:

Bash

  1. $ ls
  2. harbor-1.10.0.tgz jenkins-4.2.5.tgz

4、准备配置文件

这时候需要联网下载的各种“物料”你就准备好了。接着你可以开始编写 DevStream 的配置文件了:

DevStream Config

  1. config:
  2. state:
  3. backend: local
  4. options:
  5. stateFile: devstream.state
  6. vars:
  7. imageRepo: registry.devstream.io
  8. gitlabHostname: gitlab.example.com
  9. jenkinsHostname: jenkins.example.com
  10. harborHostname: harbor.example.com
  11. harborURL: http://harbor.example.com
  12. jenkinsAdminUser: admin
  13. jenkinsAdminPassword: changeme
  14. gitlabSSHPort: 30022
  15. gitlabHttpPort: 30080
  16. gitlabHttpsPort: 30443
  17. tools:
  18. - name: gitlab-ce-docker
  19. instanceID: default
  20. dependsOn: []
  21. options:
  22. hostname: [[ gitlabHostname ]]
  23. gitlabHome: /srv/gitlab
  24. sshPort: [[ gitlabSSHPort ]]
  25. httpPort: [[ gitlabHttpPort ]]
  26. httpsPort: [[ gitlabHttpsPort ]]
  27. rmDataAfterDelete: false
  28. imageTag: "rc"
  29. - name: helm-installer
  30. instanceID: jenkins-001
  31. dependsOn: []
  32. options:
  33. chartPath: "./jenkins-4.2.5.tgz"
  34. valuesYaml: |
  35. serviceAccount:
  36. create: true
  37. name: jenkins
  38. controller:
  39. image: [[ imageRepo ]]/devstreamdev/jenkins
  40. tag: 2.361.1-jdk11-dtm-0.1
  41. imagePullPolicy: "IfNotPresent"
  42. sidecars:
  43. configAutoReload:
  44. image: [[ imageRepo ]]/kiwigrid/k8s-sidecar:1.15.0
  45. adminUser: [[ jenkinsAdminUser ]]
  46. adminPassword: [[ jenkinsAdminPassword ]]
  47. ingress:
  48. enabled: true
  49. hostName: [[ jenkinsHostname ]]
  50. enableRawHtmlMarkupFormatter: true
  51. JCasC:
  52. defaultConfig: true
  53. - name: helm-installer
  54. instanceID: harbor-001
  55. dependsOn: []
  56. options:
  57. chartPath: "./harbor-1.10.0.tgz"
  58. valuesYaml: |
  59. externalURL: [[ harborURL ]]
  60. expose:
  61. type: ingress
  62. tls:
  63. enabled: false
  64. ingress:
  65. hosts:
  66. core: [[ harborHostname ]]
  67. nginx:
  68. image:
  69. repository: [[ imageRepo ]]/goharbor/nginx-photon
  70. tag: v2.5.3
  71. portal:
  72. image:
  73. repository: [[ imageRepo ]]/goharbor/harbor-portal
  74. tag: v2.5.3
  75. core:
  76. image:
  77. repository: [[ imageRepo ]]/goharbor/harbor-core
  78. tag: v2.5.3
  79. jobservice:
  80. image:
  81. repository: [[ imageRepo ]]/goharbor/harbor-jobservice
  82. tag: v2.5.3
  83. registry:
  84. registry:
  85. image:
  86. repository: [[ imageRepo ]]/goharbor/registry-photon
  87. tag: v2.5.3
  88. controller:
  89. image:
  90. repository: [[ imageRepo ]]/goharbor/harbor-registryctl
  91. tag: v2.5.3
  92. chartmuseum:
  93. enabled: false
  94. image:
  95. repository: [[ imageRepo ]]/goharbor/chartmuseum-photon
  96. tag: v2.5.3
  97. trivy:
  98. enabled: false
  99. image:
  100. repository: [[ imageRepo ]]/goharbor/trivy-adapter-photon
  101. tag: v2.5.3
  102. notary:
  103. enabled: false
  104. server:
  105. image:
  106. repository: [[ imageRepo ]]/goharbor/notary-server-photon
  107. tag: v2.5.3
  108. signer:
  109. image:
  110. repository: [[ imageRepo ]]/goharbor/notary-signer-photon
  111. tag: v2.5.3
  112. database:
  113. internal:
  114. image:
  115. repository: [[ imageRepo ]]/goharbor/harbor-db
  116. tag: v2.5.3
  117. redis:
  118. internal:
  119. image:
  120. repository: [[ imageRepo ]]/goharbor/redis-photon
  121. tag: v2.5.3
  122. exporter:
  123. image:
  124. repository: [[ imageRepo ]]/goharbor/harbor-exporter
  125. tag: v2.5.3
  126. persistence:
  127. persistentVolumeClaim:
  128. registry:
  129. storageClass: ""
  130. accessMode: ReadWriteOnce
  131. size: 5Gi
  132. jobservice:
  133. storageClass: ""
  134. accessMode: ReadWriteOnce
  135. size: 1Gi
  136. database:
  137. storageClass: ""
  138. accessMode: ReadWriteOnce
  139. size: 1Gi
  140. redis:
  141. storageClass: ""
  142. accessMode: ReadWriteOnce
  143. size: 1Gi

你可以将这个配置文件保存为 config.yaml

5、开始部署

现在你可以通过如下命令开始部署 GitLab、Jenkins 和 Harbor 了:

Bash

  1. dtm apply -f config.yaml -y

完成部署后,你可以参考这篇文档继续学习如何访问 GitLab、Jenkins 和 Harbor 三个工具。

6、环境清理

你可以通过如下命令清理环境:

环境清理命令

  1. dtm delete -f config.yaml -y