
# 搭建Jenkins和Gitlab环境
#### 前提条件
- 创建一个新的VPC，本示例中名为vpc-X，所使用网段为192.168.0.0/16。
- 创建一台位于vpc-X（192.168.0.0/16网段）的ECS服务器，推荐规格为4vCPUs 16GiB，系统为Huawei Cloud EulerOS 2.0，并绑定一个弹性公网IP用于拉取公网镜像。
 
#### 安装指定版本的Docker
1. 登录ECS服务器。
2. 在Huawei Cloud EulerOS 2.0操作系统下，可以使用如下命令快速安装最新版本的Docker。如以下命令无法自动化安装，请根据操作系统进行手动安装，详细操作请参见[Docker Engine installation](https://docs.docker.com/engine/install/#server)。
   
   ```
   dnf install docker
   ```
   
   
3. 查看Docker是否安装成功。 
   ```
   docker info
   ```
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001853124840.png "点击放大")
   
   
 
#### Gitlab安装及配置
1. 拉取 Gitlab 镜像。 
   ```
   docker pull gitlab/gitlab-ce
   ```
   
   
2. 运行容器。 
   ```
   docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
   ```
   
   
3. 查询容器状态。 
   ```
   docker ps | grep gitlab
   ```
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001900255645.png "点击放大")
   
   
4. 在Gitlab上创建项目时，生成项目的URL访问地址是通过容器的hostname进行生成的，即容器的id。作为Gitlab服务器，需要一个固定的 URL访问地址，因此需要配置gitlab.rb（宿主机路径：/home/gitlab/config/gitlab.rb）。 
   1. 在宿主机上通过vi打开文件/home/gitlab/config/gitlab.rb。
      ```
      vi /home/gitlab/config/gitlab.rb
      ```
      添加内容如下：
      ```
      external_url 'http://**.**.**.**' //宿主机外部IP，如EIP
      gitlab_rails['gitlab_ssh_host'] = '**.**.**.**' //宿主机外部IP，如EIP
      gitlab_rails['gitlab_shell_ssh_port'] = 222 //此端口是启动容器时的端口映射，222->22
      ```
      
   
   2. 保存修改内容。
   
   
   
   
5. 重启容器。 
   ```
   docker restart gitlab
   ```
   
   
6. 使用浏览器访问"ECS EIP:80"，登录Gitlab服务， 默认用户名为root，初始登录密码存放在gitlab容器的/etc/gitlab/initial_root_password路径下。
   
   您可以通过以下命令获取：
   ```
   docker exec gitlab cat /etc/gitlab/initial_root_password
   ```
   
   
 
#### Jenkins安装及配置
1. 拉取Jenkins镜像。 
   ```
   docker pull jenkins/jenkins:lts
   ```
   
   
2. 运行Jenkins容器。 
   由于后续需要在Jenkins容器里执行**docker build**等相关命令，因此该容器需具备docker in docker（dind）的能力，因此需要将docker.sock与docker挂载到容器。
   ```
   docker run -d -p 8000:8080 -p 50000:50000 \
    -v /var/jenkins_home:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/docker:/usr/bin/docker \
    --name myjenkins --privileged=true -u root jenkins/jenkins:lts
   ```
   
   
3. 测试Jenkins容器是否能执行docker命令。 
   ```
   docker exec myjenkins docker ps
   ```
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001888105482.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/caution_3.0-zh-cn.png)
   如果遇到报错：docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory。执行下面命令解决
   ```
   docker exec myjenkins sh -c "apt-get update && apt-get install -y libltdl7"
   ```
   
   
4. 使用浏览器访问"ECS EIP:8000"，登录Jenkins服务，默认用户名为admin，初始登录密码存放在/var/jenkins_home/secrets/initialAdminPassword路径下。 
   您可以通过以下命令获取密码：
   ```
   docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword
   ```
   
   
5. 登录Jenkins后，选择安装推荐的插件。完成初始配置后，即可进入Jenkins页面。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001932945421.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001887945582.png "点击放大")
   
   
   
   
6. 安装kubectl命令行工具。 
   1. 将kubectl下载到本地，建议和用户要使用的集群版本保持一致。详情请参见[安装kubectl](https://kubernetes.io/zh-cn/docs/tasks/tools/#kubectl)。
      ```
      wget https://dl.k8s.io/release/v*.*.*/bin/linux/amd64/kubectl  // v*.*.*为集群版本
      ```
      
   
   2. 将kubectl复制到Jenkins容器内。
      ```
      docker cp kubectl myjenkins:/usr/bin/
      docker exec myjenkins chmod +x /usr/bin/kubectl
      ```
      
   
   
   
   
7. 配置Jenkins免密拉取Gitlab代码。 
   1. 获取SSH公钥。
      ```
      docker exec -it myjenkins ssh-keygen -t rsa
      ```
      按Enter跳过填写其他参数，默认可无需填写。
      查看生成的公钥。
      ```
      docker exec myjenkins cat /root/.ssh/id_rsa.pub
      ```
      
   
   2. 在Gitlab中搜索SSH，添加一个新密钥。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001854203482.png "点击放大")
      
   
   3. 输入SSH公钥。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001854048126.png "点击放大")
      
   
   4. 保存SSH Key。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001855394190.png "点击放大")
      
   
   
   
   
 
