gitlab和jenkins配合

发布时间 2023-10-08 15:35:06作者: 普里莫

项目配置

IP 配置 容器
10.0.0.101 8G 4核 gitlab , jenkins
10.0.0.102 nginx
10.0.0.100 harbor

使用 docker 启动 gitlab

# 在本机准备gitlab工作目录
mkdir -p /data/docker/gitlab/{config,data,logs}
以上在本机建立的3个目录是为了gitlab容器通过挂载本机目录启动后可以映射配置文件,数据文件,日志文件到本机,然后后续就可以直接在本机查看和编辑了,不用再进容器操作。
 
# 启动gitlab
docker run \
--name gitlab \
--hostname gitlab \
--restart always \
-p 4443:443 -p 8888:80 -p 2222:22 \
-v /data/docker/gitlab/config:/etc/gitlab \
-v /data/docker/gitlab/data:/var/opt/gitlab \
-v /data/docker/gitlab/logs:/var/log/gitlab \
-d gitlab/gitlab-ce:latest 
 
# 查看密码
[root@docker01 ~]# cat /data/docker/gitlab/config/initial_root_password
CetMIMU29ScEIGHM1jshlVLjKGHKdS+uZGt84VyC1hI=
--name gitlab: 指定容器的名称为 "gitlab"。
--hostname gitlab: 指定容器的主机名为 "gitlab"。
--restart always: 设置容器在停止后自动重启。
-p 4443:443 -p 8888:80 -p 2222:22: 将容器内部的 443 端口映射到宿主机的 4443 端口,用于 HTTPS 访问;将容器内部的 80 端口映射到宿主机的 8888 端口,用于 HTTP 访问;将容器内部的 22 端口映射到宿主机的 2222 端口,用于 SSH 访问。
-v /data/docker/gitlab/config:/etc/gitlab: 将宿主机的 /data/docker/gitlab/config 目录挂载到容器的 /etc/gitlab 目录,用于存储 GitLab 的配置文件。
-v /data/docker/gitlab/data:/var/opt/gitlab: 将宿主机的 /data/docker/gitlab/data 目录挂载到容器的 /var/opt/gitlab 目录,用于存储 GitLab 的数据。
-v /data/docker/gitlab/logs:/var/log/gitlab: 将宿主机的 /data/docker/gitlab/logs 目录挂载到容器的 /var/log/gitlab 目录,用于存储 GitLab 的日志文件。
-d: 在后台模式下运行容器。

修改拉取git代码的git和http的url

1.进入gitlab容器内
docker exec -it gitlab

2.修改配置文件
vim /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 2222
external_url 'http://10.0.0.101'

## 2222是ssh端口
## url

3.修改第二个配置文件(gitlab.yml)
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
host: 10.0.0.101
    port: 2222
    https: false
    
    ssh_port: 2222

## 优化
# 虚拟机操作
[root@docker01 ~]# vim /data/docker/gitlab/config/gitlab.rb
或者在容器内
vim /etc/gitlab/gitlab.rb
# 关闭普罗米修斯
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
prometheus_monitoring['enable'] = false
## 告警关闭
alertmanager['enable'] = false
## 关闭前端node功能
node_exporter['enable'] = false
## 关闭redis功能
redis_exporter['enable'] = false
## 关闭postgre功能
postgres_exporter['enable'] = false
## 图形展示
grafana['enable'] = false

## 从启gitlab
gitlab-ctl restart

配置gitlab

# 安装git
yum install -y git

# 在当前目录创建为仓库
git init .

# 配置用户
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"

# 将本地仓库和远程仓库关联起来
git remote add origin git@gitee.com:baixiongcom/code.git

# 关联后
root@gitlab:/code# cat .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = http://gitlab/root/code.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        
# 修改url
url = ssh://http://10.0.0.101:2222/root/code.git

# 把公钥放到gitlab上
ssh-keygen

# 下拉
git clone ssh://http://10.0.0.101:2222/root/code.git
git pull

# 上传
git push -u origin master
git push --all

# 保存代码
root@gitlab:/code# git add .
root@gitlab:/code# git commit -m 'v1'

image-20230912173923521

从新搞一个jenkins(配置插件)

# 生成前去生成运行key,ssh-ketgen
docker run \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
--user=root \
--privileged=true \
-v /root/.ssh:/root/.ssh \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /data/jenkins:/var/jenkins_home \
-v /root/.docker:/root/.docker \
-d jenkins/jenkins:2.422

[root@docker02 ~]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
437a889d68894b4b8424a6a76e5914f2

