【Docker/GitLab/Jenkins】(上)

简介: 【Docker/GitLab/Jenkins】

Docker/GitLab/Jenkins

cc9680083f474914a4c5bafab93caa27.png

5696aab16ad0463b8e9a3c15cd4de976.png


文章目录



一、docker安装


说明:以下为国内云服务器(阿里云,腾讯云)以及自行安装的CentOS7为环境


准备工作,查看内核信息:

uname -r


移除yum.pid文件

rm -f /var/run/yum.pid


更新yum源

yum update


出现[Errno -1] 软件包与预期下载的不符。 建议:运行 yum --enablerepo=updates clean metadata正在尝试其它镜像。使用以下命令

yum --enablerepo=updates clean metadata


编辑文件改成Centos7

cd /etc/yum.repos.d
vi CentOS-Base.repo


将文件中$releasever全部改成7

:%s/$releasever/7/g


清除和缓存

yum clean all && yum makecache


卸载旧版本

sudo yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-engine \
        docker-selinux \
        docker-ce


卸载后将保留/var/lib/docker的内容(镜像、容器、存储卷和网络等)。

rm -rf /var/lib/docker


下载之前查看网络环境在出口是否封了相应端口

ping baidu.com


安装前可查看device-mapper-persistent-data和lvm2是否已经安装,如果安装了可以跳过这个步骤

rpm -qa|grep device-mapper-persistent-data
rpm -qa|grep lvm2


安装依赖软件包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2


安装yum工具包

sudo yum -y install yum-utils


设置yum源

如果服务器在国外可以使用官方的

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo


如果服务器在国内则使用阿里云的

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


更新yum软件包索引

sudo yum makecache fast


安装Docker

安装最新版本docker-ce

sudo yum install -y docker-ce


安装指定版本docker-ce可使用以下命令查看

sudo yum list docker-ce.x86_64  --showduplicates | sort -r


安装特定版本

sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io


安装完成之后可以使用命令查看

docker version


结果:出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

重启docker

systemctl start docker


查看状态

systemctl status docker


再次查看版本

docker version


结果:


Client: Docker Engine - Community

Version: 20.10.9

API version: 1.41

Go version: go1.16.8

Git commit: c2ea9bc

Built: Mon Oct 4 16:08:25 2021

OS/Arch: linux/amd64

Context: default

Experimental: true

Server: Docker Engine - Community

Engine:

Version: 20.10.9

API version: 1.41 (minimum version 1.12)

Go version: go1.16.8

Git commit: 79ea9d3

Built: Mon Oct 4 16:06:48 2021

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.4.11

GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8

runc:

Version: 1.0.2

GitCommit: v1.0.2-0-g52b36a2

docker-init:

Version: 0.19.0

GitCommit: de40ad0


通知systemd重载此配置文件

systemctl daemon-reload


docker开机自启设置

systemctl enable docker.service


出现Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.指定root用户添加到用户组,然后重试开机自启动设置

usermod -aG docker root


重载配置,重启docker服务

systemctl daemon-reload
systemctl restart docker


说明:以下为AWS服务器的环境,AWS服务器则执行以下命令进行docker安装


更新yum源

sudo yum update -y


安装docker

sudo amazon-linux-extras install docker


启动docker

sudo service docker start


二、配置docker对外端口


安装好docker之后还需要对外暴露接口

vim /usr/lib/systemd/system/docker.service


找到 ExecStart=/usr/bin/dockerd在后面添加tcp://0.0.0.0:端口

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:9004 -H fd://


重载配置,重启docker

systemctl daemon-reload
 systemctl restart docker


centos开放端口宿主机访问

firewall-cmd --add-port=9004/tcp --permanent
firewall-cmd --reload


查询端口是否开启命令

firewall-cmd --query-port=9004/tcp


除此之外还可以开机自启动,将firewalld起起来即可,并且允许其自启动

systemctl start firewalld 
systemctl enable firewalld


如果出现Failed to start firewalld.service: Unit is masked.错误则执行以下命令

systemctl unmask firewalld


浏览器访问,查看docker版本信息

http://xx.xx.xx.xx:9004/version


如果无法访问,重启服务器查看端口

telnet localhost 9004


如果不小心删除了/var/lib/docker导致后面拉取镜像时报错open /var/lib/docker/tmp/GetImageBlob974299692: no such file or directory,不用改什么操作,重启docker即可


systemctl daemon-reload
systemctl restart docker


三、安装配置gitlab


gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本

docker pull gitlab/gitlab-ce


