docker/docker-compose主题

https://docs.docker.com/engine/install/centos/ https://docs.docker.com/compose/install/ !!!直接使用docker的官方文档做法就行了。

gitlab主题

  • DevOps(CI/CD)
  • Container(Docker)
  • Kubernetes
  • Service Mesh

why:为什么要使用gitlab?

reference

  • Simple to Use
  • Fast
  • Economical and Secure

install gitlab

使用docker-compose安装

external_url,这个跟nginx有关,如果改端口,需要三者一样的端口.

修改了内部gitlab的external_url后,其docker的内部访问端口不再是默认的80端口,而是你配置的external_url端口,所以你需要修改内部端口为你指定的external_url端口.

  • docker-compose.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: '193.112.78.144'
    environment:
        GITLAB_OMNIBUS_CONFIG: |
            external_url 'https://193.112.78.144:38443'
            nginx['redirect_http_to_https'] = true
            letsencrypt['enable'] = false
            nginx['ssl_certificate'] = "/etc/gitlab/nginx.pem"
            nginx['ssl_certificate_key'] = "/etc/gitlab/nginx.key"
            # Add any other gitlab.rb configuration here, each on its own line
            ##email
            gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
            gitlab_rails['smtp_address'] = "smtp.qq.com"
            gitlab_rails['smtp_port'] = 465 # 端口不可以选择587,测试过会发送邮件失败
            gitlab_rails['smtp_user_name'] = "554043925@qq.com" # * 你的邮箱账号,也可以是ge**lin@qq.com等
            gitlab_rails['smtp_password'] = "vafyxxwagenybaib" # * 授权码,不是密码
            gitlab_rails['smtp_authentication'] = "login"
            gitlab_rails['smtp_enable_starttls_auto'] = true
            gitlab_rails['smtp_tls'] = true
            gitlab_rails['gitlab_email_from'] = '554043925@qq.com' # * 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
            gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响 可修改为exmail.qq.com/james.com 经测试完全不影响,删除也不影响,并且发送的邮件都是一样的。            
    ports:
        - '38443:38443'
        - '38022:22'
    volumes:
        - '/data/gitlab/config:/etc/gitlab'
        - '/data/gitlab/logs:/var/log/gitlab'
        - '/data/gitlab/data:/var/opt/gitlab'
  • 配置脚本,这里我们volume的文件路径是/data/gitlab,可以按需更改。
1
2
3
4
5
6
7
8
9
export GITLAB_HOME=/data/gitlab && \
sudo mkdir -p $GITLAB_HOME/config &&\
sudo openssl req -new -x509 \
  -days 36500 \
  -nodes \
  -out $GITLAB_HOME/config/nginx.pem \
  -keyout $GITLAB_HOME/config/nginx.key \
  -subj "/C=US/CN=gitlab/O=self.gitlab.com" && \
sudo docker-compose up -d

安装后预览地址

ssh from 22 to 38022

这里是因为它的git直接使用ssh的22端口,而我们的端口改为了38022所以,需要我们改下配置文件如下:

.ssh/conf文件

1
2
3
4
5
6
#为了让ssh连上gitlab的ssh
Host 193.112.78.144
 HostName 193.112.78.144
 Port 38022
 User git
 IdentityFile ~/CODE/myLibrary/work/Yzm/SSHSave/LT_company/id_rsa

reference

install gitlab-runner

helm安装

我们使用helm来安装gitlab-runner到kubernets

根据官方文档来下载安装kubernets gitlab-runner;注意此时是使用:0.23.0.版本

Use Docker-in-Docker workflow with Docker executor—>这个说明很重要

这种是我们要使用的,也就是我们有一个base image, 然后它与docker-dind交流,来打出新的image.

按照文档修改后

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
helm repo add gitlab https://charts.gitlab.io
helm search repo gitlab/gitlab-runner --version ^0.23.0
        NAME                	CHART VERSION	APP VERSION	DESCRIPTION
        gitlab/gitlab-runner	0.23.0       	13.6.0     	GitLab Runne
helm pull --untar gitlab/gitlab-runner --version ^0.23.0
cd gitlab-runner/
helm upgrade -i gitlab-runner-self3 -n oa \
        --set gitlabUrl=https://testgitlab.kids-coding.com.cn:38443,runnerRegistrationToken=5g3XLUnYn4sysDdz3a9W \
        ./

helm upgrade -i gitlab-runner-product-test1 -n oa \
        --set gitlabUrl=https://gitlab.9dwit.com/ \
        --set runnerRegistrationToken=LiQzDHGLbodbi1RQgomZ \
        ./

deprecate 这个方法了

它是直接让这个与物理机交流; docker-dind没有起作用。

  • 因为不知道为什么这个helm版本,当与docker-dind交流时候,虽然按照官方版本说是docker在某个版本,当client与deamon交流时,开始需要证书。 修改过的官方版本0.22.0

  • gitlab-runner_in_kubernets目录下运行这个命令。

