MacOS 搭建 Jenkins 环境。
brew upgrade cmake
rm -rf ~/Library/Caches/Homebrew/portable-ruby-3.1.4.arm64_big_sur.bottle.tar.gz
Docker Desktop 收费! 首先在 docker 官网上下载好支持 m1 版本的 desktop 客户端,随后打开 jenkins.io 查看安装命令:
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
https://cloud.tencent.com/developer/article/1893274
http://localhost:8080 安装好后输入密码注册即可,选择推荐插件,成功图: 9b12c3f8df204c1295512f83b4e89cfc cat /var/jenkins_home/secrets/initialAdminPassword podman
随后可以进行一些案例,创建新项目,输入响应的 git 地址,然后加入 jenkinsfile、groovy 语言的流水线式脚本:
// 写流水线的脚本
pipeline {
// 全部的 CICD 流程都需要在这里定义
// 任何一个代理可用就可以执行
agent any
// 定义一些环境信息
// 定义流水线的加工流程
stages {
// 流水线的所有阶段
// 1. 编译
stage('bianyi') {
steps {
echo "bianyi..."
}
}
// 2. 测试
stage('test') {
steps {
echo "test..."
}
}
// 3. 打包
stage('dabao') {
steps {
echo "package..."
}
}
// 4. 部署
stage('build') {
steps {
echo "build..."
}
}
}
}
随后在 blue ocean 运行即可。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
/bin/zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
zsh: command not found: brew
对于搭载 Intel 芯片的 macOS,添加以下行到您的 .zshrc 文件:
export PATH="/usr/local/bin:$PATH"
对于搭载 Apple Silicon 的 macOS,添加以下行到您的 .zshrc 文件:
export PATH="/opt/homebrew/bin:$PATH"
对于 Linux,添加以下行到您的 .zshrc 文件:
export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
要编辑 .zshrc 文件,您可以使用任何文本编辑器,例如,在终端中运行 nano ~/.zshrc
,添加适当的行,保存更改并退出编辑器。
应用更改: 添加正确的行到您的 .zshrc 文件后,通过运行以下命令来应用更改:
source ~/.zshrc
或者简单地关闭并重新打开您的终端。
验证安装: 要验证 Homebrew 是否已安装并且在您的 PATH 中,运行:
brew --version
您应该会在终端中看到打印出来的 Homebrew 版本。
如果在执行这些步骤后仍然遇到问题,请确保您的 .zshrc 文件中没有打字错误,并且确保 Homebrew 已经成功安装。
inet 10.12.152.102 netmask 0xfffff800 broadcast 10.12.159.255
https://www.jenkins.io/download/lts/macos/ Sample commands:
brew install jenkins-lts
brew services restart jenkins-lts
To start jenkins-lts now and restart at login:
brew services start jenkins-lts
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/openjdk/bin/java -Dmail.smtp.starttls.enable\=true -jar /opt/homebrew/opt/jenkins-lts/libexec/jenkins.war --httpListenAddress\=127.0.0.1 --httpPort\=8080
MacOS 访问 Windows 远程桌面(RDP)的方法
Blue Ocean 入门 https://www.jenkins.io/zh/doc/book/blueocean/getting-started/
打开 Finder
在显示器的顶部菜单选择前往->前往文件夹
输入 ~/.gitignore_global
右键用记事本打开即可
如果不显示,请允许 Mac 显示所有隐藏文件!! 打开终端,输入:
defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool false 此命令关闭显示隐藏文件
命令运行之后需要重新加载 Finder:快捷键 option+command+esc,选中 Finder,重新启动即可 重启电脑也可以。
*~
.DS_Store
.idea
https://zhuanlan.zhihu.com/p/620236975
~/.jenkins/workspace
Additional Behaviours 高级的克隆行为 克隆和拉取操作的超时时间(分钟)调整为 60。
#!/bin/bash
# 1. 检查工作区,整个 git 干净。check_workspace
# 克隆时递归初始化所有子模块
git submodule update --init --recursive
#!/bin/bash
# 6. 提交构建结果。submit_result
# 获取脚本自身的完整路径($0 是脚本的名字或路径)
# 注意:如果脚本是通过相对路径或没有路径的方式执行的,$0 可能只包含脚本名
script_path="$0"
# 如果 $0 没有包含路径,那么尝试使用 readlink(在支持的系统上)
# 注意:readlink 不是所有系统都支持,而且可能需要安装 coreutils 包
if [ ! -h "$script_path" ]; then
# 如果脚本不是符号链接,则尝试使用 realpath(在支持的系统上)
if command -v realpath >/dev/null 2>&1; then
script_path=$(realpath "$script_path")
else
# 如果没有 realpath,则假设脚本在 $PWD(当前工作目录)中
script_path="$PWD/$script_path"
fi
fi
# 使用 dirname 命令提取目录部分
script_dir=$(dirname "$script_path")
current_dir=$(pwd)
python3 $script_dir/pyscript/submit_result.py
# 检查返回码
code=$?
if [ $code -ne 0 ]; then
echo "Error: Command failed with exit status $code"
exit 1 # 退出脚本并返回错误状态
else
echo "Command succeeded."
fi
#encoding=utf8
import re, os, sys
def main():
return 0
if __name__ == "__main__":
sys.exit(main())
ERROR: no file at "/usr/local/opt/libxcb/lib/libxcb.1.dylib"
ERROR: no file at "/usr/local/opt/libxcb/lib/libxcb-xfixes.0.dylib"
ERROR: no file at "/usr/local/opt/libxau/lib/libXau.6.dylib"
ERROR: no file at "/usr/local/opt/libxdmcp/lib/libXdmcp.6.dylib"
缺少这个包 安装就可以。
brew install libxcb
brew unlink libxcb && brew link libxcb
brew cleanup brew uninstall libxcb brew install libxcb
当配置完 Jenkins,准备测试时,是无法通过地址访问你的页面,本机上也只能使用 localhost 和 127.0.0.1 打开页面。
需要在以下两个文件中,配置 0.0.0.0
。
~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
这个貌似不用。
/opt/homebrew/Cellar/jenkins-lts/2.303.2/homebrew.mxcl.jenkins-lts.plist
这个管用:
/opt/homebrew/Cellar/jenkins-lts/2.452.1/homebrew.mxcl.jenkins-lts.plist
/Users/<username>/.jenkins/users/
。
渗透笔记 BCrypt 实战两则 首先,可以在官网中取得源代码 http://www.mindrot.org/projects/jBCrypt/ 然后通过 Ant 进行编译。编译之后得到 jbcrypt.jar。也可以不需要进行编译,而直接使用源码中的 java 文件(本身仅一个文件)。 下面是官网的一个 Demo。
public class BCryptDemo {
public static void main(String[] args) {
// Hash a password for the first time
String password = "testpassword";
String hashed = BCrypt.hashpw(password, BCrypt.gensalt());
System.out.println(hashed);
// gensalt's log_rounds parameter determines the complexity
// the work factor is 2**log_rounds, and the default is 10
String hashed2 = BCrypt.hashpw(password, BCrypt.gensalt(12));
// Check that an unencrypted password matches one that has
// previously been hashed
String candidate = "testpassword";
//String candidate = "wrongtestpassword";
if (BCrypt.checkpw(candidate, hashed))
System.out.println("It matches");
else
System.out.println("It does not match");
}
}
修改 JENKINS_HOME/users/usernamedir 目录下的 config.xml 文件 注:usernamedir 就是你忘记密码对应的用户文件夹 如果是 java -jar 方式启动的,HOME 目录位于 /root/.jenkins 修改 config.xml,找到 passwordHash 部分,替换原有的 hash 值
123456 的 hash 值
<jenkins.security.seed.UserSeedProperty>
<seed>16966906148f1cb6</seed>
</jenkins.security.seed.UserSeedProperty>
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
</hudson.security.HudsonPrivateSecurityRealm_-Details>
重启 Jenkins /etc/init.d/jenkins restart
进入 Jenkins 主目录,备份 config.xml cp config.xml config.xml.bak
修改 config.xml 文件
找到关键词 useSecurity ,把后面的值 true 改为 false 重启 Jenkins /etc/init.d/jenkins restart
可以无账号和密码登录 Jenkins
在 Jenkins 中,我们可以通过配置延长默认的 10 分钟超时。
源码管理
的 Additional Behaviours
,点击 新增
。高级的克隆行为
。克隆和拉取操作的超时时间(分钟)
,
点击 ?
可以看到默认超时时间是 10 分钟的说明,保险起见,
我们可以直接配置个 60 或 120 分钟,保证可以正常克隆完所有代码。
并勾选 浅克隆
,深度为 1。完成
,然后重新构建项目即可。选项参数 CMAKE_OSX_ARCHITECTURES x86_64 arm64
文本参数 FTP_ARM64_ADDR FTP_X86_64_ADDR
Begin sign dmg 打签名
OkApp_1.0.7.dmg: operation inapplicable or not supported for this type of code
Command succeeded.
Begin notarization 公证 . Please wait a few minutes...
Waiting for processing to complete.
Current status: Accepted........Processing complete
id: 2847a458-a8fa-4d84-ac1f-3cce7a08d567
status: Accepted
Begin staple 装订票据
Processing: /Users/product/release/App/OkApp_1.0.7.dmg
Processing: /Users/product/release/App/OkApp_1.0.7.dmg
The staple and validate action worked!
Check staple 检查票据
OkApp_1.0.7.dmg: accepted
source=Notarized Developer ID
Command succeeded.
Command succeeded.
Begin sign dmg 打签名
OkApp_1.0.7.dmg: operation inapplicable or not supported for this type of code
Command succeeded.
Begin notarization 公证 . Please wait a few minutes...
Waiting for processing to complete.
Current status: Invalid........Processing complete
id: b7ac9505-cefa-43dc-815d-192eea97d407
status: Invalid
Begin staple 装订票据
Processing: /Users/product/release/App/OkApp_1.0.7.dmg
CloudKit query for OkApp_1.0.7.dmg (2/) failed due to "Record not found".
Could not find base64 encoded ticket in response for 2/
The staple and validate action failed! Error 65.
Check staple 检查票据
OkApp_1.0.7.dmg: rejected
source=Unnotarized Developer ID
Error: Command failed with exit status 3
script returned exit code 3
这个问题是因为签字和公证之间修改了二进制。
# 查询公证失败原因:
xcrun notarytool log 31ea8ce2-4d7e-495d-ab84-f3c89745d43f --keychain-profile "gongzheng"
{
"logFormatVersion": 1,
"jobId": "31ea8ce2-4d7e-495d-ab84-f3c89745d43f",
"status": "Invalid",
"statusSummary": "Archive contains critical validation errors",
"statusCode": 4000,
"archiveFilename": "OkApp_1.0.11.dmg",
"uploadDate": "2024-07-19T07:20:44.060Z",
"sha256": "08ab8a14c07cb96aee47927daf0cfd94abdae607c4fd8ecf88a52d95d32f453f",
"ticketContents": null,
"issues": [
{
"severity": "error",
"code": null,
"path": "OkApp_1.0.11.dmg/OkApp.app/Contents/Frameworks/libkncnn.dylib",
"message": "The signature of the binary is invalid.",
"docUrl": "developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735",
"architecture": "x86_64"
},
{
"severity": "error",
"code": null,
"path": "OkApp_1.0.11.dmg/OkApp.app/Contents/MacOS/convert_helper",
"message": "The signature of the binary is invalid.",
"docUrl": "developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735",
"architecture": "x86_64"
}
]
}