创建gitlab日志,数据,配置的存放路径,通常会在构建容器的时间,会把配置 (etc) 、 日志 (log) 、数据 (data) 放到容器外面,方便后期数据迁移或者修改配置

sudo mkdir -p /docker/gitlab/config   /docker/gitlab/logs   /docker/gitlab/data


构建容器

sudo docker run --detach \
--hostname  gitlab \
--publish 8011:443  \
--publish  8012:8012  \
--publish  8013:22 \
--privileged=true  \
--name gitlab \
--restart always \
--volume /docker/gitlab/config:/etc/gitlab \
--volume /docker/gitlab/logs:/var/log/gitlab \
--volume /docker/gitlab/data:/var/opt/gitlab \
--volume  /docker/gitlab/logs/reconfigure:/var/log/gitlab/reconfigure \
gitlab/gitlab-ce:latest


添加配置

sudo vi /docker/gitlab/config/gitlab.rb


添加下面3行

###配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://xx.xx.xxx.xxx:8012'
###配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'xx.xx.xxx.xxx'
###此端口是run时22端口映射的8013端口
gitlab_rails['gitlab_shell_ssh_port'] = 8013
###保存推出
:wq


看个人需要,一般而已都会限制内存,也可以在docker启动的时候配置,命令为-m 4G

docker update --memory 4096m --memory-swap -1 gitlab


重启gitlab

docker restart gitlab


更新授权

sudo docker exec -it gitlab update-permissions


进入gitlab容器

docker exec -it gitlab bash


重新载入配置文件,并开启

gitlab-ctl reconfigure
gitlab-ctl start


查看密码

gitlab-rails console production


进入gitlab控制台

gitlab-rails console -e production


获得用户数据,修改用户密码

user = User.where(id: 1).first
user.password='2YkDixw6xJiD/68kCsAZBu9W9ZhGdRlT0YykDYiOvOAE=1'
user.password_confirmation='2YkDixw6xJiD/68kCsAZBu9W9ZhGdRlT0YykDYiOvOAE=1'
user.save!
quit


重启gitlab需要等待一段时间才能访问,否则会出现502,如果出现502,还有可能是内存不够的原因,建议查看docker容器的gitlab日志

docker restart gitlab


四、安装配置jekins


一、准备工作


上传jdk到自定义目录,这里提供jdk1.8的linux版本,从官网拉下来的

链接:https://pan.baidu.com/s/1nAVgmke9RbF8MnXo33S72Q

提取码:mvsq


查看版本

java -version


上传maven到自定义目录,这里提供maven3.8.3的linux版本,从官网拉下来的

链接:https://pan.baidu.com/s/1rC4NsMX5i0669_ONJV3MJA

提取码:ek1p


查看版本

mvn -v


关于git其实可以使用默认的git,进入到容器中通过以下命令进行查看git版本

git --version


当前也可以自行安装git,在docker容器启动的时候配置映射路径,并且在/etc/profile的path路径中添加git安装路径即可,可通过以下命令查看git安装路径

which git


需要注意的是docker容器每次重新启动,会将容器内部生成的ssh key移除掉,所以我们可以通过映射路径或者复制宿主机的ssh key到容器内部,也可以重新生成然后去到gitlab的ssh key配置。下面的邮箱为你github、gitee或者gitlab登录的邮箱,执行命令之后,连续三次回车即可生成,生成git的ssh key命令:


ssh-keygen -t rsa -C "java_wxid@aliyun.com"


查询生成的ssh key的路径:

cd ~/.ssh


外部配置的jdk和maven需要映射到jenkins容器,所以相关的配置也需要映射进去,所以需要提前在宿主机配置

vim /etc/profile


在最后一行添加java环境变量和maven环境变量

###java环境配置
export JAVA_HOME=/opt/java/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=./:JAVA_HOME/lib:$JRE_HOME/lib
###maven环境配置
export M2_HOME=/opt/java/maven
###git环境配置
export GIT_HOME=/opt/java/git
###path
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVA_HOME/bin:$M2_HOME/bin:$GIT_HOME/bin:$PATH


立即重载配置

source /etc/profile


查看版本信息

mvn -v

二、下载安装配置Jenkins


下载Jenkins的Docker镜像

docker pull jenkins/jenkins:lts


创建jenkins工作目录的存放路径

sudo mkdir -p /docker/jenkins/data


在Docker容器中运行Jenkins