1
helm install --namespace oa gitlab-runner-self ./

重新安装gitlab

因为安装gitlab-runner遇到证书不正确,所有配置一个ssl证书.

重新安装后的gitlab

  • docker-compose.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: 'testgitlab.kids-coding.com.cn'
    environment:
        GITLAB_OMNIBUS_CONFIG: |
            external_url 'https://testgitlab.kids-coding.com.cn:38443'
            nginx['redirect_http_to_https'] = true
            letsencrypt['enable'] = false
            nginx['ssl_certificate'] = "/etc/gitlab/nginx.pem"
            nginx['ssl_certificate_key'] = "/etc/gitlab/nginx.key"
            # Add any other gitlab.rb configuration here, each on its own line
            ##email
            gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
            gitlab_rails['smtp_address'] = "smtp.qq.com"
            gitlab_rails['smtp_port'] = 465 # 端口不可以选择587,测试过会发送邮件失败
            gitlab_rails['smtp_user_name'] = "554043925@qq.com" # * 你的邮箱账号,也可以是ge**lin@qq.com等
            gitlab_rails['smtp_password'] = "vafyxxwagenybaib" # * 授权码,不是密码
            gitlab_rails['smtp_authentication'] = "login"
            gitlab_rails['smtp_enable_starttls_auto'] = true
            gitlab_rails['smtp_tls'] = true
            gitlab_rails['gitlab_email_from'] = '554043925@qq.com' # * 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
            gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响 可修改为exmail.qq.com/james.com 经测试完全不影响,删除也不影响,并且发送的邮件都是一样的。            
    ports:
        - '38443:38443'
        - '38022:22'
    volumes:
        - '/data/gitlab/config:/etc/gitlab'
        - '/data/gitlab/logs:/var/log/gitlab'
        - '/data/gitlab/data:/var/opt/gitlab'

20201127200343

配置ci/cd

过程

第一步是写gitlab-ci.yaml模板,然后gitlab-runner按照这个模版开始做动作;

当上面的启动,它有一个image:auto_build_image,那么它就自动拉下来了作为底层运行的container,然后执行gitlab-ci.yaml里面的script(这个脚本运行的前提是gitlab-runner,已经帮我们把source code拉下来了,)gitlab-ci/cd拉source code script里面有docker build(可以参看3.2),来编译源代码。

  • 关于上面script中,docker build,它是如何跟docker daemon交流的?!!! 重要

写gitlab-ci.yaml

stages–global keywords

stages

extends—job keywords

  • extends
    • Configuration entries that this job is going to inherit from.

20201130105943

它的作用就是:

20201130110745

variable—global/job

They can be set globally and per-job.

20201130112547

image/services—global/job

extends .build

image: Used to specify a Docker image to use for the job.

services:Used to specify a service Docker image, linked to a base image specified in image.

翻译下就是只有一个基础容器是来运行job任务,但是可以这个job任务,可以连接多个services(在运行的过程中)。

image concept services concept

environment

reference this environment reference to environmentkubernetes

my example

注意点–>当写gitlab-ci.yaml

当需要echo某个变量的时候,如何打印出来?

20201130155307

可以在yaml中来打印变量,这是可以打印出来的。

  • yaml中的String
    • 保留换行(Newlines preserved)
      • 使用竖线符“ | ”来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# YAML
lines: |
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行  

// JSON
"lines": "我是第一行\n我是第二行\n  我是吴彦祖\n     我是第四行\n我是第五行"

yaml

准备.build与.auto-deploy里面的基本image

auto-build-image

auto-deploy-image auto-build-image

parse command line

20201130185010

referenece: parse command line

回到每个项目的dockerfile

当golang这种如果它还依赖了其他的private repository,如何拉取?

20201130185614

Fetching Private Go Modules During Docker Build

如何在docker build时候把参数传入进去?

其实这个ACCESS_TOKEN_USR and ACCESS_TOKEN_PWD是存放在ci/cd里面的variables

20201130191801

Set build-time variables

缺省的时候直接使用本地的环境变量:

1
2
$ export HTTP_PROXY=http://10.20.30.2:1234
$ docker build --build-arg HTTP_PROXY .

附录

  • 当我们的gitlab是按照docker安装的,且22端口没有连接到gitlab里面去的,而我们提交代码的时候,如果使用ssh连接,那么实际会连到安装gitlab docker的实体机上面去的。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#为了让ssh连上gitlab的ssh
Host 193.112.xx.xx
 HostName 193.112.xx.xx
 Port 38022
 User git
 IdentityFile ~/CODE/myLibrary/XXXXXXXX/id_rsa
Host testgitlab.xxxx.com.cn
 HostName testgitlab.xxxx.com.cn
 Port 38022
 User git
 IdentityFile ~/CODE/myLibrary/XXXXXXXX/id_rsa
  • 其他的一些思路:https://zhuanlan.zhihu.com/p/35749347