配置Gitlab容器注册表,CI管道与Sonarqube
在当今的教程中,我们将使用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 status
git 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,我们可以查看我们项目的报告。