# 把jenkins的插件包放到虚拟机的/jenkins/下,这个版本可不用,自己去下载
--name jenkins: 指定容器的名称为 "jenkins"。
-p 8080:8080: 将容器内部的 8080 端口映射到宿主机的 8080 端口,用于访问 Jenkins Web 界面。
-p 50000:50000: 将容器内部的 50000 端口映射到宿主机的 50000 端口,用于构建代理节点。
--user=root: 在容器中使用 root 用户。
--privileged=true: 提供容器完全的特权访问,以便在容器内执行一些需要特权的操作。
-v /root/.ssh:/root/.ssh: 将宿主机 /root/.ssh 目录挂载到容器的 /root/.ssh 目录,用于 SSH 密钥的配置。
-v /var/run/docker.sock:/var/run/docker.sock: 将宿主机的 Docker Socket 文件挂载到容器中,以便容器可以与宿主机上的 Docker 引擎进行交互。
-v /usr/bin/docker:/usr/bin/docker: 将宿主机的 Docker 可执行文件挂载到容器中,以便容器内的 Jenkins 可以直接调用宿主机上的 Docker。
-v /data/jenkins:/var/jenkins_home: 将宿主机的 /data/jenkins 目录挂载到容器的 /var/jenkins_home 目录,用于持久化 Jenkins 数据。
-d: 在后台模式下运行容器。

jenkins配置

# 公钥放到gitlab里
# 放好后要手动进行命令拉取,先进行指纹认证,命令就是报错里有

# 安装ssh ,git ,docker的插件

# 创建一个新的项目
项目名称:Admin
选自由项
GIt的URL:ssh://http://10.0.0.101:2222/root/code.git
# nginx目录(无用)
root   /usr/share/nginx/html

# 文件内容jenkins容器内的文件,在workspace目录下/var/jenkins_home/workspace

FROM nginx:alpine
COPY Admin/. /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]

# 用echo 添加文件内容

echo -e "FROM nginx:alpine\nCOPY Admin/. /usr/share/nginx/html/\nCMD [\"nginx\", \"-g\", \"daemon off;\"]" > dockerfile

# jenkins执行的ssh命令
cd $WORKSPACE &&\
docker build -t wordpress:t1 ../
docker run --name wordpress -p 9999:80 -d wordpress:t1

## $WORKSPACE,为库名,不是workspace这个目录
docker build -t wordpress:t1 ../

harbor配置

安装

先安装docker和docker-compose

# 修改harbor的docker-compose配置文件
[root@harbor harbor]# vim harbor.yml 
hostname: 10.0.0.100
harbor_admin_password: 123
----------注释https内容---------------------
# https related config
#https:
  # https port for harbor, default is 443
#  port: 443
  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
-------------------------------------------

[root@harbor harbor]# docker login 10.0.0.100:80
docker 默认使用443,需要安全证书认证登录
## 修改docker配置文件(所有机子)
[root@harbor harbor]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://7t3bpp45.mirror.aliyuncs.com"],
  "insecure-registries": ["http://10.0.0.100"]
}
 
## 重启docker与docker-compose
[root@harbor harbor]# systemctl restart docker
[root@harbor harbor]# docker-compose restart

# 修改镜像名
[root@docker01 ~]# docker tag web:v1 10.0.0.100/wordpress/web:v1、
# 推送镜像
[root@docker01 ~]# docker push 10.0.0.100/wordpress/web:v1 
[root@docker02 ~]# docker pull 10.0.0.100/wordpress/web:v1

配置

# 把jenkins的密钥推到web机器上
[root@docker01 ~]# docker exec -it jenkins /bin/bash
root@e0fc5b385d6b:/# ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.102

# 创建项目
项目名称:wordpress

docker登录harbor持久化

# 登录harbor
docker login -u admin -p Harbor12345 10.0.0.100

root@e0fc5b385d6b:/# cat /root/.docker/config.json 
{
        "auths": {
                "10.0.0.100": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        }

jenkins的ssh命令

cd $WORKSPACE &&\
docker rmi -f wordpress:t1 2> /dev/null &&\
docker build -t wordpress:t1 ../ &&\
docker login -u admin -p Harbor12345 10.0.0.100 &&\
docker tag wordpress:t1 10.0.0.100/wordpress/cs:v1 &&\
docker push 10.0.0.100/wordpress/cs:v1 &&\
ssh 10.0.0.102 docker rmi -f 10.0.0.100/wordpress/cs:v1 2> /dev/null &&\
ssh 10.0.0.102 docker rm -f wordpress &&\
ssh 10.0.0.102 docker pull 10.0.0.100/wordpress/cs:v1 &&\
ssh 10.0.0.102 docker run --name wordpress -p 9999:80 -d 10.0.0.100/wordpress/cs:v1

docker 登录失败解决方法

## 解决方法
# 进入harbor目录
[root@harbor harbor]# cd /root/harbor
# 停止compose启动的所有容器
[root@harbor harbor]# docker-compose stop
# 删除所有容器
[root@harbor harbor]# docker rm -f $(docker ps -aq)
# compose启动的所有容器并在后台运行
[root@harbor harbor]# docker-compose up -d
cd /home/huangjinjin/software/springdocker
docker build -t zwt:v1.0 .
docker login -u admin -p Harbor123 192.168.10.8
docker tag zwt:v1.0 192.168.10.8/omg/zwt:v1.0
docker push 192.168.10.8/omg/zwt:v1.0