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

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

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

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

    你可以参考下载 dtm。

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

    1.2、下载 plugins

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

    Bash

    这条命令执行成功后,你可以在本地 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、下载镜像

    1. GitLab CE images
    2. 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

    如果你还没有一个私有镜像仓库,可以参考快速部署一个 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 等操作。

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

    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

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

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

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

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

    Bash

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

    6、环境清理

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