Я перехожу с Jenkins на GitHub Actions.
Код Дженкинса:
pipeline {
agent any
stages {
stage('Start') {
steps {
sh 'ls'
}
}
stage('Clone Repo') {
steps {
git credentialsId: 'githubapp', url: 'https://github..com/configurations.git', branch: 'dev'
}
}
stage('Invoke_configure_cache_pipeline') {
steps {
script {
sh 'cat cache.csv'
def csvFile = readFile(file: 'cache.csv')
csvFile.split('\n').each {String line->
final String names = sh(script:"echo $line", returnStdout: true).trim()
def repos = line.tokenize(",").toList()
build job: 'Configurations/configure_cache', parameters: [
string(name: 'cacheName', value: repos[0]),
string(name: 'expirationType', value: repos[1]),
string(name: 'expirationTime', value: repos[2])
]
}
}
}
}
stage('End') {
steps {
sh 'ls'
}
}
}
}
Код действий GitHub:
name: Bulk Test
on:
workflow_dispatch:
jobs:
build:
runs-on: [Name]
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: List files (Start)
run: |
ls
echo "*** List Files ***"
- name: Clone configurations repository
run: |
echo "*** Clone configurations repository ***"
git clone https://github.com/$userName/configurations.git
git checkout dev
git pull origin dev
git branch
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '14'
- name: Install dependencies
run: npm install node-fetch
- name: Read CSV and trigger workflows
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
const fs = require('fs');
const fetch = require('node-fetch');
async function triggerConfigureCacheWorkflow() {
const owner = 'Rohit';
const repo = 'config-pipeline-github-actions';
const workflow_id = 'Config-Cache';
const ref = 'dev';
const token = process.env.GITHUB_TOKEN;
const csvFile = fs.readFileSync('cache.csv', 'utf-8');
const lines = csvFile.split('\n');
for (const line of lines) {
const repos = line.split(',').map(item => item.trim());
const cacheName = repos[0];
const expirationType = repos[1];
const expirationTime = repos[2];
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/actions/workflows/${workflow_id}/dispatches`, {
method: 'POST',
headers: {
'Authorization': `token ${token}`,
'Accept': 'application/vnd.github.v3+json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
ref,
inputs: {
cacheName,
expirationType,
expirationTime
}
})
});
if (!response.ok) {
throw new Error(`Error triggering workflow: ${response.statusText}`);
}
console.info(`Workflow triggered successfully for cacheName: ${cacheName}`);
}
}
triggerConfigureCacheWorkflow().catch(error => console.error(error));
- name: List files (End)
run: ls
Ошибка: фатальная: не удалось прочитать имя пользователя для https://github.vodafone.com: такого устройства или адреса нет.
Мой код находится в GitHub, и репозиторий, который я пытаюсь клонировать, также находится в GitHub. Действительно ли мне нужно предоставлять пользователя? Я сомневаюсь, что в моем коде много недостатков.
Цель: из исходного рабочего процесса я хочу несколько раз запустить целевой рабочий процесс для настройки кэша.
Также обратите внимание, что концепция многократного использования рабочего процесса относится к чему-то другому в действиях GitHub.
Код теперь не работает при «Чтении CSV и рабочих процессах запуска». Я немного изменил его: - name: Read CSV and trigger workflows env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | #!/path/to/node const fs = require("fs"); const fetch = require('node-fetch');
Ошибка: /runner/_work/_temp/xxx: строка 2: синтаксическая ошибка рядом с неожиданным токеном `('
Кажется, это связано с чем-то другим (с участием Node). Не могли бы вы открыть еще один вопрос, поделившись дополнительным контекстом (например, всей конфигурацией рабочего процесса)?
Похоже, мне придется подождать. - «Прошло 3 дня с тех пор, как вы задали свой последний вопрос. Мы просим вас подождать 1 день, прежде чем задавать снова». Хотя это сообщество предлагает ценную информацию, я не считаю его гостеприимным.
Завтра попробую еще раз. Спасибо, @GuiFalourd!
Хорошо. А пока я добавлю официальный ответ на этот вопрос.
Действия /оформление заказа уже клонируют исходный код репозитория в экземпляре бегуна, поэтому вам не нужно впоследствии добавлять шаг клонирования git.
Просто используйте cd <repository-name>
, и вы сможете получить доступ к файлам репо в рабочем процессе.
actions/checkout
уже клонирует репозиторий в экземпляре бегуна, поэтому вам не нужно впоследствии добавлять шаг клонирования git. Просто используйтеcd <repo-name>
, и вы сможете получить доступ к файлам репо в рабочем процессе.