docker/docker-compose主题
https://docs.docker.com/engine/install/centos/
https://docs.docker.com/compose/install/
!!!直接使用docker的官方文档做法就行了。
gitlab主题
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端口.
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没有起作用。
1
| helm install --namespace oa gitlab-runner-self ./
|
重新安装gitlab
因为安装gitlab-runner遇到证书不正确,所有配置一个ssl证书.
重新安装后的gitlab
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'
|
配置ci/cd
第一步是写gitlab-ci.yaml
模板,然后gitlab-runner按照这个模版开始做动作;
当上面的启动,它有一个image:auto_build_image,那么它就自动拉下来了作为底层运行的container,然后执行gitlab-ci.yaml
里面的script(这个脚本运行的前提是gitlab-runner,已经帮我们把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.
它的作用就是:
variable—global/job
They can be set globally and per-job.
image/services—global/job
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
注意点–>当写gitlab-ci.yaml
当需要echo某个变量的时候,如何打印出来?
可以在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
referenece: parse command line
回到每个项目的dockerfile
当golang这种如果它还依赖了其他的private repository,如何拉取?
Fetching Private Go Modules During Docker Build
如何在docker build时候把参数传入进去?
其实这个ACCESS_TOKEN_USR
and ACCESS_TOKEN_PWD
是存放在ci/cd里面的variables
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