基于K8S部署gitlab-runner

部署gitlab-runner

这里基于helm部署,参考:https://gitlab.com/gitlab-org/charts/gitlab-runner.git

1
helm install --namespace gitlab-managed-apps --name k8s-gitlab-runner -f  values.yaml 

注意:values.yaml文件需要设置privileged: true

基于Docker-compose搭建jenkins

docker-compose配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '2'
 
services:
  jenkins:
    image: jenkins/jenkins:latest
    restart: always
    environment:
      JAVA_OPTS: "-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai -Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
    ports:
      - "80:8080"
      - "50000:50000"
    volumes:
      - '/ssd/jenkins:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/etc/localtime:/etc/localtime:ro'
    dns: 223.5.5.5
    networks:
      - extnetwork
networks:
   extnetwork:
      ipam:
         config:
         - subnet: 172.255.0.0/16

启动服务

1
docker-compose  up -d 

Mac系统配置炫酷终端(oh my zsh)

brew工具

官网:https://brew.sh

安装brew

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

修改brew源为国内源

1
2
3
4
5
6
7
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles #追加到~/.zshrc
brew update  #更新homebrew
brew upgrade #升级所有已经安装包
brew cleanup #升级完成后清理旧版本包

iterm2

安装iterm2

Git日常命令总结

Git全局设置:

1
2
git config --global user.name "wanzi"
git config --global user.email "[email protected]"

Git提交代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
git clone [email protected]:iwz2099/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
#上面命令将本地的master分支推送到远程origin分值,同时-u指定当前仓库的默认远程分支名为origin,后面就可以不加任何参数使用git push了

#包含本地分支都推送到origin主机
git push -u origin --all  

#如果本地是基于case_dev_wanzi分支开发,推送到远程case_dev分支
git push origin case_dev_wanzi:case_dev

Git查询和清理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
git status   #查询当前分支状态信息
git log      #查看当前分支commit信息
git log -n3  #查询最近三次提交commit 
git log -p  -2  #查询每次提交的内容差异,只显示最近2条提交记录,
git log --stat  #查询每次提交的简历统计信息
git log --pretty=oneline #将每次提交的信息一行显示,oneline可以是short,full,fuller
git log --pretty=format:"%h - %an, %ar : %s"
git log --pretty=format:"%h %s" --graph  #ASCII字符串来形象地展示你的分支、合并历史
git reflog #显示所有分支所有操作信息(包括commit,reset和已经删除的commit)
git reflog #显示最近10条日志
git grep -n   wanzi  #搜索提交历史和工作目录
git grep --count   wanzi  #搜索显示次数
git clean  #移除没有忽略的未跟踪文件
git clean -d  #清理工作目录
git clean -d -n  #-n测试清理工作目录,实际未清理

Git分支操作:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
git branch #查看当前分支
git branch -v #查看每个分支的最后一次提交
#基于远程master分支创建本地dev分支
git checkout -b dev  origin/master 

git branch --merged #查看哪些分支合并到当前分支
git branch --no-merged #查看哪些分支尚未合并到当前分支

#新开发一个功能,-b创建分支,并切换到新创建的分支上
git checkout -b dev-20180720-111111-wanzi
相当于:
git branch r-20180720-111111-wanzi
git checkout r-20180720-111111-wanzi

将开发后功能合并到Master主干
git checkout master
git merge  dev-20180720-111111-wanzi

Git合并操作

基于远程master新建分支issue54,基于该分支进行开发项目

Dockerfile多阶段构建

Docker多阶段构建理解:

  • 构建镜像需要有一个基础镜像,后续操作就会基于该基础镜像构建
  • docker镜像文件里有层级概念,每执行一次RUN指令,镜像就会多一层,所以通过减少层级来减少镜像大小
  • 多个from的时候,只有最后一个from的镜像才是镜像的根镜像

自己项目部署中多阶段构建示例, 这里基于golang基础镜像编译以后的二进制直接copy到基于alpine构建的最小镜像里:

Dockerfile语法详情

FROM

指定构建镜像使用的基础镜像,FROM必须是Dockerfile中非注释行的第一个指令,如果本地没有指定的镜像,则会自动从Docker的公共库pull镜像下来。 例子:

Docker基础命令

常用命令

1
2
3
4
5
6
7
8
docker info     #查看本地docker信息
docker search  openresty   #搜索远程镜像仓库
docker images      #查看当前系统镜像仓库镜像
docker ps          #查看当前正在运行容器
docker pull centos  #获取远程镜像,默认不指定tag,为latest     
docker container  run -p 8000:80 --rm -t -i centos:latest /bin/bash  #-p将容器端口映射80到节点node8000端口,--rm终止后删除容器适合临时调试,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开
docker container exec -i -t b5d7bad57561 /bin/bash #进入正在运行容器
docker rmi $(docker images -f "dangling=true" -q) #批量删除无效的none镜像

导入导出镜像

1
2
3
docker save -o centos7.tar centos  #导出镜像
docker load < centos7.tar   #导入镜像(标准流载入,包括原数据如标签)
docker load  --input  centos7.tar   #从tar包中读取镜像(非标准载入)

导入导出处容器

1
2
3
4
5
6
docker ps   #默认显示当前正在运行中的container
docker ps -a   #查看包括已经停止的所有容器
docker ps -l   #显示最新启动的一个容器(包括已停止的)

docker export 5a80afa126ba > centos7.5a80afa126ba.tar  #导出容器快照
docker import 5a80afa126ba > centos7.5a80afa126ba.tar  #从容器快照文件导入到镜像仓库

注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

使用OpenSSL签发证书

生成客户端私钥:

1
openssl genrsa -out server.key 2048

生成客户端证书:

1
openssl req -new -sha256 -x509 -days 3650 -key server.key -out server.crt

证书申请文件:

1
openssl req -new -key server.key -out server.csr

生成CA私钥

采用des3加密,需要输入4位以上密码:

1
openssl genrsa -des3 -out ca.key 4096

生成CA证书

1
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

CA配置配置文件/private/etc/ssl/openssl.cnf(我这里是mac系统)添加如下配置