各种系统安装大全-日积月累积攒

ubuntu20.04安装jdk11 maven

安装jdk11
apt-update
apt install openjdk-11-jdk
默认安装目录映射为 /usr/bin/java
实际为 /usr/lib/jvm/java-11-openjdk-amd64

安装maven
官网下载maven wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz
tar -zxf apache-maven-3.9.3-bin.tar.gz
mv apache-maven-3.9.3 /usr/local/
配置软链接
ln -s /usr/local/apache-maven-3.9.3 /usr/local/maven

查看两个组件安装路径
root@wind-othertest:~# whereis java
java: /usr/bin/java /usr/share/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz
root@wind-othertest:~# whereis maven
maven: /usr/local/maven

配置环境变量
vim /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export MAVEN_HOME=/usr/local/maven
export CLASSPATH=${JAVA_HOME}/lib:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:${MAVEN_HOME}/bin:$PATH

docker 持久化安装 jenkins

1.创建jenkins数据目录

makdir /wind_test/jenkins_home

2.运行Jenkins容器
官方安装 https://www.jenkins.io/zh/doc/book/installing/

docker pull jenkins/jenkins
docker run -u root \
 -d \
 -p 8081:8080 \
 -v /wind_test/jenkins_home:/var/jenkins_home  \
 --name windjenkins \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /etc/localtime:/etc/localtime:ro \
 --restart=always \
 jenkinsci/blueocean
#-v jenkins_data:/var/jenkins_home 将之前创建的 jenkins_data 数据卷,
#-v /etc/localtime:/etc/localtime:ro 将宿主机本地时间映射到docker 容器中
挂载到容器内的 /var/jenkins_home 目录,用于持久化存储 Jenkins 的数据和配置。

3.查看docker运行状态

docker ps -a
CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS                     PORTS     NAMES
8ed38d6f4f80   jenkins/jenkins   "/usr/bin/tini -- /u…"   6 seconds ago   Exited (1) 6 seconds ago             windjenkins

4.容器排错

docker logs 8ed38d6f4f80
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

#这个错误是由于对 /var/jenkins_home 目录的写入权限不足导致的。需要修改下目录权限, 因为当映射本地数据卷时,/wind_test/jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000
执行如下命令即可:

chown -R 1000:1000 /wind_test/jenkins_home

5.重启容器,恢复正常

docker restart 8ed38d6f4f80

root@wind-othertest:~# docker port 8ed38d6f4f80
8080/tcp -> 0.0.0.0:8081
8080/tcp -> [::]:8081

6.查看容器初始密码

root@wind-othertest:~# docker exec -it 8ed38d6f4f80 cat /var/jenkins_home/secrets/initialAdminPassword
878bb616721a497daaae7cb1a69462c5

使用与之前相同的步骤访问 Jenkins Web UI 并设置初始密码。
安装所需的插件,并为管理员账号输入必要的信息。
通过以上步骤,Jenkins 的数据和配置将存储在 Docker 数据卷中。这样,即使重新创建或启动 Jenkins 容器,数据仍然会被保留下来。

在 Docker 容器中,您可以运行以下命令获取初始管理员密码:

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

请注意,如果需要备份 Jenkins 数据,您可以直接备份 Docker 数据卷(jenkins_data)或使用 Docker 提供的其他方法(如 docker cp 命令)。此外,还可以使用其他可用的存储解决方案(如网络共享存储、云存储等)来实现更高级的数据持久化和灾备方案。

其他知识1
docker 容器中,不能使用 vi 命令
是的,一些 Docker 容器默认不会包含 vi 命令或其他交互式文本编辑器。这是因为 Docker 容器通常运行在轻量级的基础操作系统镜像中,为了减小容器的大小和复杂性,不包含大型编辑器等额外组件。

从容器拷贝到宿主机:
docker cp 容器名称或ID:文件路径 目标路径
从宿主机拷贝到容器:
docker cp 源文件路径 容器名称或ID:目标路径
修改 Dockerfile 进行构建:如果您需要在容器中持久化某个文件,可以通过编写自定义 Dockerfile 来创建一个新的镜像,
在构建过程中将文件复制到容器中。在 Dockerfile 中使用 COPY 或 ADD 命令来添加文件到容器中,
并且可以在构建过程中使用任何文本编辑器来修改文件。

docker持久化gitlab

1.新建gitlab本地存储目录