docker run -p 8014:8080 -p 8015:5000 --name jenkins -m 2G \
-u root \
--restart always \
-v /docker/jenkins/data:/var/jenkins_home \
-v /etc/localtime:/etc/localtime  \
-v /usr/local/src/apache-maven-3.8.3:/opt/java/maven \
-v /usr/local/src/jdk1.8.0_301:/opt/java/jdk \
-v /etc/profile:/etc/profile \
-v /root/.ssh/id_rsa:/root/.ssh/id_rsa \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /bin/docker:/usr/bin/docker \
-d jenkins/jenkins:lts


暂停jenkins

docker stop jenkins


看个人需要,一般而已都会限制内存,可以在docker启动命令中配置,配置命令为-m 2G

docker update --memory 2048m --memory-swap -1 jenkins


开启jenkins

docker start jenkins


进入jenkins容器

docker exec -u 0 -it jenkins /bin/bash


立即重载配置

source /etc/profile


查看root密码

cat /var/jenkins_home/secrets/initialAdminPassword


如果提示cat: /var/jenkins_home/secrets/initialAdminPassword: No such file or directory通过查找文件的方式查看密码

find / -name config.xml


一般会出现:

/var/jenkins_home/users/root_9685925808796613467/config.xml

/var/jenkins_home/config.xml

选择用户名相关的文件:

cat /var/jenkins_home/users/root_9685925808796613467/config.xml


找到passwordHash标签:

jbcrypt:$2a10 1010yB8omAzzWpk1oNToWQPIWewpqBKbhJGUU5UDd470yJCN3HVXqCDc6

密码就在###jbcrypt:后面,即

$2a$10$yB8omAzzWpk1oNToWQPIWewpqBKbhJGUU5UDd470yJCN3HVXqCDc6


我们可以改成:

$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS


即密码:111111

或者

jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq

即密码:123456

使用root用户登录即可

上面那串如何生成的呢?


Jenkins采用Java加密工具jBCrypt,所以我们在生成密码的时候需要添加相关的jar包。

<dependency>
    <groupId>org.mindrot</groupId>
    <artifactId>jbcrypt</artifactId>
    <version>0.4</version>
</dependency>


    // 加密
    String admin = BCrypt.hashpw("admin", BCrypt.gensalt());
    System.out.println("加密:"+admin);
    // 解密
    if(BCrypt.checkpw("admin",admin)){
        System.out.println("is match");
    } else {
        System.out.println("is not match");
    }


如果启动容器的时候未设置开机自启动,也可以通过以下命令配置docker的容器开机自启动:docker update --restart=always 镜像ID

docker update --restart=always e39a959d7bff


重启jenkins

docker restart jenkins


如果出现jenkins实例已离线的情况,访问以下链接

http://ip:port/pluginManager/advanced


在Update Site下面替换以下链接

http://updates.jenkins.io/current/update-center.json


相关文章
|
2月前
|
监控 jenkins 持续交付
Docker和Jenkins有什么不同
【10月更文挑战第18天】Docker和Jenkins有什么不同
|
2月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
140 1
|
2月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
2月前
|
jenkins Java 持续交付
Docker搭建jenkins环境
这篇文章详细介绍了如何利用Docker搭建Jenkins环境,包括拉取Jenkins镜像、配置端口映射及初始化设置的步骤。
225 0
Docker搭建jenkins环境
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
83 0
|
2月前
|
Ubuntu jenkins 持续交付
Ubuntu系统 用docker安装jenkins
Ubuntu系统 用docker安装jenkins
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
250 0
|
3月前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
4月前
|
JavaScript jenkins 持续交付
自动化部署与持续集成:使用Jenkins和Docker优化开发流程
【8月更文挑战第31天】在软件开发的世界里,时间就是一切。本文将引导你通过Jenkins和Docker的强大组合,实现自动化部署和持续集成,让你的开发流程如丝般顺滑。我们将从基础设置开始,逐步深入到构建管道,最终实现一键部署的梦想。准备好让你的开发效率飞跃,一起探索这个令人兴奋的旅程吧!
|
4月前
|
jenkins Shell 持续交付
自动化部署:使用Jenkins和Docker实现CI/CD
【8月更文挑战第31天】 本文旨在引导读者了解如何通过Jenkins和Docker来实现持续集成和持续部署(CI/CD),从而优化开发流程,提升工作效率。文章将详细介绍配置Jenkins服务器、创建Docker镜像以及设置自动化构建和部署的步骤。通过实际操作案例,我们将展示如何将代码变更快速部署到测试或生产环境,确保软件质量与发布速度的双重保障。

热门文章

最新文章