配置Gitlab容器注册表,CI管道与Sonarqube

时间:2020-02-23 14:37:55  来源:igfitidea点击:

在当今的教程中,我们将使用Gitlab容器注册表来存储图像。

1.配置容器注册表

导航到管理区域,并且我们注意的第一件事是默认设置关闭容器注册表。

安装容器注册表

我们应该修改Gitlab配置文件。
输入以下命令:

a)修改gitlab.rb vim /etc/gitlab/gitlab.rb更改以下行: registry_external_url 'https://gitlab.theitroad.com:5050'

现在,注册表URL正在侦听具有不同端口的现有Gitlab URL下的HTTPS。

b)修改后,我们需要重新配置Gitlab。 gitlab-ctl reconfigure

完成后,转到管理区域,此时,我们应该看到它启用。

c)从不同的机器测试容器登录。
但请注意,应在该系统上安装Docker。 docker login gitlab.theitroad.com:5050

默认图像存储位置如下: /var/opt/gitlab/gitlab-rails/shared/registry如果要更改路径,请使用vim编辑它。 vim /etc/gitlab/gitlab.rb更改以下行: gitlab_rails['registry_path'] = "/path/to/registry/storage"然后重新配置。 gitlab-ctl reconfigure

2.创建一个项目

我们将为管道创建一个新项目。
要做到这一点,请转到管理区域。

单击admin.

我们应该看到类似于此的管理区:

然后单击新组。

创建一个组

我们可以给小组提供任何名称。
然后执行项目URL的名称。
可见水平在这里是"私人";我们创建了一个名为"gitdemo"的团体。

然后再去管理区域 - >新项目

新项目

给出项目的名称。
选择以前创建的项目组。

创建项目后,我们可以将示例文件添加到存储库。

3.启用项目的容器注册表

转到Project Settings - > General,然后展开可见性,Projet功能,权限。

然后启用容器注册表。

启用项目注册表

现在转到项目,我们可以在"包"部分下看到容器注册表。

添加到侧边列上

4.禁用autodevops.

转到项目 - >设置 - > CICD

禁用自动删除

然后展开"自动DevOps"和"默认为"自动DevOps管道"。

禁用功能

5.从客户端/开发人员机器创建一个SSH密钥

其中我们将创建SSH密钥并与我们的Gitlab进行身份验证。
在此之后,我们可以推动,从我们的客户机中推动,拉动克隆Git存储库。

a)运行以下命令以生成密钥: ssh-keygen -t rsa -b 4096 -C "[email protected]"

创建钥匙

b)复制公钥: cat ~/.ssh/is_rsa_pub

得到钥匙

现在登录到Gitlab服务器。
转到个人资料 - > SSH键

c)将复制的键添加到键部分并保存。

添加密钥gitlab.

d)现在我们需要使用SSH获取克隆repo的URL。

转到项目 - >克隆。

用SSH URL复制克隆。

克隆Repo

在我们将克隆到我们的机器的存储库之前,我们需要安装"git"

在Client-Server上安装Git: yum install git -y现在我们将克隆存储库并将代码推向Gitlab存储库。

git全球设置 git config --global user.name "Darshana"git config --global user.email "[email protected]"运行以下命令以克隆存储库: git clone [email protected]:gitdemo/theitroad.git

将源代码复制到克隆的文件夹。

转到克隆文件夹: cd theitroad现在将代码推到存储库: git add .git statusgit commit -m "demo Project files"git push

6.安装Gitlab Runner

建议在安装Gitlab的位置安装Gitlab Runner。
我们可以在同一服务器上安装它,如果我们仍然需要这种方式。

其中我们将使用Docker执行程序;因此,我们应该在使用运行步者之前安装Docker。

a)Docker执行程序

Gitlab Runner可以使用Docker由于使用Docker Executor而在用户提供的图像上运行作业。

与Gitlab CI一起使用时,Docker Execker连接到Docker Engine,并使用Gitlab CI文件中配置的预定义图像在隔离的容器中运行每个构建。
我们在讨论管道时会看到Gitlab CI文件。

安装存储库:

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | bash

安装runner:

apt-get install gitlab-runner

检查Runner状态: gitlab-runner status

注册赛运行者

其中我们将添加共享赛运行者。
转到管理区域 - >运行步者。

然后,我们可以手动查看设置共享赛运行者部分。
我们需要我们的gitlab url和注册赛道的令牌。

运行注册赛运行者

运行以下命令以注册runner。 gitlab-runner register

它应该问几个问题。
回答下列问题。

a)输入Gitlab实例URL:

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.theitroad.com

b)输入我们获得注册赛运行者的令牌:

Please enter the gitlab-ci token for this runner
xxxxxxxxxxxxxxxxxxxxxxx

c)输入运行步者的描述;我们可以在Gitlab的UI稍后更改:

Please enter the gitlab-ci description for this runner
[hostname] Docker-runner

d)输入与运行步者关联的标签;我们可以在Gitlab的UI稍后更改:

Please enter the gitlab-ci tags for this runner (comma separated):
master,dev,qa