mkdir -p /wind_test/gitlab/{config,logs,data}
赋权
chown  1000:1000 /wind_test/gitlab/{config,logs,data}
chown  1000:1000 /wind_test/gitlab/config
chown  1000:1000 /wind_test/gitlab/data
chown  1000:1000 /wind_test/gitlab/logs

2.docker安装

docker run -itd \
  -p 8082:80 -p 8022:22 \
  --name windgitlab \
  --restart always \
  --volume /wind_test/gitlab/config:/etc/gitlab \
  --volume /wind_test/gitlab/logs:/var/log/gitlab \
  --volume /wind_test/gitlab/data:/var/opt/gitlab \
  --volume /etc/localtime:/etc/localtime:ro \
  --privileged=true \
  gitlab/gitlab-ce

注释:

 -p 8082:80 -p 8022:22 \     # 将容器的80端口映射到主机上的8082端口,将容器的22端口映射到主机上的8022端口
  --name windgitlab \          # 指定容器的名称为windgitlab
  --restart always \           # 容器停止后始终自动重启
  --volume /wind_test/gitlab/config:/etc/gitlab \           # 将主机上的/wind_test/gitlab/config目录挂载到容器的/etc/gitlab目录
  --volume /wind_test/gitlab/logs:/var/log/gitlab \         # 将主机上的/wind_test/gitlab/logs目录挂载到容器的/var/log/gitlab目录
  --volume /wind_test/gitlab/data:/var/opt/gitlab \         # 将主机上的/wind_test/gitlab/data目录挂载到容器的/var/opt/gitlab目录
  --volume /etc/localtime:/etc/localtime:ro \              # 将主机上的/etc/localtime文件挂载到容器的/etc/localtime文件,并设置为只读
  --privileged=true \          # 赋予容器特权,允许特殊操作
  gitlab/gitlab                 # 使用gitlab/gitlab镜像创建容器

3.查看并修改root密码

docker exec -it fe4dbc52a9df cat /etc/gitlab/initial_root_password

4.gitlab配置关联LDAP,连接公司AD域
vim /data/gitlab/config/gitlab.rb

填写自己的AD域信息
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main:
    label: 'LDAP'
    host: 'abc.ldap.com'
    port: 389
    uid: 'AccountName'
    bind_dn: 'cn=user,ou=Public,ou=abc,ou=Accounts,dc=abc,dc=com'
    password: 'ladp@123'
    encryption: 'plain' 
    base: 'OU=Users,dc=abc,dc=com'
    user_filter: '(objectCategory=*)'
    EOS

修改克隆地址显示为IP或域名
vim /data/gitlab/config/gitlab.rb

gitlab_rails['gitlab_ssh_host'] = '192.168.0.11'
gitlab_rails['gitlab_shell_ssh_port'] = 8022

vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

gitlab:
    host: 192.168.0.11
    port: 8080
    https: false

进入容器中重新加载gitlab配置文件(会影响代码上传需要等待闲时执行)
docker exec -it gitlab bash

重新加载gitlab配置文件(会影响代码上传需要等待闲时执行)

docker exec -it gitlab bash
gitlab-ctl reconfigure
gitlab-ctl restart

gitlab使用记录

gitlab默认分支由master变成了main
自 2020 年 10 月 1 日 起,所有在 GitHub 上创建的新的源代码仓库就已默认被命名为"main"。此外,还有 MySQL 宣布删除 master、黑名单白名单等术语;Linus Torvalds 通过了 Linux 中避免 master/slave 等术语的提案 等等。”

然后去年,GitLab 也宣布 使用"main"代替"master"作为新的默认分支名。所以后续新建项目即默认main分支了.

1.修改默认main为 master
新建master
在这里插入图片描述

项目-代码-分支,查看分支规则-分支默认值(在这里选择默认分支)
在这里插入图片描述
受保护分支-将master分支加入到受保护,允许合并,允许推送和合并
这里推荐将master分支设置为保护,虽然后面遇到了master代码仓保护的错误提示。但在实际生产中,其他分支合并到master才是正道。
在这里插入图片描述
gitlab 合并分支(合并代码)
项目-代码-分支-找到其中一个分支,点击 Merge request
选择== source request== 以及 == target request== 最后== submit merge request==

git 推送代码(代码在电脑本地)

1.环境
由于要做Jenkins流水线 maven项目,从GitHub上 pull 了项目到本地。现在需要将代码推送到我自个搭建的git仓库中。
在这里插入图片描述
删除自带的 .git/ 文件夹
在这里插入图片描述
git init 初始化代码并生成新的本地仓信息
在这里插入图片描述

2.将代码全部添加到本地仓中
使用 git add . 将文件夹内全部都添加进去,然后添加 修改备注,方便今后区分。
使用 git remote add simplejava http://10.99.20.189:8082/root/simple-java-maven-app.git
添加远端git仓 为 simplejava .这个名字可自定义。
在这里插入图片描述
3.推送本地仓到远端仓
使用git commit --set-upstream "first commit wind"将其上传到本地仓中.
第一次使用 --set-upstream,第二次及以后可以直接使用-u 使用git commit -m “first commit wind”
git push -u simplejava master
其中 simplejava 代表前面设置的远端git仓, master代表远端git仓分支

! [rejected] master -> master (fetch first)
在这里插入图片描述因为github/gitee中的README.md文件不在本地代码目录中
使用pull将线上、线下代码进行合并
git pull --rebase simplejava master master

! [rejected] master -> master (non-fast-forward)
在这里插入图片描述
先git push -u origin master -f,然后再push,就可以了。

! [remote rejected] master -> master (pre-receive hook declined)
在这里插入图片描述git push不上去的原因在于所push的分支权限为protected,只有项目的管理员或者项目的管理员指派的具有相应权限的人才能进行push,要进行项目的push,有如下两种方法:

1.将所要push的内容所在的分支的protected权限关闭
(1)进入所在项目的settings
(2)点击进入Protected branches,点击unprotected将master分支的权限改变,即关闭master的protected权限
在这里插入图片描述

2.新建其它分支,将项目push到新建的分支上,后期再进行merge
我直接用的是 关闭master分支保护,默认情况下是不能这样做的。


Jenkins流水线-首次使用maven构建Java应用,输出 hello world

实验1:使用maven构建java应用程序
jenkins采用手动部署方式安装。
流水线1:使用maven构建java应用程序
从github中 clone helloworld 项目

客户端直接 git clone https://github.com/jenkins-docs/simple-java-maven-app.git

使用git命令或者vscode将代码添加本地代码仓并pull到本地git仓中
具体命令请见前面教程中的git 命令
git仓 http://10.99.20.189:8082/root/simple-java-maven-app-master.git
项目中simple-java-maven-app-master/jenkins/Jenkinsfile 文件代码详情

pipeline {
    agent {
        docker {
            image 'maven:3.9.0'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deliver') {
            steps {
                sh './jenkins/scripts/deliver.sh'
            }
        }
    }
}

分为四个阶段
阶段1:下载镜像并构建java包
pipeline 流水线使用 image 参数来下载’maven:3.9.0’docker镜像,并将其作为单独容器来运行。
当maven容器跑起来后,会在maven容器中运行build阶段,maven会下载构建Java应用所需的工件,这些工件最终会保存在jenkins本地maven仓库中。

阶段2:测试Java应用
当maven构建完成后,需要执行maven命令来运行java应用单元测试(由上面的 mvn test 命令生成),并生成一个JUnit XML报告,保存在 target/surefire-reports 目录 (位于Jenkins容器中的/var/jenkins_home/workspace/simple-java-maven-app 目录)。

阶段3 部署投递应用
当java应用测试通过后,下一步进行推送应用完成部署动作,此时

实验问题1:总是提示

[Pipeline] sh
+ ./jenkins/scripts/deliver.sh
/var/lib/jenkins/workspace/1.simple-java-maven-app@tmp/durable-44d7b89c/script.sh: 1: 
./jenkins/scripts/deliver.sh: Permission denied
#提示访问被拒绝,权限方面的问题

在这里插入图片描述

网上翻越了大量案例,结果都只是说 用户权限、文件权限。先后使用了手动添加标本权限。chomd 777 deliver.sh 可是执行流水线时,先前分配的权限都会被覆盖掉。
usermod -aG sudo jenkins
将Jenkins添加到root组里,也不可以。

各种方法无果,耗费许久,突然想,干脆直接在脚本文件中,添加权限命令 chmod 777 ./jenkins/scripts/deliver.sh 测试成功

        stage('Deliver') {
            steps {
                sh 'chmod 777 ./jenkins/scripts/deliver.sh'
                sh './jenkins/scripts/deliver.sh'
            }
        }

再次跑流水线,一路绿灯
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值