e)输入Runner执行程序:

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

f)如果我们选择了Docker作为执行器,则会要求我们用于未在.gitlab-ci.yml中定义一个的项目的默认图像:

Please enter the Docker image (eg. ruby:2.6):
alpine:latest

现在Runner成功注册。

重新启动赛运行者 gitlab-runner restart现在刷新运行步者页面(管理区域 - >运行步者)。

我们可以看到新添加的运行步者。

新添加的赛运行者

我们需要修改运行步者的一些设置。
所以点击令牌。

共享运行步者设置

然后选择"运行未标记的作业"并保存更改。

未标记的项目

更改Gitlab Runner配置

我们将在Gitlab管道中使用Docker-in-Docker(Dind)模式,因此我们必须在Docker容器中使用特权= true。
因此,我们将启用特权模式。

编辑配置文件: vim /etc/gitlab-runner/config.toml

运行步者模式

更改"特权"部分。 privileged = true修改后,我们可以看到类似于此文件的文件。

修改过的赛道

然后重新启动runner。 gitlab-runner restart

7.为Gitlab管道配置变量

添加容器注册表变量

单击项目 - >设置 - > CICD - >变量(点击展开)。

变量

将以下内容添加到键并添加值。

CI_REGISTRY_USER
CI_REGISTRY_PASSWORD

添加变量值

其中我们需要添加Gitlab登录和密码。

与Sonarqube服务器集成

获取Sonarqube令牌并将其添加到Gitlab.login到Sonarqube服务器。

转到管理>点击安全>用户>单击令牌

声纳令牌

它应该打开一个令牌窗口。

生成令牌

使用任何名称生成令牌 - >复制令牌。

新令牌

复制令牌并再次转到Gitlab.Click On项目 - >设置 - > CICD - >变量

添加一个新变量。 SONARQUBE_TOKEN将声纳令牌粘贴到"sonarqube_token"的价值。

8.创建管道

以下文件应在存储库文件夹中

a)dockerfile.

我们需要一个码头文件来构建我们的图像。
按照我们的Docker文件教程。

这是我们的Docker文件:

FROM ddarshana/alpinenode10
ENV NODE_ENV=production
RUN apk add --update curl && rm -rf /var/cache/apk/*
RUN mkdir /app
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]

转到项目并创建一个名为"Docker文件"的新文件。

添加Docker文件

b)添加sonar-project.properties

SONAR属性文件应在我们的源代码根目录中发送扫描数据到SONARQUBE服务器。

这是我们的文件:

# Required metadata
sonar.projectKey=theitroad
sonar.projectName=theitroad
# Comma-separated paths to directories with sources (required)
sonar.sources=./
# Language
sonar.language=js
sonar.profile=node
# Encoding of sources files
sonar.sourceEncoding=UTF-8

转到项目并创建"Sonar-project.properties"。

添加sonar属性文件

I.创建一个gitlab-ci文件

转到项目并创建一个名为".gitlab-ci.yml"的文件。

管道文件

这是我们的文件。

stages:
- Lint images
- Codequality
- Build and publish images
variables:
DOCKER_REGISTRY: gitlab.theitroad.com:5050
APP_NAME: theitroad
linting:
stage: Lint images
image: node:4-alpine
only: 
- master
script:
- npm install -g dockerlint && npm cache clean
- find ./-name Dockerfile -exec dockerlint {} \;
codequality:
stage: Codequality
image: ddarshana/alpine-sonarscanner
script:
- sonar-scanner -Dsonar.host.url=https://sonar.theitroad.com -Dsonar.login=$SONARQUBE_TOKEN -Dsonar.projectVersion=$CI_PIPELINE_ID -Dsonar.projectName=$CI_PROJECT_NAME+$CI_BUILD_REF_NAME
only: 
- master
publishing:
stage: Build and publish images 
image: docker:18.09.7
services:
- docker:18.09.7-dind
only: 
- master
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $DOCKER_REGISTRY
- docker build . -t $DOCKER_REGISTRY/gitdemo/$APP_NAME:$CI_PIPELINE_ID
- docker push $DOCKER_REGISTRY/gitdemo/$APP_NAME:$CI_PIPELINE_ID
- echo "pushed image $APP_NAME:$CI_PIPELINE_ID"
- docker logout $DOCKER_REGISTRY

其中我们为我们的管道定义了三个阶段:

stages: 
- Lint images 
- Codequality 
- Build and publish images

为Docker注册表和应用程序名称设置变量。

variables: 
DOCKER_REGISTRY: gitlab.theitroad.com:5050 
APP_NAME: theitroad

提交到Master分支的更改后,将启动管道。

管道开始

如我们所见,管道正在运行。
我们可以看到管道的阶段。

管道

如果所有阶段都成功,我们可以看到如下的输出。

完成管道

我们可以单击任何阶段并查看他们的日志。

阶段的输出

a)检查容器注册表。

项目 - >包 - >容器注册表

推镜像

然后你可以看到我们的图像。

b)检查声纳报告

登录Sonarqube,我们可以查看我们项目的报告。